Arduino impazzito !

Ciao ragazzi !!!

Oggi è successa una cosa stranissima, il mio Arduino è letteralmente impazzito !!
Praticamente ho testato un codice, che ha sempre funzionato...
Oggi, prendendo i codici decimali di un telecomando tramite il monitor, ho modificato i baud, aumentandoli e diminuendoli per vedere cosa succedeva.
Ora prima di questa modifica l'Arduino faceva quello che diceva il codice, cioò quando premevo il tasto 0 un led doveva accendersi per 100 ms, dopo questo smanettamento il led rimane acceso, ma fa un loop infinito e si accende e spegne velocissimo, penso a 100 ms, e quando apro il monitor mi trovo la stringa decimale ripetuta infinitamente !!!

Ho fuso qualcosa ??

#include <IRremote.h>

int led1 = 12;
int RECV_PIN = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;

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

void loop() {

if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
if(results.value == 33480735)
digitalWrite(led1,HIGH);
delay(100);
digitalWrite(led1,LOW );
}

}

arduino_ir.png

Prova a cambiare 33480735 con un qualsiasi altro valore; a me dà la sensazione che si sia bloccato il telecomando e mandi continuamente il valore, i 100ms sarebbero proprio quelli impostati da te; puoi anche provare a togliere le batterie da telecomando, insomma intanto escludi che sia un problema di trasmissione, l'una o l'altra prova dovrebbero darti una risposta.
Ciao

Ho tolto le batterie del telecomando, ho cambiato il codice decimale ho disinstallato Arduino.app, ma continua a fare così !!!

Inoltre quando premo sul pulsante del telecomando, il led Tx dell'arduino lampeggia al ritmo del led !!

Soluzione ? Driver ?

anerDev:
Ho tolto le batterie del telecomando, ho cambiato il codice decimale ho disinstallato Arduino.app, ma continua a fare così !!!

Inoltre quando premo sul pulsante del telecomando, il led Tx dell'arduino lampeggia al ritmo del led !!

Soluzione ? Driver ?

Il lex tx si accende ad ogni valore inviato al monitor seriale, quindi è normale, non lo è il LED se lampeggia senza ricevere nulla. Io non capisco una cosa: parlavi di inviare un solo impulso per accendere ed uno per spegnere, vedo che usi ancora il tuo code e non quello che ti aveva correttamente suggerito Leo; ora col tuo codice finché tieni premuto il tasto del telecomando è normale che il circuito vada in loop, ma se il telecomando NON lo tocchi o togli addirittura le batterie, chie è che manda segnali al led ricevente?Se la risposta è "nessuno" stacca il led ricevente da circuito e vedi se smettono di arrivare dati al monitor

Il codice che mi aveva suggerito Leo lo dovevo implementare dopo aver raccolto ogni codice decimale di ogni singolo tasto del telecomando :)...
Comunque ho tolto sia la batteria del telcomando sia il ricevitore IR mentre il led loopava, ma continuava a farlo ed il monitor continuava a segnare lo stesso decimale ....

Boh !!

"Boh" non risolve i problemi, purtroppo :disappointed_relieved:
Le prove li individuano e le azioni li rimuovono o almeno bypassano quindi lavora e non fare storie :zipper_mouth_face:
Resetta Arduino dal pulsante, in seconda battuta prova a rimandare lo sketch ad Arduino; la terza prova è quella di cambiare il pin di lettura, SEMPRE senza led IR, se non riusciamo a "fermare" quel valore non possiamo andare avanti, e comunque stranissima questa cosa.

Domanda: ma ti comincia a scrivere sulla seriale appena colleghi l'alimentazione oppure inizia a sparare numeri all'infinito solo DOPO aver ricevuto il primo comando?

Ragazzi ho cambiato i pin, ma continua a fare nello stesso modo !
PS: questo ciclo incomincia dopo aver dato il primo input e premendo qualunque tasto, ma se premo il tasto n. 4, che corrisponde il decimale, anche il led fa il loop infinito.

Secondo voi può essere un problema hardware, o driver ?

Mi viene da pensare che la semplice lettura del dato presente nel buffer della libreria, non svuoti il buffer stesso.
Sono andato a vedere la libreria e sul sito consigliano un modo di leggere che non è quello adottato da te. Mi pare infatti che svuotino il buffer. Sostituisci il tuo codice con questo:

void loop() {
   if (irrecv.decode(&results)) {
     Serial.println(results.value, DEC);
     if(results.value == 33480735)
       digitalWrite(led1,HIGH);
       delay(100);
       digitalWrite(led1,LOW);
    }
  dump(&results);
  irrecv.resume(); // Receive the next value
  }
}

Inoltre nel tuo codice mi pare manchi una coppia di parentesi a raggruppare il codice del secondo if (quello del 33480735). In questo modo non so il compilatore se attribuisce solo il primo digitalWrite all'if oppure tutto il resto. Prendi l'abitudine di racchiudere i blocchi di codice relativi a if, for, while sempre in una coppia di {}, anche se il blocco è un unico comando. Diventi meno matto tu a

Ho incollato il codice che mi hai dato, ma da un errore:

Ir_ricevitore.cpp: In function 'void loop()':
Ir_ricevitore:22: error: 'dump' was not declared in this scope

Ma il buffer, quando premo il tasto reset sulla board, non si svuota ?

dump l'ho copiato da un esempio della libreria. Toglilo se dà errore.

OLEEEEEEEEEEEEEEEEEE' !!!

Risolto !!!!

Ecco il codice giusto:

#include <IRremote.h>

int led1 = 5;
int RECV_PIN = 4;
IRrecv irrecv(RECV_PIN);
decode_results results;

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

void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
irrecv.resume();
if (results.value == 33480735) {
digitalWrite(led1,HIGH);
delay(100);
digitalWrite(led1,LOW);
}
}
}

Ed ecco anche il modo per fare on/off dal telecomando:

#include <IRremote.h>

int led1 = 5;
int RECV_PIN = 4;
IRrecv irrecv(RECV_PIN);
decode_results results;

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

byte flag=0;

void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
irrecv.resume();
if (results.value == 33480735) {
digitalWrite(led1, flag);
flag^=1;
}
}
}

Grazie a tutti !!!!! Vi Voglio Bene ahhauuhahuahuauh

tutto questo casino per un irrecv.resume(); :grin:

huaahuuhahuahuahuahuahuauauauhauhauhahua

anerDev:
huaahuuhahuahuahuahuahuauauauhauhauhahua

Cooome? ci hai fatti disperare una serata e passa per un errore di codice, mi ricorda tanto la storiella della pecorella che gridava per scherzo "al lupo, al lupo!", quando il lupo venne davvero nessuno lo credette, il resto se non lo sai lo puoi ben immaginare ]:smiley:

Arrivò il lupo e se la magnò !!! hauhuauhauhahuhuauh :grin: :grin: :grin: :grin: :grin: :grin: :grin:

anerDev:
Arrivò il lupo e se la magnò !!! hauhuauhauhahuhuauh :grin: :grin: :grin: :grin: :grin: :grin: :grin:

Ottimo Andrea, e la morale ti è chiara?

Non devo chiedere troppi aiuti, perchè quando mi servirà veramente non ci sarà nessuno ad aiutarmi ?! :frowning: :frowning:

anerDev:
Non devo chiedere troppi aiuti, perchè quando mi servirà veramente non ci sarà nessuno ad aiutarmi ?! :frowning: :frowning:

Sbagliato! puoi chiedere tutti gli aiuti che vuoi, personalmente ti aiuterò ogni volta che le mie poche conoscenze potranno esserti utili, e credo proprio che la maggior parte degli utenti del Forum faranno lo stesso.
Medita, giovanotto, medita :cold_sweat:

Sono felice . !! uhahuahuhua .... Ma come fai a sapere che mi chiamo Andrea ?? Da aner ?