/*
Arduino | coding-help
Code help
paraquedista2_ — 10/31/24 at 1:48 PM
this is my circuit (code modified for pin numbers)
*/
//Definir pinos para o botao e leds
const int buttonPin = 5;
const int ledPin7 = 6;
const int ledPin8 = 7;
const int ledPin9 = 8;
const int ledPin10 = 9;
const int ledPin11 = 10;
const int ledPin12 = 11;
const int ledPin13 = 12;
//Variaveis para controlar o tempo em que o botao é pressionado e o estado do botao
unsigned long tempopressionado;
bool botaocarregado = false;
//variaveis para o estado do jogo e leds
bool comecoujogo = false; //indica se o jogo começou
bool ledspiscando = false; //indica se os leds estao a piscar
unsigned long delayLED = 500; //Variavel para guardar o intervalo de tempo entre os leds acenderem e apagarem, meio segundo, 500ms
unsigned long tempoultimoledligado = 0; //guarda o ultimo tempo em que o led foi ligado
int ligarLed = -1; //armazena o numero do led que esta acesso (uso o -1 pois nao ha nenhum pino -1, logo o programa nao se confunde)
bool estadodoled = false; //indica se um led esta acesso
int piscadas = 0; //conta as vezes que os leds piscam
//variaveis para o debouncing
unsigned long debouncingdelay = 50; //tempo para evitar leituras inconsistentes do botao
unsigned long ultimotoquebotao = 0; //guarda o ultimo tempo que o botao foi pressionado
//Declarar as funçoes
void comecarjogo();
void reiniciarjogo();
void setup() {
pinMode(ledPin7, OUTPUT);
pinMode(ledPin8, OUTPUT);
pinMode(ledPin9, OUTPUT);
pinMode(ledPin10, OUTPUT);
pinMode(ledPin11, OUTPUT);
pinMode(ledPin12, OUTPUT);
pinMode(ledPin13, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
//Lê o estado do botao e inverte O HIGH para LOW e vice versa, pois está em pull up
int buttonState = !digitalRead(buttonPin);
//Se o botao esta pressionado e se a variavel botaocarregado é falsa
if (buttonState == HIGH && !botaocarregado && (millis() - ultimotoquebotao > debouncingdelay)) {
tempopressionado = millis(); //regista o momento em que o botao é pressionado
botaocarregado = true; //o botao está pressionado
ultimotoquebotao = millis();
}
//Se o botao está pressionado e se a variavel botaopressionado é verdadeira e se o tempo que o botao esta carregado é maior ou igual a 2 segundos
if (buttonState == HIGH && botaocarregado && (millis() - tempopressionado >= 2000)) {
//se o jogo ainda nao comecou
if (!comecoujogo) {
int piscadas = 0;
while (piscadas < 3) { //piscar 3 vezes os leds
//acende os leds
digitalWrite(ledPin7, HIGH);
digitalWrite(ledPin8, HIGH);
digitalWrite(ledPin9, HIGH);
digitalWrite(ledPin10, HIGH);
digitalWrite(ledPin11, HIGH);
digitalWrite(ledPin12, HIGH);
digitalWrite(ledPin13, HIGH);
delay(500);
//apaga os leds
digitalWrite(ledPin7, LOW);
digitalWrite(ledPin8, LOW);
digitalWrite(ledPin9, LOW);
digitalWrite(ledPin10, LOW);
digitalWrite(ledPin11, LOW);
digitalWrite(ledPin12, LOW);
digitalWrite(ledPin13, LOW);
delay(500);
piscadas = piscadas + 1;
}
comecarjogo(); //chama a funçao para começar o jogo
comecoujogo = true; //marca que o jogo começou
} else {
reiniciarjogo();
}
botaocarregado = false; //reinicia o estado do botao
}
//Se o botao for solto, a variavel botaocarregado volta a ser falso
if (buttonState = LOW) {
botaocarregado = false;
tempopressionado = 0;
}
// Se o jogo começou e os leds nao estao a piscar
if (comecoujogo && !estadodoled) {
ligarLed = random(6, 13); //escolhe um led aleatorio entre 7 e 13
digitalWrite(ligarLed, HIGH); //acende o led escolhido
tempoultimoledligado = millis(); //guarda o tempo que o led foi ligado
estadodoled = true; //led esta acesso
}
//Se um led esta acesso e o tempo desde que foi ligado ultrapassou o intervalo definido
if (estadodoled && (millis() - tempoultimoledligado >= delayLED)) {
digitalWrite(ligarLed, LOW); //apaga o led
estadodoled = false; //indica nao existe nenhum led acesso
}
}
void comecarjogo() {
}
void reiniciarjogo() {
int piscadas = 0;
while (piscadas < 2) { // Piscar LEDs 2 vezes para reiniciar
digitalWrite(ledPin7, HIGH);
digitalWrite(ledPin8, HIGH);
digitalWrite(ledPin9, HIGH);
digitalWrite(ledPin10, HIGH);
digitalWrite(ledPin11, HIGH);
digitalWrite(ledPin12, HIGH);
digitalWrite(ledPin13, HIGH);
delay(500);
digitalWrite(ledPin7, LOW);
digitalWrite(ledPin8, LOW);
digitalWrite(ledPin9, LOW);
digitalWrite(ledPin10, LOW);
digitalWrite(ledPin11, LOW);
digitalWrite(ledPin12, LOW);
digitalWrite(ledPin13, LOW);
delay(500);
piscadas = piscadas + 1;
}
comecoujogo = false;
}