Esercitazione del 05 nov. 2019

[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 variabile a come accumulatore di millisecondi; il ciclo dura finché la lettura di BUTTON è LOW (circuito aperto);

  • quando si esce dal ciclo, l’utente ha spinto il pulsante mandando in HIGH la lettura del pin BUTTON; 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).