/* Chronometer gemäss Aufgabe 1: * Start und Stop-Taste für Zeitmessung. Die gestoppte Zeit * wird laufend und bei Betätigung der Stop-Taste angezeigt. */ #include #include // create object of class LiquidCrytal_I22 and define parametes: LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Konstanten festlegen (für bessere Lesbarkeit des Codes): #define startPin 5 #define stopPin 4 #define debounce 100 // Wartezeit zur "Entprellung" der Tasten (Millisekunden) // Folgende Variable speichert den Status der Zeitmessung bool timeRunning; // Folgende Variablen speichern Zeiten in Millisekunden: unsigned long startTime; unsigned long currentTime; unsigned long stoppedTime; // Folgende Vraiabeln dienen der Anzeige im Format MM:SS:HH: unsigned int minutes; unsigned int seconds; unsigned int hundreds; char timeString[] = "00:00:00"; void setup() { // Eingänge definieren: pinMode(startPin, INPUT_PULLUP); pinMode(stopPin, INPUT_PULLUP); // Variablen definieren bzw. auf Initial-Werte setzen: timeRunning = 0; startTime = 0; currentTime = 0; stoppedTime = 0; // Anzeige vorbereiten: lcd.begin(16,2); // initialize the lcd lcd.clear(); lcd.setCursor(0, 0); lcd.print("Zeit:"); } void loop() { if(timeRunning == 1){ currentTime = millis() - startTime; lcd.setCursor(8, 0); showTime(currentTime); } if (digitalRead(startPin) == LOW) { delay(debounce); startTime = millis(); stoppedTime = 0; currentTime = 0; timeRunning = 1; } if (digitalRead(stopPin) == LOW) { delay(debounce); stoppedTime = millis() - startTime; lcd.setCursor(8, 0); showTime(stoppedTime); timeRunning = 0; } } void showTime(unsigned long timeMS){ // Minuten, Sekunden und Hundertstel berechnen: minutes = timeMS/60000; seconds = (timeMS-minutes*60000)/1000; hundreds = (timeMS-minutes*60000-seconds*1000)/10; // Werte im gewünschten Format in Array timeString schreiben: sprintf(timeString,"%02d:%02d:%02d", minutes, seconds, hundreds); // ...und ans LCD ausgeben: lcd.print(timeString); }