reaktionstesterclean.ino aktualisiert

This commit is contained in:
2026-04-13 19:24:21 +02:00
parent 1dd70ac951
commit 34520d1ebf

View File

@@ -1,105 +1,80 @@
// Copyright Santhosh Venugopal™℗®© & Justus Wolff™℗®© // Copyright Santhosh Venugopal™℗®© & Justus Wolff™℗®©
#include <LiquidCrystal_I2C.h> #include <LiquidCrystal_I2C.h>
#include <Wire.h> #include <Wire.h>
uint8_t led = 7; // pin Nummern für jwl. Komponente uint8_t led = 7; // pin Nummern für jwl. Komponente
uint8_t bt = 8; uint8_t bt = 8;
uint32_t highscore = -1; // wer hier einen bitoverflow hinbekommt verdient den respekt uint32_t highscore = -1; // wer hier einen bitoverflow hinbekommt verdient den respekt
uint8_t godmode = 0; LiquidCrystal_I2C lcd(0x27,16,2); // LCD deklarieren
LiquidCrystal_I2C lcd(0x27,16,2); // LCD deklarieren
void setup() {
void setup() { // put your setup code here, to run once:
// put your setup code here, to run once: pinMode(led, OUTPUT);
pinMode(led, OUTPUT); pinMode(bt, INPUT_PULLUP); // pinmodes setzen (selbsterklärend)
pinMode(bt, INPUT_PULLUP); // pinmodes setzen (selbsterklärend)
randomSeed(analogRead(A1)); // Zufallsgenerator initialisieren
randomSeed(analogRead(A1)); // Zufallsgenerator initialisieren Serial.begin(9600);
Serial.begin(9600); Serial.println("Santhosh Justus Reaktionstester debug Information");
Serial.println("Santhosh Justus Reaktionstester debug Information"); lcd.init(); // LCD initialisieren
lcd.init(); // LCD initialisieren lcd.clear();
lcd.clear(); lcd.backlight(); // backlight an machen
lcd.backlight(); // backlight an machen }
}
void loop() {
void handlecmds() { lcd.setCursor(0, 0);
if (!Serial.available()) {return;} lcd.print("klicke sobald");
lcd.setCursor(0, 1);
String cmd = Serial.readString(); lcd.print("Die LED leuchtet"); // gebrauchsanleitung für tester
if (cmd == "godmode enable\n") {
godmode = 1; uint16_t del = random(300, 3000); // Wartezeit für das Leuchten der LED
Serial.println("Okidoki, du citri!");
} Serial.println("--------------------------------------"); // extra Informationen im seriellen Monitor
if (cmd == "godmode disable\n") { Serial.print("Wartezeit:"); // debug
godmode = 0; Serial.println(del); // debug
Serial.println("Whad de fug, bong ding ow"); delay(del); // warten
}
if (cmd == "ich bin ein cheater\n") { while (digitalRead(bt)==0) { // warten bis nicht mehr gedrückt
godmode = 2; Serial.println("Versuch zu schummeln."); // debug
Serial.println(">:("); delay(random(300, 3000)); // zufällige Zeit warten bis zur nächsten Überprüfung
} }
if (cmd == "ich bin KEIN cheater\n") { uint32_t t1 = millis();
godmode = 0;
Serial.println("aight bet"); digitalWrite(led, HIGH);
}
} while (digitalRead(bt)==1) {} // warten bis gedrückt
void loop() { t1 = millis()-t1; // berechnen der reaktionszeit
handlecmds();
lcd.setCursor(0, 0); digitalWrite(led, LOW);
lcd.print("klicke sobald");
lcd.setCursor(0, 1); Serial.print("Ergebnis: "); // debug
lcd.print("Die LED leuchtet"); // gebrauchsanleitung für tester Serial.println(t1); // debug
uint16_t del = random(300, 3000); // Wartezeit für das Leuchten der LED lcd.clear(); // anzeigen der reaktionszeit
lcd.setCursor(0, 1);
Serial.println("--------------------------------------"); // extra Informationen im seriellen Monitor lcd.print(t1);
Serial.print("Wartezeit:"); // debug lcd.print("ms");
Serial.println(del); // debug lcd.setCursor(0, 0);
delay(del); // warten lcd.print("Reaktionszeit:");
while (digitalRead(bt)==0 || godmode == 2) { // warten bis nicht mehr gedrückt delay(100);
handlecmds(); while (digitalRead(bt)==0) {} // warten bis nicht gedrückt
Serial.println("Versuch zu schummeln."); // debug while (digitalRead(bt)==1) {} // warten bis gedrückt
delay(random(300, 3000)); // zufällige Zeit warten bis zur nächsten Überprüfung delay(100);
}
uint32_t t1 = millis(); if (t1 < highscore) { // highscore logik, zeigt "highscore" falls Reaktionszeit am niedrigsten ist bzw. < highscore
highscore = t1;
digitalWrite(led, HIGH); Serial.println("Highscore");
lcd.clear();
while (digitalRead(bt)==1 && godmode == 0) {} // warten bis gedrückt lcd.setCursor(0,0);
lcd.print("--HIGHSCORE!!!--");
t1 = millis()-t1; // berechnen der reaktionszeit lcd.setCursor(0,1);
lcd.print("Zeit:");
digitalWrite(led, LOW); lcd.print(t1);
Serial.println("wartet bis drücken");
Serial.print("Ergebnis: "); // debug while (digitalRead(bt)==1) {} // warten bis gedrückt
Serial.println(t1); // debug }
lcd.clear(); // cleanup
lcd.clear(); // anzeigen der reaktionszeit delay(1000);
lcd.setCursor(0, 1); }
lcd.print(t1);
lcd.print("ms");
lcd.setCursor(0, 0);
lcd.print("Reaktionszeit:");
delay(100);
while (digitalRead(bt)==0) {} // warten bis nicht gedrückt
while (digitalRead(bt)==1) {} // warten bis gedrückt
delay(100);
if (t1 < highscore) { // highscore logik, zeigt "highscore" falls Reaktionszeit am niedrigsten ist bzw. < highscore
highscore = t1;
Serial.println("Highscore");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("--HIGHSCORE!!!--");
lcd.setCursor(0,1);
lcd.print("Zeit:");
lcd.print(t1);
Serial.println("wartet bis drücken");
while (digitalRead(bt)==1) {} // warten bis gedrückt
}
lcd.clear(); // cleanup
delay(1000);
}