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