Salve a tutti,
sto riprendendo in mano Arduino Uno per un piccolo progetto/gioco e ho un problema:
dichiaro una funzione per spegnere in un sol colpo quattro LED.
Questa funzione fa esattamente il suo dovere se richiamata in void loop() ma, nel caso la volessi inserire in un ciclo for, mi interrompe il ciclo!
void loop(){
[...omissis...]
for(i=0; i<5; i++){
// Accendo il LED alla posizione i
digitalWrite(i,HIGH);
// Attendo 4 sec
delay(4000);
// Lancio la funzione che mi spegne tutti i LED
spegniLed();
}
[...omissis...]
}
In questo caso mi si accende e poi spegne solo il primo LED e ciccia.
Sappiate che il codice è stato fortemente semplificato, ho provveduto a debuggare il tutto mediante seriale e mi sono accorto di questo strano comportamento. Nella documentazione ufficiale mi pare di aver letto che alla fine dell'esecuzione della function riprende il normale flusso del programma. Boh.
Qualcuno ha qualche info a riguardo?
Ho anche provato a inserire return; nella funzione, ma nisba.
Grazie!!!
Non potendo vedere il resto... posso solo fare ipotesi.
Nella funzione non dichiari la variabile i, perciò ti basi su una i dichiarata globalmente.
Prova a mettere una dichiarazione int i; prima del for nella funzione.
... magari usare due variabili diverse nel ciclo di FOR aiuta ... XD XD XD
Non vedo dove dichiari "i" ... ritengo quindi sia dichiarata globalmente e ... NON puoi non aspettarti strani comportamenti se usi la stessa variabile !!!
Creati una variabile locale solo per la funzione spegniLed() ...
nid69ita:
Non potendo vedere il resto... posso solo fare ipotesi.
Nella funzione non dichiari la variabile i, perciò ti basi su una i dichiarata globalmente.
Prova a mettere una dichiarazione int i; prima del for nella funzione.
Mi hai dato una dritta niente male!
Ho risolto, e credo di aver capito cosa è successo:
nella funzione spegniLed() è presente una variabile "di comodo" i utilizzata per il ciclo for
ma anche nella ciclo dal quale stavo chiamando questa funzione è presente una variabile i
pertanto, finito il ciclo for della funzione spegniLed() la mia varibile i=4 e mi faceva uscire dal ciclo for genitore.
Mea culpa! Ho risolto inserendo un nome diverso alla variabile contatore nella funzione spegniLed(), e cioè: int k=0;
gpb01:
... magari usare due variabili diverse nel ciclo di FOR aiuta ... XD XD XD
Non vedo dove dichiari "i" ... ritengo quindi sia dichiarata globalmente e ... NON puoi non aspettarti strani comportamenti se usi la stessa variabile !!!
Creati una variabile locale solo per la funzione spegniLed() ...
No, no.. spetta..
Ho buttato giù un po' di codice di esempio. Il programma che sto implementando utilizza altri Pin: 5,6,9,10
Per la cronaca: a scopo didattico sto ricerando il vecchio gioco Simon: quattro LED, quattro pulsanti, una sequenza casuale di illuminazioni e al giocatore il compito di replicarne la sequenza.
Sono a buon punto..
PS. Sarà assolutamente free e pubblicherò il codice sul mio sito.