Неожиданная сложность при IR передаче
- Войдите на сайт для отправки комментариев
Пнд, 17/05/2021 - 11:24
Приветствую!
Столкнулся с чем-то для меня непонятным, скорее всего другой формат сигнала.
Не работает код для одного устройства, подскажите что не так.
1. Работает. Считал коды пульта через приемник:
#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); }
Результаты, примерно такие
A55A50AF
A55A59A
Вроде все как всегда, только какие-то некоторые короткие, ну да ладно, прописываю их в скеч отправки данных, а оно не переключает устройство. Видимо не NEC формат, как надо, помогите...
#include <IRremote.h> IRsend irsend; int rab = 1 ; int pinD0 = 2; int TelBase; int ButtonRegim = 0 ; void setup() { pinMode (4, INPUT_PULLUP); //КНОПКА pinMode(13, OUTPUT); //СВЕТОДИОД pinMode (pinD0, INPUT); //фотомодуль pinMode (7, OUTPUT); //ДопДиод //Передатчик надо на ногу 3 повесить и земля (короткая нога светодиода) Serial.begin(9600); delay(10000); irsend.sendNEC(0xE917A076, 32); //вкл digitalWrite(13, HIGH); delay(3000); digitalWrite(13, LOW); irsend.sendNEC(0xCC7372A6, 32); //меняем источник digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); irsend.sendNEC(0xA55A50AF, 32); //добавляем громкость digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); irsend.sendNEC(0xA55A50AF, 32); //добавляем громкость digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); irsend.sendNEC(0xA55A50AF, 32); //добавляем громкость digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); irsend.sendNEC(0xA55A50AF, 32); //добавляем громкость digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); irsend.sendNEC(0xA55AD02F, 32); //убираем низы digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); irsend.sendNEC(0xA55AD02F, 32); //убираем низы digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); irsend.sendNEC(0xA55AD02F, 32); //убираем низы digitalWrite(13, HIGH); } void loop() { }
Как помочь-то? Если с оригинального пульта читается каждый раз разная последовательность. то варианта два. Либо читается с ошибками, либо в протоколе используется динамический код. В обоих случаях шанс на то, что этим кодом удастся что-то включить - близки к нулю.
С пульта все четко и лаконично, как никогда.
Но вот при отправке этого кода, он не принимается, может битность надо регулировать или еще что-то....
Может надо несколько раз посылать одну и туже команду....
"Какое-то устройство, какой-то пульт, что-то шлю, а оно не работает. Помогите."
Чем помочь-то - на дом выехать с бутылкой водки?
irsend.sendNEC(0xA55A50AF, 32);
что такое 32 в этой команде, где найти описание?
Размер пакета - 32 бита.
Описание протокола тут - https://techdocs.altium.com/display/FPGA/NEC+Infrared+Transmission+Protocol
Описание команды - в файлах библиотеки, полагаю.
что такое 32 в этой команде, где найти описание?
исходный код библиотеки не пробовали открыть?
Какой командой можно еще попробовать отправить сигнал, подскажите, не получается найти примеры...