// 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. #include // Abhängikeit vom dem Projekt um das LCD zu verwenden #include // Abhängikeit von der Library "LiquidCrystal I2C" 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 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) 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 lcd.init(); // LCD initialisieren lcd.clear(); // LCD clearen (leeren also keine zeichen, leeres display) lcd.backlight(); // backlight an machen } 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 int del = random(300, 3000); // Bestimme wartezeit bis die LED leuchtet (zwischen 300ms und 3s) 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 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. } 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) digitalWrite(led, HIGH); // Bringe LED zum aufleuchten while (digitalRead(bt)==1) {} // warten bis der Taster gedrückt wird. t1 = millis()-t1; // hier wird delta zwischen dem zeitpunkt von vorhin und der jetzigen zeit berechnet was dann die reaktionszeit ist. digitalWrite(led, LOW); // Mache LED aus Serial.print("Ergebnis: "); // debug, gebe die reaktionszeit in serial aus Serial.println(t1); // debug, vervollständigt die vorherige zeile 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 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 while (digitalRead(bt)==1) {} // warten bis gedrückt delay(100); // warte 100ms lcd.clear(); // cleare das LCD (also leere es) delay(1000); // warte 1s }