Questo progetto misura l’intervallo di tempo che intercorre tra due eventi utilizzando il timer “millis”. Gli eventi sono la pressione di 2 pulsanti ma potremmo pensare anche a due sensori che rilevino il passaggio di un oggetto su un nastro trasportatore oppure 2 fotocellule tipo autovelox. Il display LCD visualizza il tempo intercorso tra i due eventi.

Spiegazione del programma:

Dopo aver inserito le la libreria per gestire il diplay LCD ed aver creato una istanza della classe LiquidCrystal, vengono utilizzate 2 variabili booleane che memorizzano lo stato on/off del pulsante e 3 variabili “long” per memorizzare il tempo in millisecondi e il ritardo da calcolare. Nel SETUP inizializzate LCD e i 2 pinMode. Nel LOOP create un ciclo DO-WHILE che attende la pressione del primo pulsante, quando avviene la pressione si esce dal do-while e si memorizza neklla variabile TA e visualizza su LCD il valore di millis. Poi un secondo ciclo DO-WHILE che attenda la pressione del secondo pulsante. Se il tasto è premuto si esce dal ciclo si registra il valore di MILLIS in una seconda variabile TB. Non resta che calcolare la differenza TB-TA e visualizzarla sullo schermo del display.

 

 

 

 

/*
Misura di un intervallo di tempo con millis
Misura l'intervallo di tempo che intercorre tra la pressione
di due pulsanti A e B e visualizza il valore in millisecondi
*/

#include<LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
bool statoPA;  // memorizza lo stato del pulsante
bool statoPB;
float ta;  // memorizza il momento in cui è premuto il pulsante
float tb;
float delta;  // memorizza il tempo tra le due pressioni

void setup(){
  lcd.begin(16,2);
  pinMode(10, INPUT); //A - pulsante a sinistra
  pinMode(9, INPUT); //B - pulsante a destra
  lcd.print("time");
}

void loop(){
  do{
    statoPA = digitalRead(10);
  }while(!statoPA); // attesa della pressione di PA
  ta=millis(); // salvo il tempo
  lcd.setCursor(8,0);
  lcd.print(ta/1000); // visualizzo il tempo
  lcd.print(" s ");
  do{
    statoPB = digitalRead(9);
  }while(!statoPB); // attesa della pressione di PB

  tb=millis();  // salvo il tempo
  lcd.setCursor(12,0);
  lcd.print(tb/1000);  // visualizzo il tempo
  delta=tb-ta;   // calcolo il ritardo
  lcd.print(" s ");
  lcd.setCursor(8,1);
  lcd.print(delta/1000);  // visualizzo il ritardo
  lcd.print(" s ");

}