ИК приёмник - очень удобное устройство для дистанционного ввода данных в программу при помощи ИК пульта. Также может использоваться для передачи данных между устройствами по ИК каналу связи.
В наборе GyverKIT | START | IOT | EXTRA | |
---|---|---|---|---|
![]() |
ИК пульт | ✔ | ||
![]() |
ИК приёмник | ✔ | ||
![]() |
ИК передатчик | ✔ |
В наборе GyverKIT идёт комплект из пульта, приёмника и ИК светодиода. С его помощью можно:
- Управлять своим устройством с пульта (комплектный пульт + приёмник)
- Управлять своим устройством с любого пульта (от телевизора/люстры + приёмник)
- Управлять телевизором, эмулируя его пульт (ИК светодиод)
- Передавать любые данные с одной Ардуины на другую (ИК светодиод + приёмник), например библиотека GyverWire
Подключение к Arduino #
Модуль ИК приёмника подключается следующим образом:
- S: сигнальный пин, любой цифровой пин МК
- - (минус): GND
- Средний (не подписан): VCC
Библиотеки #
Для работы с приёмником есть несколько библиотек:
- IRremote – сложная универсальная библиотека
- IRLremote – более оптимизированная и продвинутая библиотека от NicoHood
- NecDecoder – наша библиотека для интерфейса NEC на котором работают все китайские пульты
В примерах на этом сайте будем использовать NecDecoder, её можно установить/обновить из встроенного менеджера библиотек Arduino по названию NecDecoder. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
NecDecoder #
Чтобы приёмник работал, нужно подключить его к пину с внешним прерыванием, завести обработчик на прерывание FALLING
и вызывать в нём метод библиотеки tick()
. Мы подключили приёмник на пин 2, это прерывание 0
. Библиотека "просигналит" в метод available()
, когда примет данные. Примеры:
Чтение кодов пульта
// приём команд с пульта
// приёмник подключать на прерывание по FALLING
#include <NecDecoder.h>
NecDecoder ir;
void setup() {
Serial.begin(115200);
// подключил на D2, прерывание 0
attachInterrupt(0, irIsr, FALLING);
}
// в прерывании вызываем tick()
void irIsr() {
ir.tick();
}
void loop() {
// если пакет успешно принят
if (ir.available()) {
// вывести команду (8 бит)
Serial.print("0x");
Serial.println(ir.readCommand(), HEX);
}
}
Коды кнопок пульта из набора
#define IR_1 0xA2
#define IR_2 0x62
#define IR_3 0xE2
#define IR_4 0x22
#define IR_5 0x2
#define IR_6 0xC2
#define IR_7 0xE0
#define IR_8 0xA8
#define IR_9 0x90
#define IR_STAR 0x68
#define IR_0 0x98
#define IR_HASH 0xB0
#define IR_UP 0x18
#define IR_LEFT 0x10
#define IR_OK 0x38
#define IR_RIGHT 0x5A
#define IR_DOWN 0x4A
Парсим нажатия
// приёмник на D2
#define IR_1 0xA2
#define IR_2 0x62
#define IR_3 0xE2
#define IR_4 0x22
#define IR_5 0x2
#define IR_6 0xC2
#define IR_7 0xE0
#define IR_8 0xA8
#define IR_9 0x90
#define IR_STAR 0x68
#define IR_0 0x98
#define IR_HASH 0xB0
#define IR_UP 0x18
#define IR_LEFT 0x10
#define IR_OK 0x38
#define IR_RIGHT 0x5A
#define IR_DOWN 0x4A
#include <NecDecoder.h>
NecDecoder ir;
void setup() {
Serial.begin(115200);
attachInterrupt(0, irIsr, FALLING);
}
void irIsr() {
ir.tick();
}
void loop() {
if (ir.available()) {
switch (ir.readCommand()) {
// выводим в порт, тут может быть ваш код
case IR_1: Serial.println("Pressed 1"); break;
case IR_2: Serial.println("Pressed 2"); break;
case IR_3: Serial.println("Pressed 3"); break;
case IR_4: Serial.println("Pressed 4"); break;
case IR_5: Serial.println("Pressed 5"); break;
case IR_6: Serial.println("Pressed 6"); break;
case IR_7: Serial.println("Pressed 7"); break;
case IR_8: Serial.println("Pressed 8"); break;
case IR_9: Serial.println("Pressed 9"); break;
case IR_STAR: Serial.println("Pressed *"); break;
case IR_0: Serial.println("Pressed 0"); break;
case IR_HASH: Serial.println("Pressed #"); break;
case IR_UP: Serial.println("Pressed up"); break;
case IR_LEFT: Serial.println("Pressed left"); break;
case IR_OK: Serial.println("Pressed ok"); break;
case IR_RIGHT: Serial.println("Pressed right"); break;
case IR_DOWN: Serial.println("Pressed down"); break;
}
}
}
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])
- Поддержать автора за работу над уроками