Нужна помощь с функцией отправки 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 -с-ардуино.
Я буду признателен за любые советы и предложения по диагностике и устранению этой проблемы. Заранее спасибо за вашу помощь!
@GameStation, 👍0
1 ответ
адрес и команда в sendNEC указаны задом наперед. Мне потребовалось много времени, чтобы это заметить
- Использование VS1838B с Arduino
- Управление регулятором вентилятора от Arduino
- Tone() конфликтует с библиотекой IRremote (множественное определение `__vector_7')
- Как остановить вращение сервопривода?
- Arduino IRremote перестает работать
- Управление усилителем с помощью разъема дистанционного управления
- Использование ИК-пульта с Arduino
- ИК приемник принимает только 0
Можете ли вы уточнить? Что именно вы изменили, чтобы все заработало?, @Nick Gammon