#define btnAmarelo 19
#define btnVerde 21
#define btnVermelho 18
#define btnAzul 5
#define ledVerde 12
#define ledAmarelo 13
#define ledAzul 26
#define ledVermelho 14
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);
pinMode(btnVerde, INPUT_PULLUP);
pinMode(btnAzul, INPUT_PULLUP);
pinMode(btnVermelho, INPUT_PULLUP);
pinMode(ledVerde, OUTPUT); //LED VERDE
pinMode(ledAmarelo, OUTPUT); //LED AMARELO
pinMode(ledVermelho, OUTPUT);
pinMode(ledAzul, OUTPUT);
randomSeed(analogRead(0));
delay(2000);
}
void loop()
{
if(nivel != 21)
{
if(sortear)
{
numAtualSorteado = random(1,5);
numSorteados[nivel] = numAtualSorteado;
mostrarSequencia();
}
sortear = false;
if(digitalRead(btnAmarelo) == 0)
{
Serial.println("Amarelo");
numAtualEscolhido = 1;
verificar(ledAmarelo, 100);
}
else if(digitalRead(btnVerde) == 0)
{
Serial.println("Verde");
numAtualEscolhido = 2;
verificar(ledVerde, 200);
}
else if(digitalRead(btnVermelho) == 0)
{
Serial.println("Vermelho");
numAtualEscolhido = 3;
verificar(ledVermelho, 300);
}
else if(digitalRead(btnAzul) == 0)
{
Serial.println("Azul");
numAtualEscolhido = 4;
verificar(ledAzul, 400);
}
}
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(ledAmarelo, HIGH);
Serial.println("pisca led amarelo");
delay(500);
digitalWrite(ledAmarelo, LOW);
delay(500);
break;
case 2:
digitalWrite(ledVerde, HIGH);
Serial.println("pisca led verde");
delay(500);
digitalWrite(ledVerde, LOW);
delay(500);
break;
case 3:
digitalWrite(ledVermelho, HIGH);
Serial.println("pisca led vermelho");
delay(500);
digitalWrite(ledVermelho, LOW);
delay(500);
break;
case 4:
digitalWrite(ledAzul, HIGH);
Serial.println("pisca led azul");
delay(500);
digitalWrite(ledAzul, LOW);
delay(500);
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;
Serial.println("Nivel: " + (String)nivel);
}
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(ledAmarelo, HIGH);
digitalWrite(ledVermelho, HIGH);
digitalWrite(ledAzul, HIGH);
digitalWrite(ledVerde, HIGH);
delay(100);
digitalWrite(ledAmarelo, LOW);
digitalWrite(ledVermelho, LOW);
digitalWrite(ledAzul, LOW);
digitalWrite(ledVerde, 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(ledAmarelo, HIGH);
digitalWrite(ledVermelho, HIGH);
digitalWrite(ledAzul, HIGH);
digitalWrite(ledVerde, HIGH);
delay(1000);
digitalWrite(ledAmarelo, LOW);
digitalWrite(ledVermelho, LOW);
digitalWrite(ledAzul, LOW);
digitalWrite(ledVerde, LOW);
delay(1000);
Serial.println("Reiniciando...");
nivel = 0;
sortear = true;
verifica = 0;
}