Библиотека iarduino_IR_RX

Arduino
Автор темы, Сержант
Сержант
Аватара
Arduino
Автор темы, Сержант
Сержант
Сообщения: 64
Зарегистрирован: 19 апреля 2017
С нами: 6 лет 11 месяцев

#1 Arduino » 8 июля 2019, 17:07

Описание библиотеки:
Библиотека позволяет работать с ИК-приёмником и(или) ИК-передатчиком.
Для работы с ИК-приёмником, нужно создать объект класса 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 // Переменная устанавливает несущую частоту передачи данных в кГц.            


Скачать библиотеку:
iarduino_IR-master.zip
Библиотека iarduino_IR_RX
(328.5 КБ) 449 скачиваний


Примеры:
Проверка наличия данных поступивших с ИК-пульта, осуществляется функцией 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());               // Выводим строку протокола передачи данных
  }
}


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Программирование»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 5 гостей
Боты: Yandex [Bot]