Неожиданная сложность при IR передаче

pridecom
Offline
Зарегистрирован: 07.07.2017

Приветствую!

Столкнулся с чем-то для меня непонятным, скорее всего другой формат сигнала.

Не работает код для одного устройства, подскажите что не так.

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() {
  
  }

 

b707
Offline
Зарегистрирован: 26.05.2017

Как помочь-то? Если с оригинального пульта читается каждый раз разная последовательность. то варианта два. Либо читается с ошибками, либо в протоколе используется динамический код. В обоих случаях шанс на то, что этим кодом удастся что-то включить - близки к нулю.

pridecom
Offline
Зарегистрирован: 07.07.2017

С пульта все четко и лаконично, как никогда.

Но вот при отправке этого кода, он не принимается, может битность надо регулировать или еще что-то....

Может надо несколько раз посылать одну и туже команду....

sadman41
Offline
Зарегистрирован: 19.10.2016

"Какое-то устройство, какой-то пульт, что-то шлю, а оно не работает. Помогите." 

Чем помочь-то - на дом выехать с бутылкой водки?

pridecom
Offline
Зарегистрирован: 07.07.2017

irsend.sendNEC(0xA55A50AF, 32);

что такое 32 в этой команде, где найти описание?

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Размер пакета - 32 бита.

Описание протокола тут - https://techdocs.altium.com/display/FPGA/NEC+Infrared+Transmission+Protocol

Описание команды - в файлах библиотеки, полагаю.

b707
Offline
Зарегистрирован: 26.05.2017

pridecom пишет:

что такое 32 в этой команде, где найти описание?

исходный код библиотеки не пробовали открыть?

pridecom
Offline
Зарегистрирован: 07.07.2017

Какой командой можно еще попробовать отправить сигнал, подскажите, не получается найти примеры...