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
#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);
}
lesept
April 19, 2018, 9:22am
2
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