#include "pitches.h"
//אדום צהוב ירוק כחול
const uint8_t ledPins []={3,1,9,5};
const uint8_t buttonPins []={2,0,8,4};
#define SPEAKER_PIN 7
#define MAX_GAME_LENGTH 100
const uint8_t gameTones[]={NOTE_G3, NOTE_C4, NOTE_E4, NOTE_G5};
uint8_t gameSequence[MAX_GAME_LENGTH]={0};
int gameIndex =0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Hello, start play");
for(int i=0;i<4;i++){
pinMode(ledPins[i], OUTPUT);
pinMode(buttonPins[i], INPUT_PULLUP);
}
pinMode(SPEAKER_PIN, OUTPUT);
randomSeed(analogRead(6));
}
void lightLedAndPlayTone(uint8_t led){
digitalWrite(ledPins[led], HIGH);
tone(SPEAKER_PIN,gameTones[led]);
delay(300);
digitalWrite(ledPins[led], LOW);
noTone(SPEAKER_PIN);
}
void playSequence(){
for(int i=0;i<gameIndex;i++)
{
lightLedAndPlayTone(gameSequence[i]);
delay(50);
}
}
int readButton(){
while(1){
for(int i=0;i<4;i++){
if (digitalRead(buttonPins[i])==0)
return i;
}
delay(1);
}
return -1;
}
void gameOver(){
Serial.print("game over your level is: ");
Serial.println(gameIndex);
gameIndex=0;
delay(200);
tone(SPEAKER_PIN,NOTE_DS5);
delay(300);
tone(SPEAKER_PIN,NOTE_D5);
delay(300);
tone(SPEAKER_PIN,NOTE_CS5);
delay(300);
noTone(SPEAKER_PIN);
for(int i=0;i<10;i++){
for(int j=-10;j<10;j++){
tone(SPEAKER_PIN,NOTE_C5+j);
delay(6);
}
}
noTone(SPEAKER_PIN);
delay(500);
}
bool checkUserSequence(){
for(int i=0;i<gameIndex;i++)
{
uint8_t led=gameSequence[i];
int button= readButton();
if(led!=button)
return false;
lightLedAndPlayTone(led);
delay(500);
}
return true;
}
void playLevelUpSound(){
tone(SPEAKER_PIN,NOTE_E4);
delay(150);
tone(SPEAKER_PIN,NOTE_G4);
delay(150);
tone(SPEAKER_PIN,NOTE_E5);
delay(150);
tone(SPEAKER_PIN,NOTE_C5);
delay(150);
tone(SPEAKER_PIN,NOTE_D5);
delay(150);
tone(SPEAKER_PIN,NOTE_B5);
delay(150);
noTone(SPEAKER_PIN);
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
if(gameIndex>=MAX_GAME_LENGTH)
gameIndex=MAX_GAME_LENGTH-1;
uint8_t random_led=random(0,4);
gameSequence[gameIndex++]=random_led;
playSequence();
if(checkUserSequence()==false)
gameOver();
delay(300);
if(gameIndex>0)
playLevelUpSound();
delay(300);
// Serial.println(checkUserSequence());
}