Buonasera, sto cercando di realizzare uno sketch per comandare un led RGB tramite un telecomando ad infrarossi associato ad un ricevitore. Per iniziare ho iniziato a scrivere il codice relativo ad un colore solo. L'hardware funziona correttamente, il segnale viene ricevuto senza problemi dalla scheda. Il problema è quando si entra nel ciclo do while in fondo. In pratica vorrei che una volta premuto asterisco arduino entrasse in un ciclo in cui, fino a che non viene premuto il tasto OK, al tasto SU e al tasto GIù corrispondono rispettivamente un aumento e diminuzione della luminosità del led. Il problema è che quando premo OK il ciclo do while non termina, nonostante il valore del tasto OK sia correttamente salvato nella variabile strutturata results1.value, come si vede aprendo il monitor seriale.
Sto cercando di fare un ciclo iterativo separato perché quando comanderò tutti e tre i colori vorrei che una volta premuto asterisco sia il tasto corrispondente al colore a far aumentare la luminosità del singolo led.
Come potete vedere in ogni condizione ci sono 2 codici infrarossi. Questo perché ho notato che allo stesso tasto corrispondono molto spesso 2 codici diversi (se non anche 3). Sapreste come posso risolvere anche questo problema??
#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
int ledB=6; //associo al led blu il pin 6
int valB;
int receiver=7; //associo al ricevitore il pin 7
IRrecv irrecv(receiver); // istanziamento un oggetto di tipo irrecv
decode_results results; // istanziamento un oggetto di tipo decode_result
decode_results results1;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); //abilito la ricezione del segnale dal telecomando
pinMode(7, INPUT);
pinMode(ledB, OUTPUT);
}
void loop() {
if(irrecv.decode(&results)){ //se è stato ricevuto un segnale stampa il valore del codice nel monitor seriale
Serial.print("results = ");
Serial.println(results.value, HEX);
irrecv.resume(); //ricevi il prossimo segnale
}
if (results.value == 0xFD00FF || results.value == 0xB2EEDF3D){ //se è stato premuto il tasto 1
analogWrite(ledB, 127); //accendi il led blu
valB=127;
Serial.println(valB);
}
if (results.value == 0xFDB04F || results.value == 0x42640C99){ // se è stato premuto il tasto 0
analogWrite(ledB, 0); // spegni il led blu
valB=0;
}
if (results.value == 0xFD30CF || results.value == 0xB1EFBA9D){ //se è stato premuto asterisco
do{
if(irrecv.decode(&results1)){
Serial.print("results1 = ");
Serial.println(results1.value, HEX);
irrecv.resume();
}
if(results1.value == 0xFD8877 || results1.value == 0x6F5974BD){ //se è stata premuta la freccia
analogWrite(ledB, valB+15); // alta aumenta la luminosità
valB=valB+15;
Serial.println(valB);
}
else if(results1.value == 0xFD9867 || results1.value == 0x57E346E1){ //se è stata premuta la freccia bassa diminuisci
analogWrite(ledB, valB-15); // la luminosità
valB=valB-15;
Serial.println(valB);
}
}while(results1.value != 0xFDA857 || results1.value != 0x25802501); //fino a che non viene premuto il tasto ok
}
}
Grazie in anticipo