const int MAX_LEVEL = 100;
int sequence[MAX_LEVEL];
int gamer_sequence[MAX_LEVEL];
int level = 1;
int velocity = 1000; //speed for lvl
int ledPunkte[] = {11, 10, 9, 8, 7, 6, 5, 4};
int presses = 0; //count how many time button press
long debounceTime = 0; //für debounce
long debounce = 100;
const byte numPins = 8;
int state;
void setup() {
Serial.begin(9600);
pinMode(16, OUTPUT); //green led
pinMode(15, OUTPUT); //red led
pinMode(14, OUTPUT); //yellow led
pinMode(13, OUTPUT); //blue led
pinMode(33, INPUT_PULLUP); //button 1 green INPUT_PULLUP: LOW = HIGH and HIGH = LOW
pinMode(34, INPUT_PULLUP); //button 2 red
pinMode(35, INPUT_PULLUP); //button 3 yellow
pinMode(36, INPUT_PULLUP); //button 4 blue
attachInterrupt(digitalPinToInterrupt(33), count, FALLING);
for (int i = 0; i < 8; i++){
pinMode(ledPunkte[i], OUTPUT);
}
}
void loop() {
if (level == 1) {
generate_sequence();
for (int i = 16; i >= 13; i--) { //flashing leds sequence
digitalWrite(i, HIGH);
delay(10);
digitalWrite(i, LOW);
}
}
if (digitalRead(33) == LOW || level != 1) { //start button
show_sequence();
get_sequence();
ledBinearPunkte();
}
}
void generate_sequence() {
randomSeed(millis()); //true random
for (int i = 0; i < MAX_LEVEL; i++) {
sequence[i] = random(13, 17);
}
}
void show_sequence() {
digitalWrite(16, LOW);
digitalWrite(15, LOW);
digitalWrite(14, LOW);
digitalWrite(13, LOW);
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; //flag correct sequence
for (int i = 0; i < level; i++) {
flag = 0;
while (flag == 0) {
if (digitalRead(33) == LOW) {
digitalWrite(16, HIGH);
delay(velocity);
gamer_sequence[i] = 16;
flag = 1;
delay(200);
if (gamer_sequence[i] != sequence[i]) {
wrong_sequence();
return;
}
digitalWrite(16, LOW);
}
if (digitalRead(34) == LOW) {
digitalWrite(15, HIGH);
delay(velocity);
gamer_sequence[i] = 15;
flag = 1;
delay(200);
if (gamer_sequence[i] != sequence[i]) {
wrong_sequence();
return;
}
digitalWrite(15, LOW);
}
if (digitalRead(35) == LOW) {
digitalWrite(14, HIGH);
delay(velocity);
gamer_sequence[i] = 14;
flag = 1;
delay(200);
if (gamer_sequence[i] != sequence[i]) {
wrong_sequence();
return;
}
digitalWrite(14, LOW);
}
if (digitalRead(36) == LOW) {
digitalWrite(13, HIGH);
delay(velocity);
gamer_sequence[i] = 13;
flag = 1;
delay(200);
if (gamer_sequence[i] != sequence[i]) {
wrong_sequence();
return;
}
digitalWrite(13, LOW);
}
}
}
right_sequence();
}
void right_sequence() {
digitalWrite(16, LOW);
digitalWrite(15, LOW);
digitalWrite(14, LOW);
digitalWrite(13, LOW);
delay(250);
digitalWrite(16, HIGH);
digitalWrite(15, HIGH);
digitalWrite(14, HIGH);
digitalWrite(13, HIGH);
delay(500);
digitalWrite(16, LOW);
digitalWrite(15, LOW);
digitalWrite(14, LOW);
digitalWrite(13, LOW);
delay(500);
if (level < MAX_LEVEL) {
level++;
}
velocity -= 50; //increases difficulty
}
void wrong_sequence() {
for (int i = 0; i < 3; i++) {
digitalWrite(16, HIGH);
digitalWrite(15, HIGH);
digitalWrite(14, HIGH);
digitalWrite(13, HIGH);
delay(250);
digitalWrite(16, LOW);
digitalWrite(15, LOW);
digitalWrite(14, LOW);
digitalWrite(13, LOW);
delay(250);
}
level = 1;
velocity = 500;
}
void ledBinearPunkte(){
String binNumber = String(presses, BIN);
int binLength = binNumber.length();
if(presses <= 255){
for (int i = 0; i < binLength; i++){
if(binNumber[i] == '0') state = LOW;
if(binNumber[i] == '1') state = HIGH;
digitalWrite(ledPunkte[i], state);
}
} else {
//wenn 255 punkte geschaft
}
}
void count() {
if (millis() - debounceTime > debounce) {
presses++;
debounceTime = millis();
}
}
Loading
esp32-s2-devkitm-1
esp32-s2-devkitm-1