// C++ code
//
int nivel = 1;
int led[4];
int botao[4];
int buzzer = 12;
int notasMusica = 80;
int notaAtual = 0;
int musica[] = {294, 294, 587, 440, 415, 392, 349, 294, 349, 392,
262, 262, 587, 440, 415, 392, 349, 294, 349, 392,
233, 233, 587, 440, 415, 392, 349, 294, 349, 392,
220, 220, 587, 440, 415, 392, 349, 294, 349, 392,
294, 294, 587, 440, 415, 392, 349, 294, 349, 392,
262, 262, 587, 440, 415, 392, 349, 294, 349, 392,
233, 233, 587, 440, 415, 392, 349, 294, 349, 392,
220, 220, 587, 440, 415, 392, 349, 294, 349, 392};
int duracaoNotas[] = {100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
100, 100, 100, 100, 100, 100, 100, 100, 100, 100};
bool jogada = false;
bool vitoria;
bool estadoled = 0;
void setup()
{
//CONFIGURANDO TIMER 1 DO ARDUINO
noInterrupts();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = (duracaoNotas[notaAtual]*15625)/1000;
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS12) | (1 << CS10);
TIMSK1 |= (1 << OCIE1A);
interrupts();
pinMode(buzzer, OUTPUT);
//CONFIGURANDO BOTOES E LEDS
for(int i = 0; i<4; i++){
botao[i] = i + 2;
led[i] = i + 8;
pinMode(led[i], OUTPUT);
digitalWrite(led[i], LOW);
pinMode(botao[i], INPUT_PULLUP);
}
randomSeed(analogRead(0));
}
//FUNÇÃO DA MÚSICA
ISR(TIMER1_COMPA_vect){
tone(buzzer, musica[notaAtual], duracaoNotas[notaAtual]);
notaAtual++;
if(notaAtual >= notasMusica){
notaAtual = 0;
}
OCR1A = (duracaoNotas[notaAtual]*15625)/1000;
}
void loop()
{
int ordemNivel[nivel];
int ordemJogador[nivel];
vitoria = false;
//JOGO DA MEMÓRIA COM LEDS
//GERA ORDEM
for(int n = 0; n<nivel; n++){
ordemNivel[n] = random(0, 4);
}
//MOSTRA A ORDEM AO JOGADOR
for(int n = 0; n<nivel; n++){
estadoled = !estadoled;
digitalWrite(led[ordemNivel[n]], estadoled);
delay(500);
estadoled = !estadoled;
digitalWrite(led[ordemNivel[n]], estadoled);
delay(500);
}
//COMEÇA JOGADA
for(int n = 0; n<nivel; n++){
while(jogada == false){
//PERMITE LIGAR OS LEDS COM OS BOTÕES
for(int i = 0; i<4; i++){
if(digitalRead(botao[i]) == LOW){
estadoled = !estadoled;
digitalWrite(led[i], estadoled);
delay(500);
estadoled = !estadoled;
digitalWrite(led[i], estadoled);
//REGISTRA JOGADA
ordemJogador[n] = i;
jogada = true;
}
}
}
if(ordemJogador[n] == ordemNivel[n]){
jogada = false;
vitoria = true;
}else{
jogada = false;
vitoria = false;
break;
}
}
if(vitoria == true){
nivel++;
}
delay(3000);
}