Sheet arduino n.1.1 (timer e serial monitor)¶
[Lezione del 05 nov 2019]
Scrivere su linea seriale¶
La scheda della esercitazione n.1.1 ci richiede di scrivere sul monitor seriale dell’IDE di ARDUINO il tempo di reazione all’accensione di un segnale randomico.
Il seguente video mostra lo schema montato e l’esecuzione dello sketch.
Il dettaglio dello sketch è il seguente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | /* Embedded Systems Architecture - hardware
* application on 05th nov 2019
*
* measure the reaction time to press a button
*/
#define BUTTON 8 // button port
#define RLED 9 // red led port
int a;
void setup() {
pinMode(RLED, OUTPUT);
pinMode(BUTTON, INPUT);
Serial.begin(9600); // init the serial at 9600 baud
}
void loop() {
delay(random(5000,10000)); // wait randomly 5 to 10 secs
digitalWrite(RLED, HIGH); // switch on the led
a = 0;
while(digitalRead(BUTTON)==LOW){ // counting how many msecs button is low
a++;
delay(1);
}
digitalWrite(RLED, LOW);
Serial.println(a); // and showing the measured time
}
|
Qui la novità è l’inizializzazione della seriale alla linea n.11 del codice, e la relativa scrittura del tempo misurato, che eseguiamo alla linea n.27 dello sketch.
La logica nel void loop()
è lineare:
si attende randomicamente da un minimo di 5 ad un massimo di 10 secondi (linea 19);
quindi si accende il led (linea 20);
e si contano i millisecondi durante i quali il button è aperto; questo avviene con un ciclo
while
(linee da 22 a 25) che usa la variabilea
come accumulatore di millisecondi; il ciclo dura finché la lettura diBUTTON
èLOW
(circuito aperto);quando si esce dal ciclo, l’utente ha spinto il pulsante mandando in
HIGH
la lettura del pinBUTTON
; in tal caso si spegne il led (linea 26) e si scrive sulla seriale il valore in accumulatore (che può andare in overflow se si attende troppo :-)
Dopo di che il tutto ricomincia (c’è un motivo se void loop()
si chiama in tal modo).