#include "SevSeg.h" //Die vorher hinzugefügte Library laden
SevSeg sevseg; //Ein sieben Segment Objekt initialisieren
int LEDs[] = {2, 3, 4, 5, 6, 7, 8, 9}; // LEDs als Array gespeichert
int taster[] = {23, 25, 27, 29, 31, 33, 35, 37}; // Taster als Array passend zu den LEDs gespeichert
int Display[]={22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44};
int zufall;
int b;
int a;
int c;
int falsch;
float t0;
float t1;
int d = 0;
int strafe = 0;
float Zeit[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; //"Zeit" variable wird als Array gespeichert
float Durchschnitt;
int s;
int Neigungssensor = 46;
int e = 0;
void setup() {
Serial.begin(9600); //Serieller Monitor wird gestartet
Anzeige(); // Funktion "Anzeige" wird abgespielt
pinMode(Neigungssensor, INPUT);
for (int i = 0; i < 8; i++) {
pinMode(LEDs[i], OUTPUT); //Die Pins von 2-9 werden als OUTPUT definiert
pinMode(taster[i], INPUT_PULLUP); // Die Pins 25,27,29,31,33,35,37,39 werden als INPUT_PULLUP definiert
randomSeed(analogRead(A0)); // Zufallsvariable wird vorbereitet
}
for (int g=0; g<12; g++){
pinMode(Display[g], OUTPUT );
}
for (int i = 0; i < 8; i++) { // alle LEDs gehen einmal an und wieder aus
digitalWrite(LEDs[i], HIGH);
delay(100);
digitalWrite(LEDs[i], LOW);
}
}
void loop() {
if(Neigungssensor==HIGH){
if (e==0){
for (int m=0; m<12; m++){
digitalWrite(Display[m], LOW );
}
a = random(0, 8); // eine Zufällige Zahl zwischen 0 und 7 wird generiert
digitalWrite(LEDs[a], HIGH); // Eine zufällige LED wird angeschalten
t0 = millis(); // Die aktuell vergangene Zeit wird gemessen
b = 0; // die Variable b wird als 0 gespeichert
LEDundTaster (); //die Funktion "LEDundTatser" wird abgespielt
}
}
void LEDundTaster () {
while (b == 0) { //während b=0 wird das folgende abgespielt
if (digitalRead(taster[a]) == 0) { //Wenn der Taster der zu der angeschaltenen LED gedrückt wird soll folgendes passieren
digitalWrite(LEDs[a], LOW); //Die LED wird ausgeschaltet
t1 = millis(); // Die Zeit wie lange der Arduino bereits läuft wird gemessen
Serial.println(t1 - t0); // Die differenz also die Reaktionszeit wird berechnet
Zeit[d] = (t1 - t0) / 1000; // die Reaktionszeit wird unter dem array "Zeit" an der stelle d gespeichert
Serial.print(Zeit[d]);
Serial.println("s");
Serial.println("richtig");
delay(1000);
d = d + 1; // d wird um eins größer
if (d == 10) { // Wenn d=10 wird die Funktion Fertig abgespielt
Fertig();
}
b = 1;
}
for (c = 0; c < 7; c++) {
falsch = (a + c) % 8; // Falsch sind immer die Zahlen der LEDs die nicht an sind
if (digitalRead(taster[falsch]) == 0) { // wenn ein Taster der Falschen LED gedrückt wird
delay(100); // 200 millisekunden warten
if (digitalRead(taster[falsch]) == 0) { // Der Taster wird entprellt
Serial.println("falsch");// falsch wird gedruckt
//delay(200); // 200 millisekunden warten
strafe = strafe + 1; // strafe wird um eins höher
}
}
}
}
}
void Anzeige () {
byte numDigits = 4;
byte digitPins[] = {22, 24, 26, 28};
byte segmentPins[] = {30, 32, 34, 36, 38, 40, 42, 44};
bool resistorsOnSegments = true;
byte hardwareConfig = COMMON_ANODE;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);
}
void Fertig() {
e=1;
digitalWrite(a, LOW);
delay (500);
Durchschnitt = (Zeit[0] + Zeit[1] + Zeit[2] + Zeit[3] + Zeit[4] + Zeit[5] + Zeit[6] + Zeit[7] + Zeit[8] + Zeit[9]) / 10; // Der Durchschnitt der zehn Zeiten wird berechnet
if (strafe >= 1) {
s = (Durchschnitt + strafe) * 1000; // die Strafsekunden werden aufaddiert
}
Serial.print("Deine Zeit ist");
Serial.println(s);
while (e==1) {
sevseg.setNumber(s, 3); //Hier können wir nun die gewünschte Zahl eintragen.
sevseg.refreshDisplay(); // Dieser Teil lässt die Nummer auf dem Display erscheinen
if (digitalRead(taster[0]) == 0) {
Serial.println("Yay");
d=0;
b=0;
strafe=0;
delay(1000);
e=0;
}
}
}