Управление через ИК (irremote.h)

Yurka05
Offline
Зарегистрирован: 02.10.2011

 добрый день. Хочу доработать библиотеку, чтобы читались и другие пульты вместе с теми, которые прописаны.

// pulse parameters in usec
#define NEC_HDR_MARK 9000
#define NEC_HDR_SPACE 4500
#define NEC_BIT_MARK 560
#define NEC_ONE_SPACE 1600
#define NEC_ZERO_SPACE 560
#define NEC_RPT_SPACE 2250

#define SONY_HDR_MARK 2400
#define SONY_HDR_SPACE 600
#define SONY_ONE_MARK 1200
#define SONY_ZERO_MARK 600
#define SONY_RPT_LENGTH 45000

#define RC5_T1 889
#define RC5_RPT_LENGTH 46000

#define RC6_HDR_MARK 2666
#define RC6_HDR_SPACE 889
#define RC6_T1 444
#define RC6_RPT_LENGTH 46000

Как можно считать эти параметры с пульта? Может есть прога для ардуино?

Спасибо.

leshak
Offline
Зарегистрирован: 29.09.2011

 ну "программы" которая даст вам эти параметры "и будет счастье" - точно нет и не будет. Просто потому, что это "параметры протокола" и для поддержки других пультов нужно еще сам протокол реализовать. У него может отличатся не только "параметры", но и сама логика (хотя вообщем-то они все "близки друг-другу").

Вообщем-то задача (поддержать неизвестный пульт) - решаемая. Вначале вам нужно узнать по какому протоколу работает этот пульт, попытаться нагуглить описание протокола, собственно там и будут искомые вами параметры.

Если "протокол неизвестен" или описание найти не удается, то прийдется смотреть какие импульсы шлет пульт и пытаться догадаться "что какой означает".

"Смотреть можно" несколькими способами:

  1. Искать ваши "параметры" на http://lirc.sourceforge.net/remotes/ для многих пультов их уже "кто-то записывал" (лично я свой пульт там нашел, но "параметры не подошли"). 
  2. Написать свой скетч, который будет смотреть на изменения пина к которому подключен IR и репортить в ком-порт временные интервалы.
  3. Взять скетч который идет в примерах этой библиотеки IRrecvDump.pde. Он, даже если не удалось декодировать сигнал, дампит к ком порт, длительность захваченных импульсов.
  4. "Захватить" импульсы и смотреть их длительность с помощью программы lirc (winlirc - виндовый аналог).

Возможно что "декодирование" вам будет и не нужно. Можно просто записать нажать кнопку на пульте, записать какие импульсы приходили и в дальнейшем просто сравнивать с образцом не вдаваясь в детали "какой импульс что означает". При сравнении, естественно нужно "давать допуск" сколько-то процентов. Пульт не шлет ипульсы "абсолютно точно", длительно может немного "плавать".

Так же нужно учитывать, что некоторые пульты по разному шлют "повторное нажатие кнопки" и "удерживание". Кто-то просто "повторяет код кнопки", кто-то первой посылкой шлет код кнопки, а потом специальный "код повторения", кто-то для каждой кнопки имеет два кода (отличающиеся на один бит) и шет их "по очереди".

Если пульт который вы хотите поддержать - Thomson, то возможно все еще проще. Когда-то я допиливал эту библиотеку под него. Могу покопаться в архивах.

 

ustas
Offline
Зарегистрирован: 12.03.2012

 leshak, помоги вот с этим: http://arduino.ru/forum/apparatnye-voprosy/problema-s-ik

leshak
Offline
Зарегистрирован: 29.09.2011

 Ответил там, но вообщем-то, по большому счету. Подход "выяснить почему не работает", и "реализовать новый протокол" - очень близки. Нужно выяснить "что шлет пульт", понять почему.

Так что фактически мой ответ из этой ветки подходит для той.

artem
Offline
Зарегистрирован: 06.06.2012

leshak, а по какому принципу на том сайте искать свой пульт. И каким образом потом использовать данные из этого файла? Если можно на примере... желательно RAW какойнить тоже рассмотреть. Хочеться деталььней понять как обучить свой скетч новому пульту...

спасибо