#define SPEAKER_PIN 2
int gameArray[] = {13, 12, 11, 11, 12 ,13 ,13, 12, 11, 11, 11, 12, 13 };
int gameStepCount = 1;
int gameStep = 0;
int wait_gamer_step =0 ;
void setup() {
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
pinMode(5, OUTPUT);
}
void loop() {
boolean keyDown13 = digitalRead(13);
boolean keyDown12 = digitalRead(12);
boolean keyDown11 = digitalRead(11);
if (wait_gamer_step == 0)
{
// Цикл по массиву до gameStepCount
for (int i = 0; i < gameStepCount; i++)
{
play_sound(gameArray[i]);
}
wait_gamer_step = 1 ;
} else
{
for (int i = 1; i <= 3; i++) // перебор кнопок
{
int keyPin = i + 10;
boolean keyUp = digitalRead(keyPin);
if (keyUp) // если нажата
{
if (keyPin == gameArray[gameStep]) // нажата правильная кнопка
{
play_sound(gameArray[gameStep]);
gameStep ++ ;
}
else
{ // поражение
play_loser() ;
gameStepCount = 1 ; // возврат на первый уровень ;
gameStep = 0;
wait_gamer_step = 0 ;
}
if (gameStep >= gameStepCount) // условие победы
{
play_win() ;
gameStepCount ++ ; // следующий уровень
gameStep = 0;
wait_gamer_step = 0 ;
}
}
}
}
}
void play_sound(int keyDown) {
if (keyDown == 11) {
digitalWrite(5, HIGH);
tone(SPEAKER_PIN, 330); //Ми
delay(500);
digitalWrite(5, LOW);
noTone(SPEAKER_PIN);
delay(500);
}
if (keyDown == 12) {
digitalWrite(6, HIGH);
tone(SPEAKER_PIN, 294); // Ре
delay(500);
digitalWrite(6, LOW);
noTone(SPEAKER_PIN);
delay(500);
}
if (keyDown == 13) {
digitalWrite(7, HIGH);
tone(SPEAKER_PIN, 262); // До
delay(500);
digitalWrite(7, LOW);
noTone(SPEAKER_PIN);
delay(500);
}
}
void play_loser()
{
delay(500);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
tone(SPEAKER_PIN, 262);
delay(500);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
noTone(SPEAKER_PIN);
delay(500);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
tone(SPEAKER_PIN, 262);
delay(500);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
noTone(SPEAKER_PIN);
delay(500);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
tone(SPEAKER_PIN, 262);
delay(500);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
noTone(SPEAKER_PIN);
delay(500);
delay(500);
}
void play_win()
{
delay(500);
digitalWrite(5, HIGH);
tone(SPEAKER_PIN, 1568);
delay(100);
digitalWrite(5, LOW);
noTone(SPEAKER_PIN);
delay(100);
digitalWrite(6, HIGH);
tone(SPEAKER_PIN, 1568);
delay(100);
digitalWrite(6, LOW);
noTone(SPEAKER_PIN);
delay(100);
digitalWrite(7, HIGH);
tone(SPEAKER_PIN, 1568);
delay(100);
digitalWrite(7, LOW);
noTone(SPEAKER_PIN);
delay(100);
delay(500);
}