Geinus

O projeto a seguir é um protótipo do Jogo Genius.






#define NOTE_D4  294
#define NOTE_G4  392
#define NOTE_A4  440
#define NOTE_A5  880

int tons[4] = { NOTE_A5, NOTE_A4, NOTE_G4, NOTE_D4 };

int sequencia[100] = {};

int rodada_atual = 0;

int passo_atual_na_sequencia = 0;

int pinoAudio = 6;

int pinosLeds[4] = { 8, 9, 10, 11 };

int pinosBotoes[4] = { 2, 3, 4, 5 };

int botao_pressionado = 0;

int perdeu_o_jogo = false;

void setup() {

  for (int i = 0; i <= 3; i++) {

    pinMode(pinosLeds[i], OUTPUT);

  }

  for (int i = 0; i <= 3; i++) {
    pinMode(pinosBotoes[i], INPUT);
  }

  pinMode(pinoAudio, OUTPUT);

  randomSeed(analogRead(0));

}

void loop() {

  if (perdeu_o_jogo) {

    int sequencia[100] = {};

    rodada_atual = 0;
    passo_atual_na_sequencia = 0;

    perdeu_o_jogo = false;

  }

  if (rodada_atual == 0) {

    tocarSomDeInicio();

    delay(500);

  }

  proximaRodada();

  reproduzirSequencia();

  aguardarJogador();

  delay(1000);
}


void proximaRodada() {

  int numero_sorteado = random(0, 4);

  sequencia[rodada_atual++] = numero_sorteado;

}

void reproduzirSequencia() {
  for (int i = 0; i < rodada_atual; i++) {

    tone(pinoAudio, tons[sequencia[i]]);

    digitalWrite(pinosLeds[sequencia[i]], HIGH);
    delay(500);

    noTone(pinoAudio);

    digitalWrite(pinosLeds[sequencia[i]], LOW);
    delay(100);

  }

  noTone(pinoAudio);

}

void aguardarJogador() {

  for (int i = 0; i < rodada_atual; i++) {
    aguardarJogada();

    verificarJogada();


    if (perdeu_o_jogo) {

      break;
    }

    passo_atual_na_sequencia++;

  }

  passo_atual_na_sequencia = 0;
}


void aguardarJogada() {

  boolean jogada_efetuada = false;

  while (!jogada_efetuada) {

    for (int i = 0; i <= 3; i++) {

      if (digitalRead(pinosBotoes[i]) == HIGH) {

        botao_pressionado = i;
        tone(pinoAudio, tons[i]);
        digitalWrite(pinosLeds[i], HIGH);
        delay(300);
        digitalWrite(pinosLeds[i], LOW);
        noTone(pinoAudio);

        jogada_efetuada = true;

      }

    }

    delay(10);
  }
}


void verificarJogada() {
  if (sequencia[passo_atual_na_sequencia] != botao_pressionado) {

    for (int i = 0; i <= 3; i++) {
      tone(pinoAudio, tons[i]);
      digitalWrite(pinosLeds[i], HIGH);

      delay(200);

      digitalWrite(pinosLeds[i], LOW);
      noTone(pinoAudio);
    }



    tone(pinoAudio, tons[3]);

    for (int i = 0; i <= 3; i++) {

      digitalWrite(pinosLeds[0], HIGH);

      digitalWrite(pinosLeds[1], HIGH);

      digitalWrite(pinosLeds[2], HIGH);

      digitalWrite(pinosLeds[3], HIGH);

      delay(100);

      digitalWrite(pinosLeds[0], LOW);

      digitalWrite(pinosLeds[1], LOW);

      digitalWrite(pinosLeds[2], LOW);

      digitalWrite(pinosLeds[3], LOW);

      delay(100);

    }

    noTone(pinoAudio);

    perdeu_o_jogo = true;

  }

}

void tocarSomDeInicio() {

  tone(pinoAudio, tons[0]);

  digitalWrite(pinosLeds[0], HIGH);

  digitalWrite(pinosLeds[1], HIGH);
  digitalWrite(pinosLeds[2], HIGH);
  digitalWrite(pinosLeds[3], HIGH);

  delay(500);

  digitalWrite(pinosLeds[0], LOW);
  digitalWrite(pinosLeds[1], LOW);
  digitalWrite(pinosLeds[2], LOW);

  digitalWrite(pinosLeds[3], LOW);
  delay(500);
  noTone(pinoAudio);
}

Comentários

Postagens mais visitadas deste blog

Termômetro em Arduino

Resistor

Piano com Leds