скетч для покупного ик пульта
- Войдите на сайт для отправки комментариев
Сб, 27/02/2016 - 09:00
/*
ИК датчик подключен на 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;
}
}
не использую IRREMOTE.H = китайский пульт понимает через раз, хотя тайминги сигнала снимает четко
опять же много места занимало
реакцию на кнопки пишем в подпрограмме keypressed
цифры * # = и так ясно :)
L U R D M = кнопки лево верх право низ ОК
если пульт другой, убираем комментарии перед print и смотрим коды кнопок в мониторе последовательного порта, заменяем в подпрограмме keypressed
можно подключать почти любые пульты
надеюсь что поможет кому-то сэкономить нервы и время
exit status 1
expected unqualified-id before '{' token
в строке
019 void keypressed(); {
//Как победить?
Убрать лишний символ.
Который?
Попробуйте методом тыка, если не понимаете, как функция пишется. Раза с третьего должно получиться.
При любом изменении разные ошибки получаются
before '{' - точное указание места лишнего символа. Если его удаление даёт другую ошибку, то её надо хотя бы знать, что бы что то советовать.
Благодарю за советы, в 19 строке точка с запятой лишняя.
/* ИК датчик подключен на 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; } }Благодарю за советы, в 19 строке точка с запятой лишняя.
виноват.
как в верхнем сообщении изменить не нашел
скопировал с изменениями