const int MAX_LEVEL = 100;
int sequence[MAX_LEVEL];
int your_sequence[MAX_LEVEL];
int level = 1;
int velocity = 1000;
void setup() {
pinMode(34, INPUT);
pinMode(35, INPUT);
pinMode(32, INPUT);
pinMode(25, INPUT);
pinMode(23, OUTPUT);
pinMode(22, OUTPUT);
pinMode(21, OUTPUT);
pinMode(19, OUTPUT);
digitalWrite(23, LOW);
digitalWrite(22, LOW);
digitalWrite(21, LOW);
digitalWrite(19, LOW);
}
void loop() {
if (level == 1) {
generate_sequence(); //generiert eine Sequenz
}
if (digitalRead(25) == LOW || level != 1) {
show_sequence();
get_sequence();
}
}
void show_sequence() {
for (int i = 0; i < level; i++) {
digitalWrite(sequence[i], HIGH);
delay(velocity);
digitalWrite(sequence[i], LOW);
delay(200);
}
}
void get_sequence() {
int flag = 0; //this flag indicates if the sequence is correct
for (int i = 0; i < level; i++) {
flag = 0;
while (flag == 0) {
if (digitalRead(34) == LOW) {
your_sequence[i] = 19;
digitalWrite(19, HIGH);
delay(200);
digitalWrite(19, LOW);
flag = 1;
} else if (digitalRead(35) == LOW) {
your_sequence[i] = 21;
digitalWrite(21, HIGH);
delay(200);
digitalWrite(21, LOW);
flag = 1;
} else if (digitalRead(32) == LOW) {
your_sequence[i] = 22;
digitalWrite(22, HIGH);
delay(200);
digitalWrite(22, LOW);
flag = 1;
} else if (digitalRead(25) == LOW) {
your_sequence[i] = 23;
digitalWrite(23, HIGH);
delay(200);
digitalWrite(23, LOW);
flag = 1;
}
}
if (your_sequence[i] != sequence[i]) {
wrong_sequence();
return;
}
}
right_sequence();
}
void generate_sequence() {
randomSeed(millis()); //in this way is really random!!!
for (int i = 0; i < MAX_LEVEL; i++) {
sequence[i] = random(19, 24); // random between 19 (inclusive) and 24 (exclusive)
}
}
void wrong_sequence() {
for (int i = 0; i < 3; i++) {
digitalWrite(23, HIGH);
digitalWrite(22, HIGH);
digitalWrite(21, HIGH);
digitalWrite(19, HIGH);
delay(250);
digitalWrite(23, LOW);
digitalWrite(22, LOW);
digitalWrite(21, LOW);
digitalWrite(19, LOW);
}
level = 1;
velocity = 1000;
}
void right_sequence() {
digitalWrite(23, LOW);
digitalWrite(22, LOW);
digitalWrite(21, LOW);
digitalWrite(19, LOW);
delay(250);
digitalWrite(23, HIGH);
digitalWrite(22, HIGH);
digitalWrite(21, HIGH);
digitalWrite(19, HIGH);
delay(500);
digitalWrite(23, LOW);
digitalWrite(22, LOW);
digitalWrite(21, LOW);
digitalWrite(19, LOW);
if (level < MAX_LEVEL)
level++;
velocity -= 50; //increase difficulty
}