скетч для покупного ик пульта

skoctehs
Offline
Зарегистрирован: 27.02.2016

/*
ИК датчик подключен на D2, т.к. на него прерывание 0 
*/
byte n = 0;
word keycode = 0;
unsigned long tm = 0;
unsigned long last;
char ch = ' ';

void setup()
{
  pinMode(2, INPUT); // ir recv

  Serial.begin(115000);
  attachInterrupt(0, irread, FALLING);
}


void keypressed();
{
  n = 0;

    switch (keycode)
    {
      case 0x1FE:
        ch = '1';
        break;
      case 0xFE:
        ch = '2';
        break;
      case 0x817E:
        ch = '3';
        break;
      case 0x41BE:
        ch = '4';
        break;
      case 0x40BE:
        ch = '5';
        break;
      case 0xC13E:
        ch = '6';
        break;
      case 0x21DE:
        ch = '7';
        break;
      case 0x20DE:
        ch = '8';
        break;
      case 0xA15E:
        ch = '9';
        break;
      case 0x609E:
        ch = '0';
        break;
      case 0x619E:
        ch = '*';
        break;
      case 0xE11E:
        ch = '#';
        break;
      case 0x51AE:
        ch = 'L';
        break;
      case 0x10EE:
        ch = 'U';
        break;
      case 0xD12E:
        ch = 'R';
        break;
      case 0x30CE:
        ch = 'D';
        break;
      case 0x50AE:
        ch = 'M';
        break;
      default:
      ch=' ';
       // Serial.println(keycode,HEX);
    }
    
 // Serial.print(ch);  
}

void loop()
{
  if (n == 32)
  {
    keypressed();
  }
}

void irread()
{
  tm = micros() - last;
  last = micros();
  n += 1;
  if (tm > 3000) {
    keycode = 0;
    n = 0;
  }
  if (n > 8) {
    if (tm > 1500) keycode += 1;
    keycode = keycode << 1;
  }
}

 

skoctehs
Offline
Зарегистрирован: 27.02.2016

не использую IRREMOTE.H = китайский пульт понимает через раз, хотя тайминги сигнала снимает четко

опять же много места занимало

 

реакцию на кнопки пишем в подпрограмме keypressed

цифры * # =  и так ясно :)

L U R D M = кнопки лево верх право низ ОК

если пульт другой, убираем комментарии перед print и смотрим коды кнопок в мониторе последовательного порта, заменяем  в подпрограмме keypressed

можно подключать почти любые пульты

надеюсь что поможет кому-то сэкономить нервы и время

 

покупной пульт

Black__Admin
Offline
Зарегистрирован: 25.04.2020

exit status 1
expected unqualified-id before '{' token

в строке

019   void  keypressed(); {

//Как победить?

sadman41
Offline
Зарегистрирован: 19.10.2016

Убрать лишний символ.

Black__Admin
Offline
Зарегистрирован: 25.04.2020

Который?

sadman41
Offline
Зарегистрирован: 19.10.2016

Попробуйте методом тыка, если не понимаете, как функция пишется. Раза с третьего должно получиться.

Black__Admin
Offline
Зарегистрирован: 25.04.2020

При любом изменении разные ошибки получаются

nik182
Offline
Зарегистрирован: 04.05.2015

before '{'  - точное указание места лишнего символа. Если его удаление даёт другую ошибку, то её надо хотя бы знать, что бы что то советовать. 

Black__Admin
Offline
Зарегистрирован: 25.04.2020

Благодарю за советы, в 19 строке точка с запятой лишняя.

skoctehs
Offline
Зарегистрирован: 27.02.2016

/*
ИК датчик подключен на D2, т.к. на него прерывание 0 
*/
byte n = 0;
word keycode = 0;
unsigned long tm = 0;
unsigned long last;
char ch = ' ';

void setup()
{
  pinMode(2, INPUT); // ir recv

  Serial.begin(115000);
  attachInterrupt(0, irread, FALLING);
}


void keypressed()
{
  n = 0;

    switch (keycode)
    {
      case 0x1FE:
        ch = '1';
        break;
      case 0xFE:
        ch = '2';
        break;
      case 0x817E:
        ch = '3';
        break;
      case 0x41BE:
        ch = '4';
        break;
      case 0x40BE:
        ch = '5';
        break;
      case 0xC13E:
        ch = '6';
        break;
      case 0x21DE:
        ch = '7';
        break;
      case 0x20DE:
        ch = '8';
        break;
      case 0xA15E:
        ch = '9';
        break;
      case 0x609E:
        ch = '0';
        break;
      case 0x619E:
        ch = '*';
        break;
      case 0xE11E:
        ch = '#';
        break;
      case 0x51AE:
        ch = 'L';
        break;
      case 0x10EE:
        ch = 'U';
        break;
      case 0xD12E:
        ch = 'R';
        break;
      case 0x30CE:
        ch = 'D';
        break;
      case 0x50AE:
        ch = 'M';
        break;
      default:
      ch=' ';
       // Serial.println(keycode,HEX);
    }
    
 // Serial.print(ch);  
}

void loop()
{
  if (n == 32)
  {
    keypressed();
// в переменной ch нажатая кнопка
  }
}

void irread()
{
  tm = micros() - last;
  last = micros();
  n += 1;
  if (tm > 3000) {
    keycode = 0;
    n = 0;
  }
  if (n > 8) {
    if (tm > 1500) keycode += 1;
    keycode = keycode << 1;
  }
}

 

skoctehs
Offline
Зарегистрирован: 27.02.2016

Black__Admin пишет:

Благодарю за советы, в 19 строке точка с запятой лишняя.

виноват.

как в верхнем сообщении изменить не нашел

скопировал с изменениями