Versuche nach genau 5 Sekunden, besser 5000 Millisekunden, auf den Knopf zu drücken. Der Arduino misst die Abweichung und gibt Rückmeldung. Ein gutes Spiel nicht nur für Zeitgefühl und Geduld, sondern auch um zu verstehen wie sinnvoll die Arduino Funktion "Millis" auch in Ardublock ist.
Warum überhaupt "millis"
Die Funktion millis() ist für Arduino-Projekte entscheidend, da sie echtes Multitasking ermöglicht, ohne den Prozessor durch Pausen zu blockieren. Dadurch bleibt das System jederzeit reaktionsfähig für Sensoren oder Eingaben, während Zeitintervalle effizient im Hintergrund laufen. Ein besonderer Vorteil ist, dass millis() die Zeit seit dem Programmstart automatisch im Hintergrund erfasst, sodass man keine eigenen Zähler oder Timer-Logiken mühsam selbst programmieren muss. Dieser Ansatz verhindert Programmstopps und führt zu deutlich stabilerem, professionellerem Code für komplexe Anwendungen.
Spiel 7 aus der 200 Arduino Spiele Sammlung.
Arduino Hardware mit 20x4 LCD und Taster
Ich habe eine Button Leiste verwendet, wer wie hier gezeichnet zwei einzelne Taster verwendet, muss die internen Wiederstände des Arduino verwenden oder 2 Pullup Wiederstände einbauen. Das LCD wird an A4 und A5 angeschlossen, mehr ist es dann auch schon nicht.
Arduino Programm für das 5 Sekunden Spiel
Das Programm mit Ardublock besteht im wesentlichen aus der Abfrage der beiden Taster, und dem messen der Zeit.
Der eigentliche "Trick" besteht darin die "millis" Zeit, einfach ab dem Messzeitpunkt immer - (Minus) zu rechnen. Dazu wird der Wert einmalig in einer Variablen gespeichert und dann dann permanent von "millis" abgezogen. Damit wird die Zeit seit Messstart angezeigt und nicht die Zeit seit Start des Arduino. Bei langen Laufzeiten des Arduino natürlich die Größe bzw. Länge der Variablen beachtet werden.
Hier nach das Programm für die Arduino IDE
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
bool start = true;
int zeit_minus = 0;
int zeit_aktuell = 0;
void setup() {
pinMode(7, INPUT);
pinMode(6, INPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("press red button");
start = true;
}
void loop() {
if (( !( digitalRead(7) ) && true )) {
start = false;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("press blue button");
lcd.setCursor(0, 1);
lcd.print("to stop by 5000");
zeit_minus = millis();
}
while ( ( start == false ) ) {
zeit_aktuell = ( millis() - zeit_minus );
lcd.setCursor(0, 2);
lcd.print(zeit_aktuell);
if (!( digitalRead(6) )) {
start = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("press red button");
lcd.setCursor(0, 2);
lcd.print(zeit_aktuell);
zeit_aktuell = ( zeit_aktuell - 5000 );
lcd.setCursor(0, 3);
lcd.print(zeit_aktuell);
}
}
}






