#define btnAmarelo 19
#define btnVerde 21
#define ledVer 12
#define ledAm 13
int numAtualSorteado = 0;
int numSorteados[20];
int numAtualEscolhido = 0;
int numEscolhidos[20];
int nivel = 0;
int verifica = 0;
bool sortear = true;
void setup()
{
Serial.begin(9600);
pinMode(btnAmarelo, INPUT_PULLUP); //BOTAO AMARELO
pinMode(btnVerde, INPUT_PULLUP); //BOTAO VERDE
pinMode(ledVer, OUTPUT); //LED VERDE
pinMode(ledAm, OUTPUT); //LED AMARELO
randomSeed(analogRead(0));
delay(2000);
}
void loop()
{
if(nivel != 21)
{
if(sortear)
{
numAtualSorteado = random(1,3);
numSorteados[nivel] = numAtualSorteado;
mostrarSequencia();
}
sortear = false;
if(digitalRead(btnAmarelo) == 0)
{
Serial.println("Amarelo");
numAtualEscolhido = 1;
verificar(ledAm, 100);
}
else if(digitalRead(btnVerde) == 0)
{
Serial.println("Verde");
numAtualEscolhido = 2;
verificar(ledVer, 200);
}
}
else
{
reiniciar();
}
}
//SEQUÊNCIA ATUAL - MOSTRA A SEQÊNCIA ATUAL COM UMA PAUSA ENTRE A SEQUÊNCIA E COM EFEITO SONORO PARA CADA LED
void mostrarSequencia()
{
for(int i=0; i<=nivel; i++)
{
switch(numSorteados[i])
{
case 1:
digitalWrite(ledAm, HIGH);
Serial.println("pisca led amarelo");
delay(500);
digitalWrite(ledAm, LOW);
delay(200);
break;
case 2:
digitalWrite(ledVer, HIGH);
Serial.println("pisca led verde");
delay(500);
digitalWrite(ledVer, LOW);
delay(200);
break;
}
}
}
//VERIFICA A ESCOLHA - COMPARA A ESCOLHA COM O NÚMERO SORTEADO NA SEQUÊNCIA
void verificar(int pinoSaida, int som)
{
if(numAtualEscolhido == numSorteados[verifica])
{
digitalWrite(pinoSaida, HIGH);
delay(300);
digitalWrite(pinoSaida, LOW);
delay(300);
if(verifica == nivel)
{
nivel++;
verifica = 0;
sortear = true;
}
else
{
verifica++;
}
}
else
escolhaErrada();
}
//ESCOLHA DA SEQUÊNCIA ERRADA - FAZ UM EFEITO NOS LEDS E EFEITOS SONOROS
void escolhaErrada()
{
for(int i=0; i<=3; i++)
{
digitalWrite(ledAm, HIGH);
digitalWrite(ledVer, HIGH);
delay(100);
digitalWrite(ledAm, LOW);
digitalWrite(ledVer, LOW);
delay(100);
}
// noTone(12);
for(int i=0; i<=10; i++)
{
numSorteados[i] = 0;
}
reiniciar();
}
//REINICIA O JOGO - SETA TODAS AS VARIÁVEIS PARA O ESTADO INICIAL E FAZ UM EFEITO COM OS LEDS
void reiniciar()
{
digitalWrite(ledAm, HIGH);
digitalWrite(ledVer, HIGH);
delay(1000);
digitalWrite(ledAm, LOW);
digitalWrite(ledVer, LOW);
delay(1000);
nivel = 0;
sortear = true;
verifica = 0;
}