Нужна помощь с функцией отправки Arduino IR Remote

Я работаю над проектом, который предполагает захват ИК-кода дистанционного управления и отправку его обратно с помощью Arduino. Я использую библиотеку IRremote и успешно реализовал функцию приема. Однако у меня возникли проблемы с работой функции отправки.

Я проверил, что ИК-сигнал отправляется с помощью операторов отладки и путем просмотра ИК-светодиода через камеру. Однако устройство, которым я пытаюсь управлять, не отвечает, когда я отправляю ИК-код, полученный с его пульта дистанционного управления. Сам пульт корректно работает с устройством, поэтому я знаю, что полученный код пульта правильный.

Вот полный код, соответствующий функции отправки скетча:

#include <IRremote.hpp>

#define IR_RECEIVE_PIN 2
#define IR_SEND_PIN 3
#define ENABLE_LED_FEEDBACK true
#define STATUS_LED 13

IRsend irsend(IR_SEND_PIN);
decode_type_t protocol = UNKNOWN;
uint16_t address = 0;
uint8_t inputCommand = 0;
uint32_t rawData = 0; 
uint16_t bitCount = 0;
bool readIRFlag = false;
bool sendPowerOnFlag = false;
unsigned long sMillisOfFirstReceive;
bool sLongPressJustDetected;

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK, STATUS_LED);
  pinMode(STATUS_LED, OUTPUT);
  digitalWrite(STATUS_LED, LOW);
}

void loop() {

  if (Serial.available()) {
    String command = Serial.readStringUntil('\n');
    if (command == "read ir") {
      readIRFlag = true;
    } else if (command == "stop") {
      readIRFlag = false;
      sendPowerOnFlag = false;
    } else if (command == "send ir") {
      // Отправляем последний полученный IR-код
      if (protocol != UNKNOWN) {
        switch (protocol) {
          case NEC:
            Serial.print("Sending NEC signal with rawData: ");
            Serial.print(rawData, HEX);
            Serial.print(", bitCount: ");
            Serial.println(bitCount);
            irsend.sendNEC(rawData, bitCount);

            delay(5000);
            Serial.print("Sending NEC signal with command: ");
            Serial.print(inputCommand, HEX);
            Serial.print(", address: ");
            Serial.println(address, HEX);
            irsend.sendNEC(inputCommand, address, 3);
            break;
          case SONY:
            irsend.sendSony(rawData, bitCount);
            break;
          // Добавьте сюда больше случаев для других протоколов
        }
        Serial.println("Sent last received IR code");
      } else {
        Serial.println("No IR code received yet");
      }
    } else if (command == "send power on") {
      sendPowerOnFlag = true;
    }
  }

  if (sendPowerOnFlag) {
     Serial.print("Sending NEC signal with command: ");
            Serial.print(inputCommand, HEX);
            Serial.print(", address: ");
            Serial.println(address, HEX);
            irsend.sendNEC(inputCommand, address, 3);
  }
}

Этот код использует библиотеку IRremote для захвата и отправки ИК-сигналов с помощью Arduino. Объект IRsend создается с константой IR_SEND_PIN в качестве аргумента, который определяет номер контакта, к которому подключен ИК-светодиод. Функция цикла() проверяет наличие последовательных команд и выполняет различные действия в зависимости от полученной команды. Если получена команда send ir, скетч отправит последний полученный IR-код с помощью функции irsend.sendNEC().

Для создания моего проекта я использовал схему, подробно описанную в этом руководстве: https://www.digikey.ca/en/maker/blogs/2021/how-to-send-and-receive-data-over-ir-signals -с-ардуино.

Я буду признателен за любые советы и предложения по диагностике и устранению этой проблемы. Заранее спасибо за вашу помощь!

, 👍0


1 ответ


0

адрес и команда в sendNEC указаны задом наперед. Мне потребовалось много времени, чтобы это заметить

,

Можете ли вы уточнить? Что именно вы изменили, чтобы все заработало?, @Nick Gammon