Código del Proyecto
void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(speaker, OUTPUT);
lcd.begin(16,2);
delay(100);
lcd.clear();
lcd.print("Welcome To");
lcd.setCursor(0,1);
lcd.print("SIMON SAYS GAME");
delay(3000);
for (int i = 0; i < 14; i++)
{
lcd.scrollDisplayLeft();
delay(300);
}
lcd.clear();
lcd.print("Loading Game...");
for (int i = 1; i<7; i++)
{
if (i<5)
{
lightLed(i);
}
lightLed(0);
}
}
void loop()
{
lcd.clear();
lcd.print("To Start");
lcd.setCursor(0,1);
lcd.print("PRESS ANY BUTTON");
while (started == false)
{
if (getButtonPressed() > 0)
{
playTone(5);
started=true;
}
}
for (int s=0; s < 50; s++)
{
lastLevelSeq[s] = 0;
}
delay(500);
lcd.clear();
lcd.print("Select Game Mode");
while (gameMode == 0)
{
lcd.setCursor(0,1);
lcd.print("1=P 2=R 4=TGLSND");
switch (getButtonPressed())
{
case 1:
if (soundEnabled)
{
playTone(5);
}
gameMode = 1;
lcd.clear();
lcd.print("Progressive");
lcd.setCursor(0,1);
lcd.print("Mode Selected");
break;
case 2:
if (soundEnabled)
{
playTone(5);
}
gameMode = 2;
lcd.clear();
lcd.print("Random");
lcd.setCursor(0,1);
lcd.print("Mode Selected");
break;
case 4:
soundEnabled = (!soundEnabled);
lcd.setCursor(0,1);
if (soundEnabled)
{
lcd.print("Sound Mode: ON ");
playTone(5);
}
else
{
lcd.print("Sound Mode: OFF ");
}
delay(1000);
break;
}
}
delay(1000);
//Set start level
level =1;
while (gameover == false)
{
if (doLevel(level)==true)
{
lcd.clear();
lcd.print("LEVEL: "); lcd.print(level);
lcd.setCursor(0,1);
lcd.print("Completed......");
if (soundEnabled)
{
for (int i =0; i < 3; i++)
{
playTone(5);
delay(50);
}
}
else
{
delay(125);
}
delay(1000);
level++;
}
else
{
gameover = true;
}
}
if (gameover == true)
{
lcd.clear();
lcd.print("WRONG! GAME OVER");
lcd.setCursor(0,1);
lcd.print("SCORE: "); lcd.print(level-1);
if (soundEnabled)
{
for (int i = 0; i < 5; i++)
{
playTone(6);
delay(50);
}
}
else
{
delay(125);
}
}
lcd.clear();
lcd.print("Sequence");
lcd.setCursor(0,1);
lcd.print("should have been");
delay(500);
for(int s=0; s < level; s++)
{
playStep(lastLevelSeq[s]);
}
lcd.clear();
lcd.print("Your Score: "); lcd.print(level-1);
lcd.setCursor(0,1);
lcd.print("PRESS ANY BUTTON");
while (gameover == true)
{
if (getButtonPressed() > 0)
{
level = 0;
if (soundEnabled)
{
playTone(5);
}
gameover = false;
started = false;
gameMode = 0;
}
}
}
*/
int getButtonPressed()
{
int userValue = 0;
userValue = analogRead(userInput);
int buttonPressed = 0;
if (userValue > 850)
{
buttonPressed = 0;
}
if (userValue < 850)
{
buttonPressed = 4;
}
if (userValue < 800)
{
buttonPressed = 3;
}
if (userValue < 700)
{
buttonPressed = 2;
}
if (userValue < 600)
{
buttonPressed = 1;
}
return buttonPressed;
}
/*
*/
void playStep(int number)
{
lightLed(number);
if (soundEnabled)
{
playTone(number);
}
else
{
delay(100);
}
delay(250);
lightLed(0);
}
/*
*/
void lightLed(int led)
{
switch (led)
{
case 0:
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
delay(50);
break;
case 1:
digitalWrite(led1,HIGH);
break;
case 2:
digitalWrite(led2,HIGH);
break;
case 3:
digitalWrite(led3,HIGH);
break;
case 4:
digitalWrite(led4,HIGH);
break;
}
}
*/
void playTone(int tone)
{
int tones[6] = { 1000, 1250, 1500, 1750, 500, 3000};
for (long i = 0; i < 125; i++)
{
digitalWrite(speaker, HIGH);
delayMicroseconds(tones[tone-1]);
digitalWrite(speaker, LOW);
delayMicroseconds(tones[tone-1]);
}
}
*/
boolean doLevel(int level)
{
int steps[level];
int userStep = 0;
int userLength =0;
boolean levelPass = false;
boolean inProgress = true;
lcd.clear();
lcd.print("Arduino Turn");
lcd.setCursor(0,1);
lcd.print("Pay Attention");
delay(1000);
randomSeed(analogRead(0) + analogRead(1) + analogRead(2)+ analogRead(3)+analogRead(4)+analogRead(5));
if (gameMode == 1)
{
for (int s=0; s < level; s++)
{
if (level > 1)
{
steps[s] = lastLevelSeq[s];
}
steps[level-1] = (int)random(1,5);
}
}
if (gameMode == 2)
{
//Random
for (int s=0; s < level; s++)
{
steps[s] = (int)random(1,5);
}
}
for (int s=0; s < level; s++)
{
lastLevelSeq[s] = steps[s];
}
//Play the steps
for (int s=0; s < level; s++)
{
playStep(steps[s]);
}
lcd.clear();
lcd.print("LEVEL: "); lcd.print(level);
lcd.setCursor(0,1);
lcd.print("Your Turn.....");
while (inProgress)
{
userStep = getButtonPressed();
if (userStep >0)
{
userLength++;
playStep(userStep);
//lightLed(userStep);
//playTone(userStep);
//lightLed(0);
if (steps[userLength-1] == userStep)
{
if (userLength ==level)
{
inProgress = false;
levelPass = true;
}
}
else
{
inProgress = false;
levelPass = false;
}
}
}
return levelPass;
}