IRremote декодировать сигнал из EEPROM

Denis_Din
Offline
Зарегистрирован: 24.12.2019
Всем привет!
 
Использую библиотеку для ИК ESP8226irremote. 
 
Через IRrecive получаю и декодирую ИК сигнал, который в HEX пишется в EEPROM.
 
Кроме всего прочего необходимо выводить на OLED инфу в виде декодированного протокола и команды сигнала.
 
С этим легко справляется функция  dump(decode_results *results).
 
Код:
void dump(decode_results *results) {

  if (results->decode_type == UNKNOWN) {
    Serial.print("Unknown encoding: ");
  } else if (results->decode_type == NEC) {
    Serial.print("Decoded NEC: ");}

  serialPrintUint64(results->value, 16);
  Serial.print(results->bits, DEC);
}

loop () {

if (irrecv.decode(&results)) {
    dump(&results);
    irrecv.resume();  
}
Но она читает сигнал для декодирования с ИК приемника.
 
Мне же, для отображения, необходимо декодировать ранее записанный сигнал из EEPROM.
 
И вот что то ни как не могу понять, как этой функции dump(decode_results *results) скормить считанные данные из EEPROM.get(1,value) ??
 
 
5N62V
Offline
Зарегистрирован: 25.02.2016

Да Вам по ходу эта функция и не нужна, если сохраненные данные точно соответствуют формату. Вам value надо в функцию serialPrintUint64 скармливать.

А если надо обязательно в dump, то надо смотреть как Вы сохраняли данные в ЕЕПРОМ, и видеть что такое тип decode_results.

Но скорее всего так должно работать:

тип данных data = 0;// такой же как у value, который Вы сохраняли

EEPROM.get(1, data);

serialPrintUint64(data,16);

 

Denis_Din
Offline
Зарегистрирован: 24.12.2019

..."надо понимать что вы делаете"...

Да все просто вот полный код:

#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>

uint16_t RECV_PIN = 13;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup() {
  Serial.begin(115200);
  irrecv.enableIRIn();  
}
  ///ЗАПИСЬ КОДА ОТ КНОПКИ ИК ПУЛЬТА
  void IKwrite () {

   if (click_OK==0)
      {IK_write=1;Serial.println("Готов к записи");}
   
   if (IK_write==1
      {if(irrecv.decode(&irdecr)) {
         int32_t last_value=irdecr.value;
         Serial.printf("Полученный ИК код:%x\n",last_value);
         Serial.print("Сохранение в EEPROM...");
         EEPROM.put(1,last_value);
         EEPROM.commit();
         irrecv.resume();
         Serial.println("Сохранено!");
         Serial.printf("Значение:%x\n",last_value);
         IK_write=0;}}
  }
//ДЕКОДИРОВАНИЕ ПРОТОКОЛА ПУЛЬТА И ВЫВОД ДАННЫХ НАДИСПЛЕЙ НА 6-й СТРАНИЦЕ Page6_IKwrite
  void dump(decode_results *results) {
   if (results->decode_type == UNKNOWN) {
     IK_decode="Unknown";
   } else if (results->decode_type == NEC) {
    IK_decode="NEC";
   } else if (results->decode_type == SONY) {
    IK_decode="SONY";
   } else if (results->decode_type == RC5) {
    IK_decode="RC5";
   } else if (results->decode_type == RC5X) {
    IK_decode="RC5X";
   } else if (results->decode_type == RC6) {
    IK_decode="RC6";
   } else if (results->decode_type == RCMM) {
    IK_decode="RCMM";
   } else if (results->decode_type == PANASONIC) {
    IK_decode="PANASONIC";
   } else if (results->decode_type == LG) {
    IK_decode="LG";
   } else if (results->decode_type == JVC) {
    IK_decode="JVC";
   } else if (results->decode_type == AIWA_RC_T501) {
    IK_decode="AIWA";
   } else if (results->decode_type == WHYNTER) {
    IK_decode="Whynter";
   } else if (results->decode_type == NIKAI) {
    IK_decode="Nikai";
   }
   Serial.printf("IK_decode:%s\n",IK_decode);
   IK_code=results->value;
   Serial.printf("IK_code:%X\n", IK_code);

}

void loop() { IKwrite (); if (irrecv.decode(&results)) {
dump(&results);
Serial.println("DEPRECATED: Please use IRrecvDumpV2.ino instead!");
irrecv.resume(); // Receive the next value
}
}

 

5N62V
Offline
Зарегистрирован: 25.02.2016

у Вас код ф-ции dump то один, то другой. Я не понимаю чего Вы хотите. 

вот это void dump(decode_results *results) {   означает, что в функцию Вам надо передать адрес экземпляра типа decode_results.  То есть Вам не достаточно просто считать из ЕЕПРОМ value, вам надо создать объект типа decode_results, а его члену value присвоить значение из EEPROM, и тогда передавать адрес этого объекта в функцию.  Либо же переписать функцию dump.