Вопрос о библиотеке IRremote.h

Jacks_d
Offline
Зарегистрирован: 31.12.2011

Суть вопроса:

Является ли нормальным поведение когда при нажатии кнопки первой декодированное посылкой является код кнопки, а потом при длительном нажатии идут декодированные данные вида "FFFFFFFF"

или в сиреал мониторе:

 

40BF906F
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
 
можно ли с помощью этой либы получать при длительном нажатии коды кнопок а не FFFFFFFF, или городить велосипеды для длительного нажатия?
kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Если не ошибаюсь, это нормально для протокола от NEC. Почитайте на sbprojects, там описаны протоколы.
UPD, я не ошибся, здесь, http://www.sbprojects.com/knowledge/ir/nec.php

maksim
Offline
Зарегистрирован: 12.02.2012

Это особенность пульта и нужно не велосипед городить, а написать обработку длительного нажатия.

Jacks_d
Offline
Зарегистрирован: 31.12.2011

Посмотрел, таки как NEC определяется... эххх... а как было бы проще...

maksim, я так понимаю сохраняем данные если они не FFFFFFFF и смотрим прийдут ли FFFFFFFF в промежутке времени далее, померял дуиной получилось 107 мс, это с условием что приемник весит на одной дуине и шлет данные на другую...

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Сохраните последний код и выдавайте себе этот код, если получили код повтора

Jacks_d
Offline
Зарегистрирован: 31.12.2011

Отвечу на свой вопрос:

#include <IRremote.h>
long DU;
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()  
{
Serial.begin(57600);  
irrecv.enableIRIn();
void loop() 
{
 if(irrecv.decode(&results)) 
   {
    if(results.value != 4294967295)
      {DU=results.value;Serial.println(DU, HEX);}
    if(results.value == 4294967295)
      {Serial.println(DU, HEX);}
    dump(&results);
    irrecv.resume();
  }

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Вместо 16 строки обычно пишут
else

step962
Offline
Зарегистрирован: 23.05.2011

а вместо 4294967295 обычно пишут

0xFFFFFFFF

Jacks_d
Offline
Зарегистрирован: 31.12.2011

Обычно пишут, но библиотека выдает коды в десяттичном виде а при отправке переводит в шеснадцатиричную систему Serial.println(results.value, HEX); , смысла особого небыло отдельно переводить в НЕХ и сравнивать, а потом отправлять, так в принцепе даже действий меньше происходит, про else согласен частенько забываю)

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

В библиотеке есть предопределенная константа REPEAT, нужно её и использовать, чтобы было понятно что это. Да и код более читабельным будет.
Библиотека не выдает ничего в десятичном или в шестнадцатеричном виде, в переменных всё хранится в двоичном виде. Другое дело, что для отображения мы преобразуем это значение в удобное для человека виде.
Все советы - условность, можете писать как Вам удобно.

kazakoff
Offline
Зарегистрирован: 07.06.2013

А можно рабочий скетч?