Библиотека позволяет работать с ИК-приёмником и(или) ИК-передатчиком.
Для работы с ИК-приёмником, нужно создать объект класса iarduino_IR_RX.
Для работы с ИК-передатчиком, нужно создать объект класса iarduino_IR_TX.
Для работы с ИК-приёмником и ИК-передатчиком, нужно создать оба объекта.
Библиотека использует второй аппаратный таймер, как для раскодирования данных с ИК-приёмника «в фоновом режиме», так и для формирования несущей частоты ИК-передатчика. Не выводите сигнал ШИМ на 3 или 11 вывод, это помешает корректной работе библиотеки.
Управление ИК-приёмником:
Код: Выделить всё
#include <iarduino_IR_RX.h> // Подключаем библиотеку.
iarduino_IR_RX ОБЪЕКТ ( №_ВЫВОДА [, ИНВЕРСИЯ ] ); // Объявляем объект.
begin(); // Функция инициализации работы с ИК-приёмником.
check( [ УДЕРЖАНИЕ ] ); // Функция проверки наличия принятых с пульта данных.
protocol( [ ПАРАМЕТР ] ); // Функция получения, установки или сброса протокола передачи данных.
data // Переменная возвращает код кнопки, принятый с пульта.
length // Переменная возвращает размер принятого кода, в битах.
key_press // Переменная возвращает флаг, указывающий на то, что кнопка нажимается а не удерживается.
Управление ИК-передатчиком:
Код: Выделить всё
#include <iarduino_IR_TX.h> // Подключаем библиотеку
iarduino_IR_TX ОБЪЕКТ ( №_ВЫВОДА [, ИНВЕРСИЯ ] ); // Объявляем объект.
begin(); // Функция инициализации работы с ИК-передатчиком.
send( ДАННЫЕ [, УДЕРЖАНИЕ ] ); // Функция передачи данных.
protocol( СТРОКА ); // Функция установки протокола передачи данных.
frequency // Переменная устанавливает несущую частоту передачи данных в кГц.
Скачать библиотеку:
Примеры:
Проверка наличия данных поступивших с ИК-пульта, осуществляется функцией check(). Эта функция реагирует на нажатие кнопок ИК-пульта, но если её вызывать с параметром true, то она будет реагировать и на удержание кнопок.
Чтение данных с любого пульта, реагируем только на нажатие кнопок. В данном скетче функция check() вызывается без аргументов, значит и реагирует она только на нажатия кнопок ИК-пульта.
Код: Выделить всё
#include <iarduino_IR_RX.h> // Подключаем библиотеку для работы с ИК-приёмником
iarduino_IR_RX IR(7); // Объявляем объект IR, с указанием вывода к которому подключён ИК-приёмник
void setup(){
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бит/сек
IR.begin(); // Инициируем работу с ИК-приёмником
}
void loop(){
if(IR.check()){ // Если в буфере имеются данные, принятые с пульта (была нажата кнопка)
Serial.println(IR.data, HEX); // Выводим код нажатой кнопки
Serial.println(IR.length ); // Выводим количество бит в коде
}
}
Чтение данных с любого пульта, реагируем на удержание кнопок. В данном скетче функция check() вызывается с параметром true, значит и реагирует она как на нажатия, так и на удержания кнопок ИК-пульта.
Код: Выделить всё
#include <iarduino_IR_RX.h> // Подключаем библиотеку для работы с ИК-приёмником
iarduino_IR_RX IR(7); // Объявляем объект IR, с указанием вывода к которому подключён ИК-приёмник
void setup(){
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бит/сек
IR.begin(); // Инициируем работу с ИК-приёмником
}
void loop(){
if(IR.check(true)){ // Если в буфере имеются данные, принятые с пульта (удерживается кнопка)
Serial.println(IR.data, HEX); // Выводим код нажатой кнопки
Serial.println(IR.length ); // Выводим количество бит в коде
}
}
Чтение данных с любого пульта, с указанием как реагировать на какие кнопки. В данном скетче функция check() вызывается с параметром true, значит она реагирует как на нажатия, так и на удержания кнопок ИК-пульта. Но вывод данных в монитор последовательного порта осуществляется только при установленном флаге flgKey, который сбрасывается при удержании кнопок с кодами 0xFF30CF, 0xFF18E7 и 0xFF7A85. Получается что на 3 кнопки скетч реагирует только при нажатии, а на остальные кнопки, как на нажатие, так и на удержание.
Код: Выделить всё
#include <iarduino_IR_RX.h> // Подключаем библиотеку для работы с ИК-приёмником
iarduino_IR_RX IR(7); // Объявляем объект IR, с указанием вывода к которому подключён ИК-приёмник
//
bool flgKey1 = false; uint32_t codKey1 = 0xFF30CF; // Определяем флаг нажатия и код кнопки 1
bool flgKey2 = false; uint32_t codKey2 = 0xFF18E7; // Определяем флаг нажатия и код кнопки 2
bool flgKey3 = false; uint32_t codKey3 = 0xFF7A85; // Определяем флаг нажатия и код кнопки 3
bool flgKey = false; uint32_t tmrKey = 0; // Определяем флаг разрещающий вывод данных в монитор и время последнего нажатия кнопки.
//
void setup(){ //
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бит/сек
IR.begin(); // Инициируем работу с ИК-приёмником
} //
//
void loop(){ //
if(IR.check(true)){ // Если в буфере имеются данные, принятые с пульта (удерживается кнопка), то ...
if(millis()-200 > tmrKey){ // Если с последней поступившей команды прошло более 200 мс, то
flgKey1=false; // Считаем что кнопка 1 не удерживается
flgKey2=false; // Считаем что кнопка 2 не удерживается
flgKey3=false; // Считаем что кнопка 3 не удерживается
} tmrKey = millis(); flgKey=true; // Сохраняем время последней реакции на пульт и азрешаем вывод данных
if(IR.data==codKey1){ if(flgKey1){flgKey=false;} flgKey1=true; }else{flgKey1=false;} // Запрещаем вывод данных кнопки 1 при её удержании
if(IR.data==codKey2){ if(flgKey2){flgKey=false;} flgKey2=true; }else{flgKey2=false;} // Запрещаем вывод данных кнопки 2 при её удержании
if(IR.data==codKey3){ if(flgKey3){flgKey=false;} flgKey3=true; }else{flgKey3=false;} // Запрещаем вывод данных кнопки 3 при её удержании
if(flgKey){ // Если вывод данных разрешен, то ...
Serial.println(IR.data, HEX); // Выводим код нажатой кнопки
Serial.println(IR.length ); // Выводим количество бит в коде
} //
} //
}
Чтение данных только с тех пультов, которые работают по указанному протоколу. В данном скетче, в коде setup(), указан протокол передачи данных, который редко совпадает у разных производителей ИК-пультов. Значит функция check() в коде loop() будет реагировать только на те ИК-пульты, которые поддерживают указанный протокол.
Код: Выделить всё
#include <iarduino_IR_RX.h> // Подключаем библиотеку для работы с ИК-приёмником
iarduino_IR_RX IR(5); // Объявляем объект IR, с указанием вывода к которому подключён ИК-приёмник
void setup(){
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бит/сек
IR.begin(); // Инициируем работу с ИК-приёмником
IR.protocol("Ae``QtWL@L`|LJ`G@@@@@BPBp"); // Указываем протокол передачи данных, на который следует реагировать
}
void loop(){
if(IR.check(true)){ // Если в буфере имеются данные, принятые с пульта (удерживается кнопка)
Serial.println(IR.data, HEX); // Выводим код нажатой кнопки
Serial.println(IR.length ); // Выводим количество бит в коде
}
}
Получение протокола передачи данных и типа кодировки. В данном примере описано как получить протокол передачи данных ИК-пультов.
Код: Выделить всё
#include <iarduino_IR_RX.h> // Подключаем библиотеку для работы с ИК-приёмником
iarduino_IR_RX IR(4); // Объявляем объект IR, с указанием вывода к которому подключён ИК-приёмник
void setup(){
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бит/сек
IR.begin(); // Инициируем работу с ИК-приёмником
}
void loop(){
if(IR.check()){ // Если в буфере имеются данные, принятые с пульта (была нажата кнопка)
Serial.println(IR.protocol()); // Выводим строку протокола передачи данных
}
}