Arduino e ricevitore IR

ragazzi ho un problema, ho scritto un codice semplice per accendere 4 luci con la pressione dei tasti sul telecomando (1 prima luce, 2 la seconda, tre la terza e 4 la quarta..) e quando premo il tasto 5 tutte le luci si spegnono, ecco il codice :

///codice by babbu95///
#include <IRremote.h

int RECV_PIN = 45;
int L1 = 47;
int L2 = 49;
int L3 = 51;
int L4 = 53;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(L1,OUTPUT);
pinMode(L2,OUTPUT);
pinMode(L3,OUTPUT);
pinMode(L4,OUTPUT);
}
void loop(){

if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);

if(results.value == 1 )
digitalWrite(L1, HIGH);
if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
if(results.value == 5 )
digitalWrite(L1, LOW);

irrecv.resume();

if(results.value == 2 )
digitalWrite(L2, HIGH);
if(results.value == 5 )
digitalWrite(L2, LOW);
irrecv.resume();

if(results.value == 3 )
digitalWrite(L3, HIGH);
if(results.value == 5 )
digitalWrite(L3, LOW);

irrecv.resume();

if(results.value == 4 )
digitalWrite(L4, HIGH);
if(results.value == 5 )
digitalWrite(L4, LOW);

irrecv.resume();

}

}
}

e funziona perfettamente, solo, ora vorrei fargli una modifica, ma è 2 ore che ci son sopra ma non ne son in grado... praticamente vorrei che le luci si spengano, NON quando premo il tasto 5, ma quando rilascio il loro specifico tasto... e che quindi , rimangano accese solo se il loro tasto al momento è premuto.... ho provato alcune soluzioni ma (devo pilotare dei relé) quando effettua la seconda lettua il relé si diseccita ...quindi vi chiedo aiuto a voi...grazie

Verifica se il telecomando trasmette il codice di continuo se tieni premuto il tasto. Alcuni produttori non lo fanno.
Ciao Uwe

sisi se tengo premuto a volte lo invia di continuo, a volte no (dipende dal numero di volte che l'arduino "interroga" il sensore)... è un telecomando TV quindi sisi invia sempre :wink:

UP ;D

Ciao babbu95
http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html For repeated transmissions (button held down), the decoding code will return the same decoded value over and over. The exception is NEC, which sends a special repeat code instead of repeating the transmission of the value. In this case, the decode routine returns a special REPEAT value.

quanto ho capito irrecv.resume(); prende il prossimo codice decodificato.
Allora perché lo fai in mezzo al controllo del pulsante premuto?

Riscrivi il programma in modo che :

  1. legge e traduce il codice dal reciver
  2. controlla se é un codice che coincide con uno dei tasti 1 a 5
  3. accende o spegne i led in funzione del tasto premuto.
  4. riincomincia con 1)

#include <IRremote.h manca il ">" finale

Ciao Uwe

eh ma nello stesso tempo che mi rilegge il codice, mi diseccita il relé...e questo non va bene... =(