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 ");
}
|