Ciao a tutti,sto facendo uno sketch con arduino.Per ora dovrei premere un pulsante e quando lo premo un led comincia ad accendersi e spegnersi con un intervallo di tempo di 1 sec,ma quando premo un'altra volta il pulsante il led deve accendersi e spegnersi con un intervallo di tempo di 2 secondi e così via.Il problema è che ho usato la parte loop dello sketch riportato sotto cui il pin 13 è il pin collegato al pulsante e il 12 è quello del led.Usando questa parte di sketch però il led si accende e si spegne solo una volta invece dovrei fare in modo da accendersi e spegnersi all'infinito con un intevallo di 1 sec e quando lo premo un altra volta con un intervallo di tempo di 2 sec e cosi via.
Per voi potrebbe essere molto facile ma io ancora sto imparando non sono per niente un esperto.Grazie in anticipo
;D Sí é giusto. la prima volta che passsa il ciclo lo stato viene messo a 1 e la seconda volta viene passato a 2 .
Devi controllare nel fratempo se il pulsante é stato mollato. Usa 2 vaiabii, uno per memorizare se il pulsante é stato premuto o no e l' altra per i tempi di ritardo.
non usare delay() ma millis(). vedi esempio blinkwithoutdelay
Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.
Ti ringrazio per la risposta uwefed ma riuscirei a capire meglio come devo modificare lo sketch se riporti lo sketch con le modifiche effettuate perché non ho capito molto bene come devo fare.Grazie
Non devi legare l esecuzione del pulsante all accensione del led se vuoi che il led continui ad accendersi e spegnersi anche senza pressioni del tasto.
Quando premi il pulsante aumenti la sola variabile di stato, forse sarebbe meglio usare un interrupt raising.
Nella funzione loop invece esegui il lampeggio del led.
// #define è una macro nel programma dove compare STATO_MASSIMO verrà messo il valore 5
#define STATO_MASSIMO 5
byte stato = 0;
void setup() {
pinMode(12, OUTPUT);
attachInterrupt(0, AggiornaStato, RISING);
// L'interrupt 0 significa di solito il pin 2, collega il pulsante al pin 2
}
void loop() {
if (stato > 0) {
digitalWrite(12,HIGH);
delay(stato*1000);
digitalWrite(12,LOW);
delay(stato*1000);
}
}
void AggiornaStato() {
stato++;
if (stato >= STATO_MASSIMO) {
stato = 0;
}
}