-
Notifications
You must be signed in to change notification settings - Fork 10
Description
#include <Arduino.h>
#include <Bounce2.h>
#include <Tone.h>
const int LedPins[] = {2, 3, 4, 5}; // Pinos dos leds
const int ButtonsPins[] = {6, 7, 8, 9}; // Pinos dos botões correlacionados aos leds
const int BuzzerPin[] = {10}; // Pino do Buzzer
const int StartButton[] = {11}; // Pino do botão de iniciar o jogo
const int FreqLed[] = {262, 294, 330, 349};
int Sequence[10]; // Sequência dos 10 níveis para o jogo
int Level = 0; // Nível atual
int PressedButton; // Ao pressionar botão
void setup() {
Serial.begin(9600); // Inicia a comunicação serial
// Configurar os pinos dos LEDs como saída
for (int i = 0; i < 4; i++) {
pinMode(LedPins[i], OUTPUT);
}
// Configurar os pinos dos botões como entrada com pull-up
for (int i = 0; i < 4; i++) {
pinMode(ButtonsPins[i], INPUT_PULLUP);
}
// Configurar o pino do botão de início como entrada com pull-up
pinMode(StartButton[0], INPUT_PULLUP);
// Configurar o pino do buzzer como saída
pinMode(BuzzerPin[0], OUTPUT);
}
void loop() {
IniciarJogo();
IniciarGame();
}
// Função para acender um LED com uma frequência específica
void AcenderLED(int IndiceLed, int duracao = 500) {
// Desligar todos os LEDs
for (int i = 0; i < 4; i++) {
digitalWrite(LedPins[i], LOW);
}
// Ligar o LED específico
digitalWrite(LedPins[IndiceLed], HIGH);
// Tocar a frequência associada ao LED
tone(BuzzerPin[0], FreqLed[IndiceLed]);
delay(400); // tempo associado ao som
// Desligar o buzzer
noTone(BuzzerPin[0]);
}
// Função para gerar uma sequência aleatória
void gerarSequencia() {
for (int i = 0; i < 10; i++) {
Sequence[i] = random(0, 4); // Gera um número aleatório entre 0 e 3
}
}
// Função para iniciar o jogo
void IniciarJogo() {
if (digitalRead(StartButton[0]) == HIGH) {
// Botão "Start" pressionado
gerarSequencia();
// Mensagem de depuração
Serial.println("Jogo iniciado! Sequência gerada.");
// Acender todos os LEDs e tocar um som por 2 segundos
for (int i = 0; i < 4; i++) {
AcenderLED(i, 300);
}
delay(2000);
// Desligar todos os LEDs e o buzzer
for (int i = 0; i < 4; i++) {
digitalWrite(LedPins[i], LOW);
}
noTone(BuzzerPin[0]);
// Mensagem de depuração
Serial.println("Preparando para iniciar o jogo...");
// Iniciar o jogo
Level = 0;
}
}
// Função para jogar o jogo
void IniciarGame() {
if (Level < 10) {
// Adicione mensagens de depuração
Serial.print("Aguardando botão pressionado - Nível ");
Serial.println(Level + 1);
// Mostrar a sequência atual
for (int i = 0; i <= Level; i++) {
AcenderLED(Sequence[i], 500); // Acende cada LED da sequência por 500ms
delay(300); // Pequeno atraso entre os LEDs
}
// Desligar todos os LEDs e aguardar o jogador pressionar um botão
for (int i = 0; i < 4; i++) {
digitalWrite(LedPins[i], LOW);
}
// Aguardar o jogador pressionar um botão
PressedButton = waitForButtonPress();
// Adicione mensagens de depuração
Serial.print("Botão pressionado: ");
Serial.println(PressedButton);
// Comparar a entrada do jogador com a sequência
if (PressedButton == Sequence[Level]) {
// Se o botão estiver correto, avançar para o próximo nível
Level++;
// Adicione mensagens de depuração
Serial.println("Resposta correta! Avançando para o próximo nível.");
} else {
// Se o botão estiver errado, toca um som de erro
tone(BuzzerPin[0], 1000, 500); // Toca um som de erro por 500ms
delay(1000); // Aguarda antes de reiniciar o jogo
// Adicione mensagens de depuração
Serial.println("Resposta incorreta. Reiniciando o jogo.");
// Reiniciar o jogo
Level = 0;
}
} else {
// Adicione mensagens de depuração
Serial.println("Jogador completou todos os níveis!");
// Adicione aqui o código adicional para o caso de o jogador completar todos os níveis, se necessário.
// Reiniciar o jogo
Level = 0;
}
}
// Função para esperar o jogador pressionar um botão
int waitForButtonPress() {
int BotaoPressionado = -1;
while (BotaoPressionado == -1) {
for (int i = 0; i < 4; i++) {
if (digitalRead(ButtonsPins[i]) == LOW) {
BotaoPressionado = i;
delay(100); // Debounce
while (digitalRead(ButtonsPins[i]) == LOW) {
// Aguardar até que o botão seja liberado
}
}
}
}
return BotaoPressionado;
}
Gostaria de ajuda nesse código, ele não está saindo do nível 1. Mesmo se eu acertar o nível 1, ele já para, ele não incrementa para o próximo nível. No caso queria que ele continuasse até o nível 10