probleme type de variable pour stockage d'un code hexadecimale

Salut,

Je suis en train de fabriquer une petite telecommande capable d'enregistrer un code IR (bouton reset), de l'afficher, puis de le rejouer autant de fois que l'on souhaite (bouton).

Je bloque sur le type de variable pour stocker le code IR.

merci de votre aide :slight_smile:

#include <IRremote.h>

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

const int btn=3;

int RECV_PIN = 5;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup() 
{
  pinMode(btn,INPUT_PULLUP);

  irrecv.enableIRIn();

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  
  display.clearDisplay();
  display.setRotation(3); 
  display.setTextColor(WHITE);
  display.display();
/*
  display.clearDisplay();
  display.setRotation(3);

      display.setTextSize(1);
  display.setTextColor(WHITE);

    display.setCursor(10,20);
  display.println("REC...");
  
for(int i=0; i<50 ; i++)
  {
  display.setCursor(i,50);
  display.println("|");
  display.display();
  delay(10);
  }  
  */
}



void loop() 
{
  /*
  int Ebtn = digitalRead(btn);

  if(Ebtn == HIGH){
    display.clearDisplay();
    display.setCursor(10,20);
  display.println("NON");
  display.display();
  delay(1);
  
  }
  if(Ebtn == LOW){
    display.clearDisplay(); 
    display.setCursor(10,20);
  display.println("OUI");
  display.display();
  delay(1);
  }
  */

  
display.clearDisplay();

    if (irrecv.decode(&results)) {

    byte code = results.value;
      
    display.clearDisplay(); 
    display.setCursor(10,20);
    display.println(code, HEX);
    display.display();
    delay(1);
    irrecv.resume(); // Receive the next value
  }
  delay(100);

}

L'exemple IRrecord.ino de la bibliothèque est assez compliqué.
Le code est stocké en unsigned int ou unsigned long :

unsigned long codeValue; // The code value if not raw
unsigned int rawCodes[RAWBUF]; // The durations if raw

Par contre le traitement de la réception est complexe (au-delà de mes connaissances) :

// Stores the code for later playback
// Most of this code is just logging
void storeCode(decode_results *results) {
  codeType = results->decode_type;
  //int count = results->rawlen;
  if (codeType == UNKNOWN) {
    Serial.println("Received unknown code, saving as raw");
    codeLen = results->rawlen - 1;
    // To store raw codes:
    // Drop first value (gap)
    // Convert from ticks to microseconds
    // Tweak marks shorter, and spaces longer to cancel out IR receiver distortion
    for (int i = 1; i <= codeLen; i++) {
      if (i % 2) {
        // Mark
        rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK - MARK_EXCESS;
        Serial.print(" m");
      } 
      else {
        // Space
        rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK + MARK_EXCESS;
        Serial.print(" s");
      }
      Serial.print(rawCodes[i - 1], DEC);
    }
    Serial.println("");
  }
  else {
    if (codeType == NEC) {
      Serial.print("Received NEC: ");
      if (results->value == REPEAT) {
        // Don't record a NEC repeat value as that's useless.
        Serial.println("repeat; ignoring.");
        return;
      }
    } 
    else if (codeType == SONY) {
      Serial.print("Received SONY: ");
    } 
    else if (codeType == PANASONIC) {
      Serial.print("Received PANASONIC: ");
    }
    else if (codeType == JVC) {
      Serial.print("Received JVC: ");
    }
    else if (codeType == RC5) {
      Serial.print("Received RC5: ");
    } 
    else if (codeType == RC6) {
      Serial.print("Received RC6: ");
    } 
    else {
      Serial.print("Unexpected codeType ");
      Serial.print(codeType, DEC);
      Serial.println("");
    }
    Serial.println(results->value, HEX);
    codeValue = results->value;
    codeLen = results->bits;
  }
}

Je pense que l'instruction importante est :
    codeValue = results->value;qui est un unsigned long

nickel merci sa marche :slight_smile: