Questo è un semplice esempio per far lampeggiare un led con la funzione millis, anzichè la classica funzione delay. Il delay è più semplice da usare, ma ha lo svantaggio di mettere in pausa tutto il programma, il millis invece permette al microcontrollore di continuare ad eseguire lo sketch.
Segui Daniele Alberti su Google+
Questo è il semplice esempio blink di arduino:
- int led = 13;
- void setup() {
- pinMode(led, OUTPUT);
- }
- void loop() {
- digitalWrite(led, HIGH);
- delay(1000);
- digitalWrite(led, LOW);
- delay(1000);
- }
Questo invece è l'esempio con la funzione millis:
- int led = 13;
- unsigned long time;
- unsigned long lampeggio_time = 0;
- void setup()
- {
- pinMode(led, OUTPUT);
- }
- void loop()
- {
- time=millis();
- if(time>lampeggio_time+1000)
- {
- digitalWrite(led, HIGH);
- }
- if(time>lampeggio_time+2000)
- {
- digitalWrite(led, LOW);
- lampeggio_time=millis();
- }
- }
Come é vero che la programmazione C dipende dal programmatore io personalmente l'avrei scritta cosi'
RispondiElimina"int LEDpin = 13;
int LEDstato = LOW;
long milliprecedenti = 0;
long intervallo = 1000;
void setup() {
pinMode(LEDpin, OUTPUT);
}
void loop() {
unsigned long millicorrenti = milli();
if (millicorrenti - milliprecedenti > intervalo) {
milliprecedenti = millicorrenti; if (LEDstato == LOW) {
LEDstato = HIGH;
} else {
LEDstato = LOW;
}
digitalWrite(LEDpin, LEDstato);
}
}"
Grazie del tuo contributo, in effetti riguardando il codice che ho scritto avrei potuto renderlo un po' più pulito.
EliminaComunque il mio obiettivo è quello di fornire un codice funzionante a chi ne ha bisogno, poi un buon programma è un'altra cosa :)
In ogni caso è molto istruttivo vedere diversi modi per raggiungere lo stesso risultato, penso che potrà essere utile a molti. Ciao e grazie ancora!
nel programma di RyujiAndy si ha un tempo uguale di led on e di led off. nel programma di daniele alberti, modificando i valori di 1000 e di 2000 all'interno degli if si possono avere tempi di led on diversi da tempi di led off.
RispondiEliminaPer favore correggetemi se sbaglio.
Grazie
Si hai ragione mi ero dimenticato di sottolinearlo nella risposta precedente, grazie mille!
EliminaMa se volessi usare switch anziché if, come dovrebbe essere scritto il codice?
RispondiEliminaGrazie
uccidendoti
Elimina