int Knoppen[] = {2, 3, 4, 5, 6, 7, 8, 9, 10};
int Leds[] = {23, 25, 27, 29, 31, 33, 35, 37, 39};
int Waardes[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
int Volgorde[999];
int levens;
long index; // laatste positie als een getal van de Volgorde
long score;
long huidigPositie;
long beginTijd;
long huidig;
long extraDelay;
bool herspeeld = false;
int hoeveelLampen;
long blinkTijd;
long reactieTijd;
void setup() {
Serial.begin(9600);
for (int i = 0; i < 9; i++) {
pinMode(Knoppen[i], INPUT);
pinMode(Leds[i], OUTPUT);
}
}
void loop() {
if (levens == 0) { // dood
bool lampStaat = false;
beginTijd = millis();
if (herspeeld == false) {
Serial.println("Click op een toets om te starten!");
}
else {
Serial.println("Click op een toets om opnieuw te starten.");
}
Serial.println();
Serial.println("mogelijk opties (voer ze in als \"Optienummer waarde\"):");
Serial.println("1) Hoeveelheid toegevoegde lampen (normaal 1)");
Serial.println("2) Hoelang de lampen aan blinken (normaal 500ms)");
Serial.println("3) Hoeveel seconden je bij krijgt per knop (normaal 2000ms)");
String input;
String data;
hoeveelLampen = 1;
blinkTijd = 500;
reactieTijd = 2000;
while (levens == 0) { // input check + lamp blink
if (Serial.available()) {
input = Serial.readStringUntil(10);
for (int i = 2; i < input.length(); i ++) {
data += input[i];
}
}
if (input != "") {
Serial.println();
if (input.substring(0,1) == "1") {
Serial.print("Hoeveelheden lampen = ");
hoeveelLampen = data.toInt();
}
else if (input.substring(0,1) == "2") {
Serial.print("Knipper tijd = ");
blinkTijd = data.toInt();
}
else if (input.substring(0,1) == "3") {
Serial.print("Reactie tijd/knop = ");
reactieTijd = data.toInt();
}
else {
Serial.print("Fout invoer, je moet beginnen met de optienummer een spatie en de waarde");
}
Serial.print(data);
data = "";
input = "";
}
huidig = millis();
for (int i = 0; i < 9; i++) {
if (i % 2 == 0) {
if (lampStaat == true) {
digitalWrite(Leds[i], HIGH);
}
else {
digitalWrite(Leds[i], LOW);
}
}
Waardes[i] = digitalRead(Knoppen[i]);
if (Waardes[i] == HIGH) { // spel heractiveren
Serial.println();
if (hoeveelLampen != 1 || blinkTijd != 500 || reactieTijd != 2000) {
Serial.println();
}
score = 0;
levens = 3;
index = 0;
huidigPositie = 0;
}
}
if (huidig > beginTijd) {
if (lampStaat == true) {
lampStaat = false;
}
else {
lampStaat = true;
}
beginTijd += 750;
}
}
// startup
randomSeed(analogRead(0));
for (int i = 0; i < 9; i++) {
digitalWrite(Leds[i], LOW);
}
for (int i = 0; i < 9; i++) {
digitalWrite(Leds[i], HIGH);
delay(150);
}
delay(1000);
for (int i = 0; i < 9; i++) {
digitalWrite(Leds[i], LOW);
}
delay(1000);
}
else { // levend
if (huidigPositie != index) { // niet einde
volgordeTonen();
beginTijd = millis();
while (huidigPositie != index && levens != 0) {
huidig = millis();
if (huidig < beginTijd + extraDelay + 3000) { // als je nog tijd hebt
for (int i = 0; i < 9; i++) {
Waardes[i] = digitalRead(Knoppen[i]);
if (Waardes[i] == HIGH) {
digitalWrite(Leds[i], HIGH);
delay(500);
digitalWrite(Leds[i], LOW);
if (i == Volgorde[huidigPositie]) {
huidigPositie += 1;
}
else {
verliesLeven(false);
}
while (Waardes[i] == HIGH) {
Waardes[i] = digitalRead(Knoppen[i]);
delay(50);
}
delay (50);
}
}
}
else { // tijd gepaseert
verliesLeven(true);
}
}
}
else {// op het einde van de reeks
score += 1;
for (int i = 0; i < hoeveelLampen; i++) {
Volgorde[index] = random(9);
index += 1;
extraDelay += reactieTijd;
}
}
}
}
void volgordeTonen() {
huidigPositie = 0;
for (long i = 0; i < index; i++) {
int huidigLed = Leds[Volgorde[i]];
digitalWrite(huidigLed, HIGH);
delay(blinkTijd);
digitalWrite(huidigLed, LOW);
delay(500);
}
}
void verliesLeven(bool tijdTeKort) {
if (tijdTeKort == true) {
Serial.println("Duurde te lang! -1 ❤️");
}
else {
Serial.println("Foute knop! -1 ❤️");
}
levens -= 1;
if (levens != 0) {
for (int j = 0; j < 3; j++) {
for (int i = 0; i < 9; i++) {
if (i % 2 == 0) {
digitalWrite(Leds[i], HIGH);
}
}
delay(500);
for (int i = 0; i < 9; i++) {
if (i % 2 == 0) {
digitalWrite(Leds[i], LOW);
}
}
delay(500);
}
volgordeTonen();
beginTijd = millis();
}
else {
Serial.println("\n\n\Je eindscore is: " + String(score-1));
herspeeld = true;
}
}