Меню сайта
Календарь
|
Дистанционное управление на Atmega8 (протокол RC-5)Как-то сидя в мастерской,ковыряясь в интернете "надыбал" на интересную статью Прием команд с пульта дистанционного управления .Алгоритм включения - нажатие на кнопку пульта,загорается соответствующий светодиод;при каждом новом нажатии менялся на другой светодиод. Мне же хотелось -при нажатии кнопки включался светодиод, по нажатии этой же клавиши второй раз, он выключался.И естественно возможность включения всех светодиодов вместе. Двумя словами - "дистанционное управление нагрузками" Схема девайса: Исходник: #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-ех каналов здесь . Проверено - работает! |
Архив записей
Друзья сайта
Статистика
Онлайн всього: 1 Гостей: 1 Користувачів: 0 |