IR (инфракрасный сигнал): Читаем данные с пульта и передаём их

Через Arduino Nano и пульт Saundmax от ТВ тюнера.

Библиотеку использовал IRremote 2.8.0 – скачать можно здесь – скачать IRremote 2.8.0
Arduino IDE 2.3.6

Код скретча для чтения кода кнопки “Меню”, схема подключения:

Распиновка на моём Инфракрасном приёмнике 1838:

#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results; 

void setup() {
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Enabling IRin");
  irrecv.enableIRIn(); // Start the receiver
  Serial.println("Enabled IRin"); } 
  
  void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100); 
}

Код скретча для отправки кода кнопки “Меню”:

Для вывода сигнала ИК‑светодиод подключается через токоограничивающий резистор к третьему пину (D3, PWM). Важно не перепутать полярность: длинная ножка светодиода — это анод. В тестовой сборке с ИК‑диодом и резистором на 100 Ом дальность передачи составила около 4,5 метров. Если этого мало и нужно «пробивать» дальше, придется усилить сигнал, добавив выходной каскад с транзистором.

#include <IRremote.h>
IRsend irsend;

void setup()
{
 Serial.begin(9600);
}

void loop() 
{
   //for (int i = 0; i < 1; i++) { 
     irsend.sendNEC(0xFFA25D, 32); // Отправка кода NEC (32 бита)
     delay(5000);
   //}
}

Примечание:

Зажигаем и выключаем светодиод на пине 13

#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results; 

void setup() {
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Enabling IRin");
  irrecv.enableIRIn(); // Start the receiver
  Serial.println("Enabled IRin"); } 
  
  void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    switch ( results.value ) {
    case 0xFF58A7:
        digitalWrite( 13, HIGH );
        break;
    case 0xFFA25D:
        digitalWrite( 13, LOW );
        break;
    }    
    irrecv.resume(); // Receive the next value
  }
  delay(100); 
}

Также можно использовать другие библиотеки:
Для работы с приёмником есть несколько библиотек:

IRremote – сложная универсальная библиотека
IRLremote – более оптимизированная и продвинутая библиотека от NicoHood
NecDecoder – моя очень лёгкая библиотека для NEC пультов (пульт из набора и 99% пультов от бытовой техники и освещения)

Код для библиотеки NecDecoder и схема соединения:

// приём команд с пульта
// приёмник подключать на прерывание по FALLING

#include <NecDecoder.h>
NecDecoder ir;

// в прерывании вызываем tick()
void irIsr() {
    ir.tick();
}

void setup() {
    Serial.begin(115200);
    // подключил на D2, прерывание 0
    attachInterrupt(0, irIsr, FALLING);
}

void loop() {
    // если пакет успешно принят
    if (ir.available()) {
        Serial.print("0x");

        // адрес + команда (16 бит)
        Serial.println(ir.readData(), HEX);

        // команда (8 бит)
        // Serial.println(ir.readCommand(), HEX);
         Serial.print("paket");
        // весь пакет (32 бита)
        Serial.println(ir.readPacket(), HEX);
    }
}

——————————————————————————–

Примечание:

———————————————-

В пересылке сигнала между пультом и приёмником используется коды вроде FF58A7, например, это видно в Ардуино – “микроник.рус/8046/” (IR (инфракрасный сигнал): Читаем данные с пульта и передаём их)

кнопка ок – FF58A7
кнопка ок – 00FF58A7

В шестнадцатеричной системе используются символы от 0 до 9 и буквы от A до F (или a до f) для обозначения значений от 0 до 15. Например:

0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
6 = 0110
7 = 0111
8 = 1000
9 = 1001
A = 1010
B = 1011
C = 1100
D = 1101
E = 1110
F = 1111

Каждый символ соответствует четырём битам (полубайту или нибблу). Например, 0 = 0000, 1 = 0001, A = 1010.

Давайте попробуем расшифровать

кнопка ок – FF58A7
кнопка ок – 00FF58A7

0000 0000 1111 1111 0101 1000 1010 0111

1111 1111 0101 1000 1010 0111

0 0 F F 5 8 A 7

00000000111111110101100010100111

—————————————————————–

И ещё один код с другого пульта

кнопка ок – 4FB52AD
кнопка ок – 04 FB 52AD

0000 0100 1111 1011 0101 0010 1010 1101

Также с помощью python можно преобразовать 16-ую систему в 2-ую:

a = "FF58A7"
binary_value = format(int(a, 16), 'b')  # '110100011'
print(binary_value)

111111110101100010100111

————————————-

Примечание 2:

Запись сигналов IR-пульта на звуковую карту – “микроник.рус/7989/”

Добавить комментарий