#define LED1 2
#define LED2 3
#define LED3 4
#define LED4 5
#define BTN1 6
#define BTN2 7
#define BTN3 8
#define BTN4 9
#define BUZZER 10
#define MAX_LEVEL 100
int sequence[MAX_LEVEL];
int userInput[MAX_LEVEL];
int level = 0;
void setup() {
Serial.begin(9600);
int leds[] = {LED1, LED2, LED3, LED4};
for(int i=0;i<4;i++){
pinMode(leds[i], OUTPUT);
digitalWrite(leds[i], LOW);
}
int buttons[] = {BTN1, BTN2, BTN3, BTN4};
for(int i=0;i<4;i++){
pinMode(buttons[i], INPUT_PULLUP);
}
pinMode(BUZZER, OUTPUT);
randomSeed(analogRead(0)); // случайная последовательность
Serial.println("Simon Game Ready!");
}
void playTone(int pin, int frequency, int duration){
tone(pin, frequency, duration);
delay(duration);
noTone(pin);
}
void flashLED(int led){
digitalWrite(led, HIGH);
playTone(BUZZER, 1000, 200);
delay(200);
digitalWrite(led, LOW);
delay(100);
}
int readButton(){
while(true){
if(digitalRead(BTN1) == LOW) return 0;
if(digitalRead(BTN2) == LOW) return 1;
if(digitalRead(BTN3) == LOW) return 2;
if(digitalRead(BTN4) == LOW) return 3;
}
}
void playSequence(int lvl){
for(int i=0; i<lvl; i++){
int ledNum = sequence[i];
flashLED(LED1 + ledNum); // LED1=2, LED2=3, ...
}
}
void loop() {
// Генерация новой последовательности
sequence[level] = random(0,4);
Serial.print("Level: ");
Serial.println(level+1);
// Воспроизведение последовательности
playSequence(level+1);
// Ввод пользователя
for(int i=0;i<=level;i++){
int btn = readButton();
if(btn != sequence[i]){
// Ошибка
Serial.println("Wrong!");
for(int j=0;j<3;j++){
playTone(BUZZER, 200, 200); // звук ошибки
delay(100);
}
level = 0; // сброс
return;
} else {
flashLED(LED1 + btn); // подтверждаем ввод пользователя
}
}
level++; // следующий уровень
delay(500);
}