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);
}
terça-feira, 9 de junho de 2015
Assinar:
Postagens (Atom)