Скетч для автоматического программирования кнопок ТВ-пульта
- Войдите на сайт для отправки комментариев
Пнд, 03/06/2013 - 11:50
В интернете нашел скечи дя подключения (управления) ИК-приемника и скечь для определения кодов ТВ-пультов. Но процес получается сложный в силу выполнения нескольких операций: определение кодов кнопок, прописывания их... В Arduino можно реализовать функцию автоматического програмирования ТВ-пульнов?
Пример: http://www.chipdip.ru/product/bm8049m/
http://www.chipdip.ru/product/bm8040/
Прекрасный вариант: http://bezkz.su/publ/shemy/vyklyuchateli-pereklyuchateliik-f/page,1,2,300113-41-1-0-113.html#comment прошивка присутствует.
В интернете нашел скечи дя подключения (управления) ИК-приемника и скечь для определения кодов ТВ-пультов. Но процес получается сложный в силу выполнения нескольких операций: определение кодов кнопок, прописывания их... В Arduino можно реализовать функцию автоматического програмирования ТВ-пульнов?
Пример: http://www.chipdip.ru/product/bm8049m/
http://www.chipdip.ru/product/bm8040/
Прекрасный вариант: http://bezkz.su/publ/shemy/vyklyuchateli-pereklyuchateliik-f/page,1,2,300113-41-1-0-113.html#comment прошивка присутствует.
составить массив таблицу - код ик пульта - указатель на функцию с реакцией на пульт.
Далее при программировании ардуины, нажимаем кнопку на каком-то пине и по очереди нажимаем кнопки на пульте и заносим прочитанные коды в таблицу.
При эксплуатации читаем таблицу по коду и вызываем соответствующую функцию
Хотелось бы уйти от этого. Предположем мы изготавливаем изделие (механизм) который управляется Arduino. Принцип: купил, подключил, запрограмировал свой пульт от ТВ без комьютера. Посмотрите последнюю ссылку, там весь процесс реализован в совершенстве.
а зачем для программирования кодов комп?
на компе ты прописываешь только реакции ардуины на пульт, а соответсвие кнопкам уже в процессе эксплуатации ардуины
typedef void (*RF)(); typedef struct { int code; //код кнопки пульта RF func; //указатель на функцию с логикой } tCodeTab; tCodeTab codeTab[5];// всего 5 кнопок char mode;//режим. 0- обычная работа больше 0- режим программирования и номер текущей функции //функции с логикой void f1() { //.... } void f2() { //.... } void f3() { //.... } void f4() { //.... } void f5() { //.... } void setup() { mode = 0;//по умолчанию режим эксплуатации codeTab[0].func = f1;//прописываем адреса функций codeTab[1].func = f2; codeTab[2].func = f3; codeTab[3].func = f4; codeTab[4].func = f5; } void loop() { int but = digitalRead(5); //на 5-тый пин подведена кнопка программирование устройства if(but == HIGH)// по хорошему надо добавит дебаунсинг { mode = 1; } int rcode = getIRCode(); //вернет код если пришла команда 0 - иначе if (rcode == 0) { return;// команда не пришла, переход на следующий цикл } if(mode >0 && mode < 5) { codeTab[mode-1].code = rcode; //перебираем все функции и каждой прописываем код с пульта mode++; } if(mode == 5) { mode = 0;//прописаны все коды переходим в режим эксплуатации return; } if(mode == 0)//режим эксплуатации { for(int i = 0;i<5;i++) { if(codeTab[i].code == rcode) // если введенный код соответствует заполненному то вызываем функцию { codeTab[i].func(); } } } }табличку codeTab неплохо бы запихивать в EEPROM что бы при перезагрузке ардуино не забывал настройки пульта.
Код кнопки нужно прописывать в скече?
нет не нужно, после нажатия хардварной кнопки( скетч спроектирован, что есть PWM-кнопка на устройстве)
он будет ждать 5 кодов и сам их запомнит.
или ты хочешь переход в режим конфигурирования тоже с пульта сделать?
Я очень благодарен за помощь. Если не трудно опишите процес програмирования пошагово от заливки скутча до програмирования ТВ-пулта. Я новечек, и немного теряюсь)))
пишем скетч в ИДЕ ( проверь, мб я ошибся где, писал на "коленке"). Чтение с ик пульта не реализовано тут.
нажимаем кнопку загрузить.
нажимаем кнопку на ардуине присоединенную к 5-тому порту.
Нажимаем 5 кнопок на пульте,
устройство готово к эксплуатаии
Спасибо! Попробую отпишусь.
Жалуется на 51 строку " int rcode = getIRCode(); //вернет код если пришла команда 0 - иначе"
А ты её реализовал?)
Это не стандартная функция, я её как пример привел, посмотри по форуму, тут полно было тем как получить код кнопки с пульта
Пример получения:
#include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value } }А ты её реализовал?)
Это не стандартная функция, я её как пример привел, посмотри по форуму, тут полно было тем как получить код кнопки с пульта
Пример получения:
#include <IRremote.h> int RECV_PIN = 11; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver } void loop() { if (irrecv.decode(&results)) { Serial.println(results.value, HEX); irrecv.resume(); // Receive the next value } }А как в личку написать?
тут похоже её нет
тут похоже её нет
Такая тема вобщем... нужен учитель. Соответственно за деньги. Ты как не против?
увы, я сам еще изучаю ардуину и не очень силен в этом
Удачи в учебе!