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

Postagens mais visitadas