
Как-то сидя в мастерской,ковыряясь в интернете "надыбал" на интересную статью Прием команд с пульта дистанционного управления .Алгоритм включения - нажатие на кнопку пульта,загорается соответствующий светодиод;при каждом новом нажатии менялся на другой светодиод.
Мне же хотелось
-при нажатии кнопки включался светодиод, по нажатии этой же клавиши второй раз, он выключался.И естественно возможность включения всех светодиодов вместе.
Двумя словами - "дистанционное управление нагрузками"
Схема девайса:

Исходник:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "rc5.h"
#include "main.h"
int main (void)
{
PORTB = 0b00000000; DDRB = 0b00000000;
PORTC = 0b00000000; DDRC = 0b00000000;
PORTD = 0b00000000; DDRD = 0b11111111; // тут светодиоды
Rc5_SetRx(); // инициализируем таймер 1
sei(); // глобально разрешаем прерывания
while(1)
{
if (rc5.dataOK) // если получены данные с ПДУ
{
if (rc5.command==1) // если это кнопка 1
{
if (CheckBit(PIND, 0)) cbi(PORTD, 0); //если канал 1 включен, выключаем
else sbi(PORTD, 0); // если канал 1 выключен, включаем
}
if (rc5.command==2) // если это кнопка 2
{
if (CheckBit(PIND, 1)) cbi(PORTD, 1); //если канал 2 включен, выключаем
else sbi(PORTD, 1); // если канал 2 выключен, включаем
}
if (rc5.command==3) // если это кнопка 3
{
if (CheckBit(PIND, 2)) cbi(PORTD, 2); //если канал 3 включен, выключаем
else sbi(PORTD, 2); // если канал 3 выключен, включаем
}
if (rc5.command==4) // если это кнопка 4
{
if (CheckBit(PIND, 3)) cbi(PORTD, 3); //если канал 4 включен, выключаем
else sbi(PORTD, 3); // если канал 4 выключен, включаем
}
_delay_ms(700); //задержка 700 мс
rc5.dataOK = 0; // сбрасываем флаг
}
}
}
И так далее до восьми каналов.
Проект AVR_Studio для 4-ех каналов здесь .
Проверено - работает!
