Протокол IR Sony 15bit

Тема в разделе "Проводная и беспроводная связь", создана пользователем zadovvaso, 1 июн 2017.

  1. zadovvaso

    zadovvaso Нуб

    Доброго всем дня.
    Возможно, кому-нибудь пригодится.
    Решил скопировать посылки пульта для магнитолы Sony. Используя библиотеку IRremote получил коды кнопок и узнал протокол (Sony 15bit), но при отправке магнитола отказывалась их принимать. Посмотрел осциллографом посылки пульта - оказывается, он отправляет пакет из 5 посылок, с паузой между ними, равной длине одной посылки. Таким образом, код для отправки приобретает следующий вид
    Код (C++):

    #include <IRremote.h>

    IRsend irsend;

    void setup()
    {

    }

    void loop() {
        for (int i = 0; i < 5; i++) {
          irsend.sendSony(0x2421, 15); // где 2421 - код кнопки
          delay(23);
        }
        delay(1000);
    }

    PS - подробной информации по данному протоколу в сети не нашел.
     
  2. zadovvaso

    zadovvaso Нуб

    Еще возник вопрос, который пока не могу решить - каким образом можно вводить коды из serial-соединения?
    К примеру, вводим 3B21(уменьшение громкости) и получаем этот-же код для отправки.
    Буду признателен за любую помощь.
    Спасибо.
     
  3. zadovvaso

    zadovvaso Нуб

    Считываем в массив
    Код (C++):
    char incomingBytes[5];

    void setup() {

      Serial.begin(9600);
    }

    void loop()
    {
       if (Serial.available() > 0)
       {
          Serial.readBytes(incomingBytes, 4);
          Serial.println(incomingBytes);
       }
    }
    Теперь загвоздка в том, как передать массив в irsend.sendSony?
     
  4. zadovvaso

    zadovvaso Нуб

    Добился желаемого результата так
    Код (C++):
    #include <IRremote.h>

    IRsend irsend;
    char incomingBytes[5];
    unsigned long t;

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

    void loop() {
      if (Serial.available() > 0)
       {
          Serial.readBytes(incomingBytes, 4);
          Serial.println(incomingBytes);
     
      sscanf(incomingBytes, "%x", &t);
       Serial.println(t);

        for (int i = 0; i < 5; i++) {
            irsend.sendSony(t, 15);
            delay(23);
        }
       }
    }