Problema ciclo do while e libreria IRremote

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 :slight_smile:

E come può terminare, con la condizione che hai messo nel while? Hai messo 2 condizioni in OR, il che vuol dire che si esce solo quando ENTRAMBE sono NON verificate. Però questo non è possibile, perché value dovrebbe essere contemporaneamente uguale a due valori diversi ;).

Forse volevi metterle in AND?

Oh mio dio, hai ragione, avevo totalmente confuso le funzioni logiche e avevo dato per scontato di averla fatta bene concentrandomi su altre cose. Grazie mille (Y). Per l'altro problema (più codici corrispondenti ad un solo tasto) hai idea di quale potrebbe essere la soluzione??