ho realizzato questo codice
include <IRremote.h>
int RECV_PIN = 5;
int STATUS_PIN = 13;
IRrecv irrecv(RECV_PIN);
IRsend irsend;
int fading = 1; // se = 0 Sola acquisizione di segnali. Se = 1 funzionamento regolare
decode_results results;
//LCD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int val = 0;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Inizializza il ricevitore
pinMode(STATUS_PIN, OUTPUT);
//LCD
lcd.init();
lcd.backlight();
lcd.setCursor(4, 0);
lcd.print("WAITING:");
}
// Stoccaggio del codice registrato
int codeType = -1; // Tipo di codice
unsigned long codeValue; // Il valore del codice in formato RAW
unsigned int rawCodes[RAWBUF]; // La durata del RAW
int codeLen; // La lunghezza del codice
int toggle = 0;
void storeCode(decode_results *results) {
codeType = results->decode_type;
int count = results->rawlen;
if (codeType == UNKNOWN) {
Serial.println("Ricevuto un codice sconosciuto, il RAW e':");
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("CODE UNKNOWN");
lcd.setCursor(0, 1);
lcd.print("RAW in S.Monitor");
codeLen = results->rawlen - 1;
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("Ricevuto codice NEC: ");
}
else if (codeType == SONY) {
Serial.print("Ricevuto codice SONY: ");
}
else if (codeType == RC5) {
Serial.print("Ricevuto codice RC5: ");
}
else if (codeType == RC6) {
Serial.print("Ricevuto codice RC6: ");
}
else if (codeType == SAMSUNG) {
Serial.print("Ricevuto codice Samsung: ");
}
else {
Serial.print("Tipo di codice sconosciuto ");
Serial.print(codeType, DEC);
Serial.println("");
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("HEX");
lcd.setCursor(7, 0);
lcd.print(codeValue, HEX);
lcd.setCursor(0, 1);
lcd.print("LENGTH");
lcd.setCursor(13, 1);
lcd.print(codeLen);
Serial.println(results->value, HEX);
codeValue = results->value;
codeLen = results->bits;
}
}
void loop() {
if (irrecv.decode(&results)) {
digitalWrite(STATUS_PIN, HIGH);
storeCode(&results);
irrecv.resume(); // resume receiver
digitalWrite(STATUS_PIN, LOW);
}
}
Fa tutto quello che deve fare, ma non capisco il motivo per cui sull’lcd il valore compare al codice successivo. Cioè con il telecomando clicco un pulsante 1 e su monitor seriale viene scritto il codice corrispondente, poi clicco il pulsante 2 e su monitor seriale viene scritto il corrispettivo codice del pulsante 2, mentre sull’lcd quello del codice 1. Continuando a premere si ha sempre il ritardo sull’lcd di un codice.
grazie
EDIT: noto in realtà che questo “delay” c’è solo quando il programma riesce a decifrare il codice, cioè sull’lcd non ho nessun ritardo se il nuovo codice non è riconosciuto.