Скетч для автоматического программирования кнопок ТВ-пульта

Patrik
Offline
Зарегистрирован: 15.05.2013

В интернете нашел скечи дя подключения (управления) ИК-приемника и скечь для определения кодов ТВ-пультов. Но процес получается сложный в силу выполнения нескольких операций: определение кодов кнопок, прописывания их... В 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  прошивка присутствует.

Geronimo
Offline
Зарегистрирован: 06.05.2013

Patrik пишет:

В интернете нашел скечи дя подключения (управления) ИК-приемника и скечь для определения кодов ТВ-пультов. Но процес получается сложный в силу выполнения нескольких операций: определение кодов кнопок, прописывания их... В 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  прошивка присутствует.

составить массив таблицу - код ик пульта - указатель на функцию с реакцией на пульт.

Далее при программировании ардуины, нажимаем кнопку на каком-то пине и по очереди нажимаем кнопки на пульте и заносим прочитанные коды в таблицу.

 

При эксплуатации читаем таблицу по коду и вызываем соответствующую функцию

Patrik
Offline
Зарегистрирован: 15.05.2013

Хотелось бы уйти от этого. Предположем мы изготавливаем изделие (механизм) который управляется Arduino. Принцип: купил, подключил, запрограмировал свой пульт от ТВ без комьютера. Посмотрите последнюю ссылку, там весь процесс реализован в совершенстве. 

Geronimo
Offline
Зарегистрирован: 06.05.2013

а зачем для программирования кодов комп?

на компе ты прописываешь только реакции ардуины на пульт, а соответсвие кнопкам  уже в процессе эксплуатации ардуины

Geronimo
Offline
Зарегистрирован: 06.05.2013
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 что бы при перезагрузке ардуино не забывал настройки пульта.

Patrik
Offline
Зарегистрирован: 15.05.2013

Код кнопки нужно прописывать в скече?

Geronimo
Offline
Зарегистрирован: 06.05.2013

нет не нужно, после нажатия хардварной кнопки( скетч спроектирован, что есть PWM-кнопка на устройстве)

он будет ждать 5 кодов и сам их запомнит.

или ты хочешь переход в режим конфигурирования тоже с пульта сделать?

Patrik
Offline
Зарегистрирован: 15.05.2013

Я очень благодарен за помощь. Если не трудно опишите процес програмирования пошагово от заливки скутча до програмирования ТВ-пулта. Я новечек, и немного теряюсь)))

Geronimo
Offline
Зарегистрирован: 06.05.2013

пишем скетч в ИДЕ ( проверь, мб я ошибся где, писал на "коленке"). Чтение с ик пульта не реализовано тут.

нажимаем кнопку загрузить.

нажимаем кнопку на ардуине присоединенную к 5-тому порту.

Нажимаем 5 кнопок на пульте,

устройство готово к эксплуатаии

Patrik
Offline
Зарегистрирован: 15.05.2013

Спасибо! Попробую отпишусь.

Patrik
Offline
Зарегистрирован: 15.05.2013

Жалуется на 51 строку "  int rcode = getIRCode(); //вернет код если пришла команда 0 - иначе" 

Geronimo
Offline
Зарегистрирован: 06.05.2013

А ты её реализовал?)

Это не стандартная функция, я её как пример привел, посмотри по форуму, тут полно было тем как получить код кнопки с пульта

Пример получения:

#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
  }
}

 

Patrik
Offline
Зарегистрирован: 15.05.2013

Geronimo пишет:

А ты её реализовал?)

Это не стандартная функция, я её как пример привел, посмотри по форуму, тут полно было тем как получить код кнопки с пульта

Пример получения:

#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
  }
}

А как в личку написать?

Geronimo
Offline
Зарегистрирован: 06.05.2013

тут похоже её нет

Patrik
Offline
Зарегистрирован: 15.05.2013

Geronimo пишет:

тут похоже её нет

Такая тема вобщем... нужен учитель. Соответственно за деньги. Ты как не против?

Geronimo
Offline
Зарегистрирован: 06.05.2013

увы, я сам еще изучаю ардуину и не очень силен в этом

Patrik
Offline
Зарегистрирован: 15.05.2013

Удачи в учебе!