If con numeri esadecimali

salve,
ho utilizzato un VS0038 per leggere tramite il seguente sketch i valori generati da alcuni pulsanti di un normale telecomando. I valori che ottengo sono del tipo: "CF2F9DAB"

#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
}

Ora quello che ora vorrei fare è riuscire ad accendere e spegnere un led tramite l'utilizzo di due pulsanti e quindi di due codici che ricevo in ingresso.

#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
int led = 4;
int val = 0; //led spento di default

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(led, OUTPUT); 
  }

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume();
        
        if (results.value == CF2F9DAB ) {(val <= 1);}
        if (results.value == B2BBAC69) {(val <= 0);}
        
      }
if (val = 0){digitalWrite(led, LOW);}
if (val = 1){digitalWrite(led, HIGH);}
  }

.

Quando compilo mi dice che quei numeri in esadecimale non sono stati dichiarati, cosa che non accade se li metto due numeri binari a caso. Cosa ho sbagliato?

Mi pare che quella libreria restituisca degli oggetti di tipo stringa, quindi non c'entra la notazione esadecimale (a proposito, un numero è riconosciuto come esadecimale se anteponi il prefisso 0x).
Quindi il confronto dovresti farlo con "CF2F9DAB", se non ricordo male.

No, errato. Restituisce un unsigned long, quindi hai solo omesso il prefisso 0x.
Esempio: 0xCF2F9DAB

Non sono sicuro (non sono un programmatore), ma i decimali gli esadecimali li ho sempre visti usati con la dichiarazione di genere "0x" davanti ... non e' che per caso manca quella ?

EDIT: ecco, come al solito Leo mi frega per un'incollatura :stuck_out_tongue: XD

Sì ma ho dovuto rettificare perché ho sbagliato, comunque anche tu hai "toppato" :stuck_out_tongue_closed_eyes:

Etemenanki:
i decimali li ho sempre visti usati con la dichiarazione di genere "0x" davanti ...

Hai ragione intendevo esadecimali ... correggo, grazie :wink:

ah ok, grazie a tutti :grin:
ora non ho più quel problema, ma il led parte da acceso e da li non si schioda :fearful:

Perché il tuo codice è errato.

Questo non va bene:

if (results.value == CF2F9DAB ) {(val <= 1);}

Gli operatori minore di/maggiore di sono per i CONFRONTI, non per le assegnazioni.
Quindi questo diventa:

if (results.value == CF2F9DAB ) {(val = 1);}

Ancora, questo non va bene:

if (val = 0){digitalWrite(led, LOW);}

Un solo segno uguale è un'ASSEGNAZIONE, non un confronto.
Quindi devi scrivere così:

if (val == 0){digitalWrite(led, LOW);}

ok ti ringrazio, ora funziona :%

Se già non l'hai fatto, ti consiglio di studiarti almeno le basi del C. :wink:

ti ringrazio (ancora?! XD) perché questi link sono sempre utili...
la verità è che sto studiando anche altri linguaggi e questo porta a confondermi le idee :.

heko:
la verità è che sto studiando anche altri linguaggi e questo porta a confondermi le idee :.

Ti capisco benissimo!! Anch'io programmo per diletto e cambiando linguaggio ti incarti sempre con la sintassi :wink:

leo72:
... cambiando linguaggio ti incarti sempre con la sintassi :wink:

Ecco lo spunto per una nuova idea di progetto ... un linguaggio di programmazione che accetti qualsiasi sintassi di qualsiasi altro linguaggio ... facile facile ... :stuck_out_tongue: XD XD XD

Studiati un linguaggio esotico, allora... poi ne riparliamo..

Questo è un HelloWorld in Brainfuck (il nome è tutto un programma):

++++++++++
[
   >+++++++>++++++++++>+++>+<<<<-
]
>++. Loop iniziale (dopo viene stampata una H)
>+. e
+++++++. l
. l
+++. o
>++.
<<+++++++++++++++.
>.
+++.
------.
--------.
>+.
>.

:stuck_out_tongue_closed_eyes: ]:smiley:

Mi correggo:

... di qualsiasi altro linguaggio con un minimo di senso ...

:stuck_out_tongue: :stuck_out_tongue_closed_eyes:

leo72:
Questo è un HelloWorld in brainfuck

... beh .. devo dire che non è malvagio ... almeno a vedere QUI ... praticamente elementare XD XD XD

Guglielmo

Interessante.
Utile in alcune situazioni.
"Si fornisce al cliente anche il codice sorgente" ...

state delirando :smiley: :grin: :smiley: :grin: :smiley: :grin:

heko:
state delirando :smiley: :grin: :smiley: :grin: :smiley: :grin:

Non preoccuparti ... pochi mesi sul forum, e anche per te' la pazzia diventera' una condizione normale ... :stuck_out_tongue: XD :grin: ]:smiley: :stuck_out_tongue_closed_eyes:

(ok, magari non al livello di lock o altri come lui ... loro hanno studiato duro e si sono impegnati per anni, per riuscire ad arrivare a quei livelli ... ]:smiley: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:)

lock: a quante "miglia di ingranaggi virtuali" corrisponde Pepita ? ... :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue: :stuck_out_tongue_closed_eyes:)

Etemenanki:

leo72:
... cambiando linguaggio ti incarti sempre con la sintassi :wink:

Ecco lo spunto per una nuova idea di progetto ... un linguaggio di programmazione che accetti qualsiasi sintassi di qualsiasi altro linguaggio ... facile facile ... :stuck_out_tongue: XD XD XD

Buona idea allora la funzione buonaidea Stampa sulla seriale "buona idea" oppure fa lampeggiare 4 volte il LED 13?

Ciao Uwe

No, quella fa il caffe' ... (corretto, ovviamente :stuck_out_tongue: XD ]:smiley: :stuck_out_tongue_closed_eyes:)