Jogo acerta led
montagem
Código do arduino
#define bt1 3
#define bt2 2
int tempo = 700; // Variável para mudar a velocidade do jogo
bool flag1 = 0; // Flag de controle do botão 1
bool flag2 = 0; // Flag de controle do botão 2
bool start_game = 0; // Flag para iniciar o jogo
int number_random; // Variável para armazenar o número do LED alvo
int led_position; // Variável que armazena em qual posição a sequencial está
bool acertou = 0; // Flag que indica se o usuário acertou ou não
void iniciar_jogo();
void escolhe_numero();
void sequencial_leds();
void apagar_leds();
void verifica_bt1();
void setup() {
// Inicia os pinos de 6 a 13 como saída e em nível baixo
for (int i = 6; i <= 13; i++){
pinMode(i,OUTPUT);
digitalWrite(i,LOW);
}
// Configura os botões com resistor de pull-up interno
pinMode(bt1,INPUT_PULLUP);
pinMode(bt2,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(bt1), verifica_jogada, FALLING); // Configura a interrupção para borda de descida no bt1
randomSeed(analogRead(0)); // Valor aleatório de tensão em analogRead()
}
void loop() {
// Lendo o botão 2
if(!digitalRead(bt2)){
flag2 = 1;
delay(50);
}
if(flag2 && digitalRead(bt2)){
flag2 = 0;
delay(50);
start_game = 1;
escolhe_numero();
}
// Inicia o jogo
if(start_game == 1){
sequencial_leds();
}
}
// Função para ler o botão 1
void verifica_bt1(){
if (flag1 && digitalRead(bt1)){
flag1 = 0;
if(led_position == number_random){
apagar_leds();
escolhe_numero();
acertou = 1;
if(tempo != 100){
tempo -= 50;
}
}else{
start_game = 0;
apagar_leds();
tempo = 700;
}
}
}
// Função chamada pela interrupção quando ocorre uma borda de descida em bt1
void verifica_jogada(){
flag1 = 1;
}
// Função para escolher qual LED será o alvo
void escolhe_numero(){
number_random = random(0,8) + 6;
delay(100);
for(int i=0; i<4; i++){
digitalWrite(number_random,HIGH);
delay(150);
digitalWrite(number_random,LOW);
delay(150);
}
delay(100);
}
// Função para mostrar a sequencial de leds
void sequencial_leds(){
// Ida da sequencial
for (int i = 13; i >= 6; i--){
if (start_game == 0 || acertou == 1){
acertou = 0;
return;
}
led_position = i;
if (i == 13){
digitalWrite(i,HIGH);
delay(tempo);
}else{
digitalWrite(i,HIGH);
digitalWrite(i+1,LOW);
delay(tempo);
}
verifica_bt1();
}
// Volta da sequencial
for (int i = 7; i <= 12; i++){
if (start_game == 0 || acertou == 1){
acertou = 0;
return;
}
led_position = i;
digitalWrite(i,HIGH);
digitalWrite(i-1,LOW);
delay(tempo);
verifica_bt1();
}
digitalWrite(12,LOW);
}
// Função para apagar todos os LEDs
void apagar_leds(){
for (int i = 6; i <= 13; i++){
digitalWrite(i,LOW);
}
}
Comentários
Postar um comentário