Неожиданная сложность при 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 в этой команде, где найти описание?
исходный код библиотеки не пробовали открыть?
Какой командой можно еще попробовать отправить сигнал, подскажите, не получается найти примеры...