const byte ledpins[4] = {17,16,15,14}; // a ordem das cores dos LEDs tem que bater com as dos botões
const byte buttonpins[4] = {2,3,6,10};
const unsigned int tones[4] = {440,330,220,110};
const byte buzzerpin = 12;
const long soundtimer = 100;
const byte tamanhomaximo = 10;
byte rodada = 0;
byte sequencia [tamanhomaximo];
void setup() {
// Serial.begin(115200);
randomSeed(analogRead(A4));
pinMode(buzzerpin, OUTPUT);
for(int i=0;i<=3;i++){
pinMode(ledpins[i], OUTPUT);
pinMode(buttonpins[i], INPUT_PULLUP);
}
}
void loop() {
for(byte i=0;i<tamanhomaximo;i++){
criasequencia();
for (byte i=0;i<=rodada;i++){
byte j = lebotao();
if (j != sequencia[i]) {
errou();
rodada = 0;
return;
//while(1);
}
}
rodada=rodada+1;
if (rodada == tamanhomaximo){
ganhou();
}
delay(800);
}
}
void criasequencia(){
sequencia[rodada] = random(4);
for (byte i=0;i<=rodada;i++){
acende_toca(sequencia[i]);
//Serial.print(sequencia[i]);
}
//Serial.println();
delay(200);
}
byte lebotao(){
byte flag = 0;
byte resultado;
while (flag == 0){
for(int i=0;i<=3;i++){
if(digitalRead(buttonpins[i])==LOW){
acende_toca(i);
resultado = i;
delay(50);
flag = 1;
}
}
}
return (resultado);
}
void acende_toca(byte i){
digitalWrite(ledpins[i],HIGH);
tone(buzzerpin,tones[i],soundtimer);
delay(300);
digitalWrite(ledpins[i],LOW);
}
void errou(){
digitalWrite(ledpins[1],HIGH);
tone(buzzerpin,70,1000);
delay(1000);
digitalWrite(ledpins[1],LOW);
delay(1000);
}
void ganhou(){
digitalWrite(ledpins[3],HIGH);
tone(buzzerpin,700,1000);
delay(1000);
digitalWrite(ledpins[3],LOW);
delay(1000);
}