Files
NWT-projekt/reaktionstesterclean.ino
2026-03-03 08:57:38 +01:00

106 lines
3.0 KiB
C++

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