problema con la comunicazione via infrarosso

buon giorno!
sto cercando da circa una settimana di realizare un programma abbastanza elementare che se non ci riesco, il mio programma dovrebbe mandare un imput da un telecomando(questo:http://www.electrodragon.com/product/infrared-dev-kit-controllernec-type-and-hx1838-receiver/) e se viene clicato + accende il led, mentre se clicco - lo dovrebbe spegnere. in oltre mi invia via seriale il codice del pulsante.
questo è il mio programma

#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
pinMode(9,OUTPUT);
  Serial.begin(9600);
 irrecv.enableIRIn(); // Start the receiver
}
void loop() {
 if (irrecv.decode(&results)) {
 Serial.println(results.value, HEX);
 if(results.value=='FFA857'){digitalWrite(9,HIGH);} //valore del segnale + 
 if(results.value=='FFE01F'){digitalWrite(9,LOW);}//valore del segnale -
 irrecv.resume(); // Receive the next value
 }
}

pultroppo il led non si spegne. pero mi arriva perfettamente il codice del pulsante premuto via seriale

Quei due test sono completamente errati Quel results.value è semplicemente un numero, non una frase.

if( results.value==0xFFA857 )

Inoltre fosse una frase dovresti racchiuderla tra doppi apici "FFA857" mentre i singoli apici sono solo per un singolo carattere 'F' Se devi confrontare 2 parole NON puoi usare == ma una funzione tipo if(strcmp(frase1,frase2)==0) http://www.cplusplus.com/reference/cstring/strcmp/

grazie mille. si, lo pensavo anche io che fosse li il problema. pero se non mettevo gli apici lo vedeva come un errore. una ultima domanda da principiante: perche per confrontare il codice tu hai anteposto 0x? if( results.value==[u]0x[/u]FFA857 )? in oltre il ritorno del mio codice non ha una parte letterale, quindi perchè è un nomero e non una stringa?

Impara bene questa pagina: arduino.cc/en/Reference/IntegerConstants

andreaalf: grazie mille. si, lo pensavo anche io che fosse li il problema. pero se non mettevo gli apici lo vedeva come un errore. una ultima domanda da principiante: perche per confrontare il codice tu hai anteposto 0x? if( results.value==[u]0x[/u]FFA857 )? in oltre il ritorno del mio codice non ha una parte letterale, quindi perchè è un nomero e non una stringa?

Il qualificatore 0x indica che quel numero è espresso in esadecimale. E' solo per la lettura di noi "umani", per la macchina è comunque un numero. Una variabile numerica con valore 65 puoi anche esprimerla in esadecimale 0x41 oppure binario B1000001

Il codice che quello sketch trova quando premi il telecomando è dato da:

Serial.println(results.value, HEX);

Dove tu chiedi di visualizzare il codice del tasto ma in esadecimale. E' comunque sempre un numero (grosso). Puoi anche vederlo in decimale, basta che togli il virgola HEX ma scoprirai che è un numerone difficile da scrivere, in esadecimale risulta un pò più corto da scrivere. E' solo per "comodità"