#define verticalPin 34
#define horizontalPin 35
#define selPin 4
#define ledAmarelo 27
#define ledVerde 13
#define ledVermelho 14
#define ledAzul 12
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(115200);
pinMode(verticalPin, INPUT);
pinMode(horizontalPin, INPUT);
pinMode(selPin, INPUT_PULLUP);
pinMode(ledVerde, OUTPUT); //LED VERDE
pinMode(ledAmarelo, OUTPUT); //LED AMARELO
pinMode(ledVermelho, OUTPUT);
pinMode(ledAzul, OUTPUT);
randomSeed(analogRead(0));
delay(3000);
}
void loop()
{
if(nivel != 21)
{
if(sortear)
{
numAtualSorteado = random(1,5);
numSorteados[nivel] = numAtualSorteado;
mostrarSequencia();
}
sortear = false;
int vertical = analogRead(verticalPin);
vertical = map(vertical,0,4095,-10,10);
int horizontal = analogRead(horizontalPin);
horizontal = map(horizontal,0,4095,-10,10);
// Serial.println("-------------------Horizontal: " + (String)horizontal);
// Serial.println("-------------------Vertical: " + (String)vertical);
// delay(300);
if(vertical == 10)
{
Serial.println("amarelo");
numAtualEscolhido = 1;
verificar(ledAmarelo, 100);
}
else if(vertical == -10)
{
Serial.println("azul");
numAtualEscolhido = 2;
verificar(ledAzul, 200);
}
else if(horizontal == 10)
{
Serial.println("verde");
numAtualEscolhido = 3;
verificar(ledVerde, 300);
}
else if(horizontal == -10)
{
Serial.println("vermelho");
numAtualEscolhido = 4;
verificar(ledVermelho, 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(ledAzul, HIGH);
Serial.println("pisca led azul");
delay(500);
digitalWrite(ledAzul, LOW);
delay(500);
break;
case 3:
digitalWrite(ledVerde, HIGH);
Serial.println("pisca led verde");
delay(500);
digitalWrite(ledVerde, LOW);
delay(500);
break;
case 4:
digitalWrite(ledVermelho, HIGH);
Serial.println("pisca led vermelho");
delay(500);
digitalWrite(ledVermelho, 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(500);
digitalWrite(pinoSaida, LOW);
delay(500);
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);
}
for(int i=0; i<=10; i++)
{
numSorteados[i] = 0;
}
reiniciar();
// noTone(12);
}
//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);
nivel = 0;
sortear = true;
verifica = 0;
}
// int joystickValue() {
// int value;
// int vertical = analogRead(verticalPin);
// vertical = map(vertical,0,4095,-10,10);
// int horizontal = analogRead(horizontalPin);
// horizontal = map(horizontal,0,4095,-10,10);
// delay(1000);
// Serial.println("-------------------Horizontal: " + (String)horizontal);
// Serial.println("-------------------Vertical: " + (String)vertical);
// delay(300);
// if(horizontal < 0){
// value = 3;
// } else if(horizontal > 0){
// value = 4;
// } else if(vertical > 0){
// value = 1;
// } else if(vertical < 0){
// value = 2;
// } else if(horizontal == 0 && vertical == 0){
// joystickValue();
// }
// return value;
// }