quarta-feira, 17 de junho de 2015

Código


//variaveis para cada som
int NOTE_D4 =261;

int NOTE_G4 =294;

int NOTE_A4 =329;

int NOTE_A5 =349;

//vetor com os sons
int tons[4] = { NOTE_A5, NOTE_A4, NOTE_G4, NOTE_D4 };

//vetor até 100 da sequência
int sequencia[100] = {};

// indica a rodada do jogo
int rodadajogo = 0;

//variavel para verificar onde a sequencia se encontra
//estado do jogo, ou seja, se esta ganhando ou se perdeu
int termodasequencia = 0;
int estadojogo=0;

//declaração dos pinos e variaveis para auxiliar a leitura do ldr e conversão do ldr para botão
int pinoAudio = 6;

int pinosLeds[4] = { 7, 11, 12, 13 };

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

int lerldr[4] = {};

int botaoldr[4]={};



// indica se o botão foi pressionado, ou seja, 1 pressionado 0 não pressionado
int botao_pressionado = 0;

//variavel boolean indicando o termino do jogo
int perdeu_o_jogo = false;


//função para relacionar pinos com entrada e saida
void setup() {

//loop para facilitar a declaração dos pinos dos leds como saida
//variavel i auxiliar
  for (int i = 0; i <= 3; i++) {

    pinMode(pinosLeds[i], OUTPUT);

  }

//loop para facilitar a declaração dos pinos dos ldrs como entrada
//variavel i auxiliar
  for (int i = 0; i <= 3; i++) {
    pinMode(pinosBotoes[i], INPUT);
  }


//pino de som como saida
  pinMode(pinoAudio, OUTPUT);



//inicialização do serial(utilizado na leitura do ldr) e do random(utilizado na sequencia)
  Serial.begin(9600);
  randomSeed(analogRead(4));

}

//função principal loop
void loop() {

//quando perder o jogo as variaveis vao retornar ao valor inicial
  if (perdeu_o_jogo) {

    int sequencia[100] = {};
    estadojogo=0;
    rodadajogo = 0;
    termodasequencia = 0;
    perdeu_o_jogo = false;

  }


//se a rodada for a primeira e o jogo não estiver em andamento ele chama a função para inicializar o jogo
  if (rodadajogo == 0) {
    while(estadojogo==0){
      Inicializar();
    }
    delay(500);
  }



  proximaRodada(); //função para iniciar rodada

  reproduzirSequencia();//reproduz sequencia

  aguardarJogador();//aguarda a jogada do usuario

  delay(1000);
}


//adiciona um item caso o jogador passe para a proxima rodada
void proximaRodada() {

  int numero_sorteado = random(0, 4);

  sequencia[rodadajogo++] = numero_sorteado;

}


//reproduzir sequencia para o usuario
void reproduzirSequencia() {
  for (int i = 0; i < rodadajogo; i++) {

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

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

    noTone(pinoAudio);

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

  }

  noTone(pinoAudio);

}




//espera a entrada do jogador
void aguardarJogador() {

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

    verificarJogada();


    if (perdeu_o_jogo) {

      break;
    }



    termodasequencia++;

  }
 
  termodasequencia = 0;
}


//aguarda a entrada de cada termo da sequencia, verificando o botao pressionado
void aguardarJogada() {

  boolean jogada_efetuada = false;

  while (!jogada_efetuada) {

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

      if (botaoldr[i] == 1) {


        botao_pressionado = i;


        tone(pinoAudio, tons[i]);

        digitalWrite(pinosLeds[i], HIGH);

        delay(300);

        digitalWrite(pinosLeds[i], LOW);

        noTone(pinoAudio);



        jogada_efetuada = true;

      }

    }

    delay(10);
  }
}


//faz a comparação da jogada com a sequencia
void verificarJogada() {
  if (sequencia[termodasequencia] != 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;

  }

}



//FUNÇÃO LEITURA LDR
void leituraldr(){
  for (int i=0;i<4;i++){
  lerldr[i]=analogRead(pinosBotoes[i]);//700tampado
  }
//  Serial.print(lerldr[0]); //mostrar na tela
//  Serial.print("      "); //mostrar na tela
//  Serial.print(lerldr[1]); //mostrar na tela
//  Serial.print("      "); //mostrar na tela
//  Serial.print(lerldr[2]); //mostrar na tela
//  Serial.print("      "); //mostrar na tela
//  Serial.print(lerldr[3]); //mostrar na tela
//  Serial.print("      "); //mostrar na tela
//  Serial.println(); //mostrar na tela
 
  if(lerldr[0]<=500){
    botaoldr[0]=1;
  } else {
    botaoldr[0]=0;
  }
 
  if(lerldr[1]<=500){
    botaoldr[1]=1;
  } else {
    botaoldr[1]=0;
  }
 
  if(lerldr[2]<=500){
    botaoldr[2]=1;
  } else {
    botaoldr[2]=0;
  }
 
  if(lerldr[3]<=500){
    botaoldr[3]=1;
  } else {
    botaoldr[3]=0;
  }
 
  Serial.print(botaoldr[0]); //mostrar na tela
  Serial.print("      "); //mostrar na tela
  Serial.print(botaoldr[1]); //mostrar na tela
  Serial.print("      "); //mostrar na tela
  Serial.print(botaoldr[2]); //mostrar na tela
  Serial.print("      "); //mostrar na tela
  Serial.print(botaoldr[3]); //mostrar na tela
  Serial.print("      "); //mostrar na tela
  Serial.println(); //mostrar na tela
 
}


void Inicializar() {
 
  leituraldr();//chama função de leitura dos ldrs
 
  if(botaoldr[0]==1 && botaoldr[1]==1 && botaoldr[2]==1 && botaoldr[3]==1){
     
        tone(pinoAudio,262,200); //DO
        for (int i=0;i<4;i++){
          digitalWrite(pinosLeds[i],HIGH);
        }
        delay(200);
        tone(pinoAudio,294,300); //RE
        delay(200);
        tone(pinoAudio,330,300); //MI
        for (int i=0;i<4;i++){
          digitalWrite(pinosLeds[i],LOW);
        }
        delay(200);
        tone(pinoAudio,349,300); //FA
        delay(300);
       
        estadojogo=1;
  }
 
 delay(150);

}

Nenhum comentário:

Postar um comentário