2026-03-03 08:57:38 +01:00
// Copyright Justus Wolff™℗®© & Santhosh Venugopal™℗®©
// gemacht auf Wunsch von Frau Bürgel dass wir einen Grundcode anfertigen sollen.
// Also einfach der Code mit den zeilen für die Highscore funktion entfernt.
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
# include <LiquidCrystal_I2C.h> // Abhängikeit vom dem Projekt um das LCD zu verwenden
# include <Wire.h> // Abhängikeit von der Library "LiquidCrystal I2C"
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
int led = 7 ; // Pin nummer der LED
int bt = 8 ; // Pin nummer des Tasters
LiquidCrystal_I2C lcd ( 0x27 , 16 , 2 ) ; // LCD klasse der Bibliothek deklarieren
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
void setup ( ) { // normale setup funktion, läuft einmal am start vom Arduino
pinMode ( led , OUTPUT ) ; // Setze pinmodus der LED auf output
pinMode ( bt , INPUT_PULLUP ) ; // Setze pinmode des Tasters auf input (pullup)
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
randomSeed ( analogRead ( A1 ) ) ; // Zufallsgenerator initialisieren mithilfe von noise von dem analogen pin A1
Serial . begin ( 9600 ) ; // Initialisiere das Serial System. Serial wird in diesem Projekt verwendet um zu debuggen, es gibt hilfreiche informationen bei runtime aus
Serial . println ( " Santhosh Justus Reaktionstester debug Information " ) ; // Basis information ausgeben in Serial
2026-02-23 10:08:56 +01:00
lcd . init ( ) ; // LCD initialisieren
2026-03-03 08:57:38 +01:00
lcd . clear ( ) ; // LCD clearen (leeren also keine zeichen, leeres display)
2026-02-23 10:08:56 +01:00
lcd . backlight ( ) ; // backlight an machen
}
2026-03-03 08:57:38 +01:00
void loop ( ) { // normale loop funktion, läuft immer wieder. Wie "while (1) {setup();}"
lcd . setCursor ( 0 , 0 ) ; // cursor links oben hinsetzen
lcd . print ( " klicke sobald " ) ; // Teil einer kleinen erklärsnachricht an den Nutzer
lcd . setCursor ( 0 , 1 ) ; // setze cursor links auf die zweite Zeile
lcd . print ( " Die LED leuchtet " ) ; // Vervollständigt die erklärsnachricht
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
int del = random ( 300 , 3000 ) ; // Bestimme wartezeit bis die LED leuchtet (zwischen 300ms und 3s)
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
Serial . println ( " -------------------------------------- " ) ; // Seperator in serial damit verschiedene "Test runden" unterschieden werden können
Serial . print ( " Wartezeit: " ) ; // debug, gebe die oben bestimmte Wartezeit in serial aus
Serial . println ( del ) ; // debug, vervollständigt die vorherige zeile
delay ( del ) ; // wir "delay"'en (get it?) das programm, also warten die obige bestimmte wartezeit
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
while ( digitalRead ( bt ) = = 0 ) { // Schleife des anti-cheats. Überprüft wird ob der knopf bereits gedrückt wird obwohl die LED nicht mal an ist als versuch zu schummeln.
Serial . println ( " Versuch zu schummeln. " ) ; // debug, informiere dass der tester/nutzer versucht hat zu schummeln.
delay ( random ( 300 , 3000 ) ) ; // wir warten zwischen einer zufälligen zeit von 300ms zu 3s bis wir die anti cheat überprüfung neu machen.
2026-02-23 10:08:56 +01:00
}
2026-03-03 08:57:38 +01:00
long t1 = millis ( ) ; // Speichere jetzige Zeit (wie lange das programm bereits läuft, reicht aber aus um die reaktionszeit zu berechnen indem wir später delta zwischen zwei punkten in der zeit berechnen)
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
digitalWrite ( led , HIGH ) ; // Bringe LED zum aufleuchten
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
while ( digitalRead ( bt ) = = 1 ) { } // warten bis der Taster gedrückt wird.
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
t1 = millis ( ) - t1 ; // hier wird delta zwischen dem zeitpunkt von vorhin und der jetzigen zeit berechnet was dann die reaktionszeit ist.
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
digitalWrite ( led , LOW ) ; // Mache LED aus
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
Serial . print ( " Ergebnis: " ) ; // debug, gebe die reaktionszeit in serial aus
Serial . println ( t1 ) ; // debug, vervollständigt die vorherige zeile
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
lcd . clear ( ) ; // cleare das LCD von der erklärsnachricht (leeres LCD)
lcd . setCursor ( 0 , 1 ) ; // Setze cursor links, zweite zeile
lcd . print ( t1 ) ; // gebe berechnete reaktionszeit (also delta) aus
lcd . print ( " ms " ) ; // gebe danach noch ms aus um das zeitformat dem nutzer mitzuteilen
lcd . setCursor ( 0 , 0 ) ; // setze cursor links, erste zeile
lcd . print ( " Reaktionszeit: " ) ; // gebe "Reaktionszeit:" auf dem LCD aus
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
delay ( 100 ) ; // warte 100ms
while ( digitalRead ( bt ) = = 0 ) { } // warten bis nicht gedrückt, da der arduino so schnell ist dass der nutzer vielleicht noch den knopf als reaktion gedrückt hält
2026-02-23 10:08:56 +01:00
while ( digitalRead ( bt ) = = 1 ) { } // warten bis gedrückt
2026-03-03 08:57:38 +01:00
delay ( 100 ) ; // warte 100ms
2026-02-23 10:08:56 +01:00
2026-03-03 08:57:38 +01:00
lcd . clear ( ) ; // cleare das LCD (also leere es)
delay ( 1000 ) ; // warte 1s
2026-02-23 10:08:56 +01:00
}