Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define buzzer 3 // declaracao de variaveis (buzzer; pinos de leds; pinos de botoes;)
- #define led_red 4
- #define led_yellow 5
- #define led_green 6
- #define led_blue 7
- #define PwOn 13
- #define botao_1 8
- #define botao_2 9
- #define botao_3 10
- #define botao_4 11
- byte JogoNovo = 0; // Para mostrar o ledes picando uma vez só
- int sequencia[10]; //declaracao da quantidade sequencial;
- int contador_jogo = 0; //contador para jogo;
- int contador_botao = 0; //contador para botao;
- boolean jogo = true; //variavel booleana que so assume valor verdadeiro ou falso;
- int estado = 0;
- int botok = 0 ;
- int BotApertado = 0;
- int input = 0;
- //-----------------------------------------
- void setup() //declaracao de entradas e saidas da protoboard;
- {
- pinMode (buzzer, OUTPUT);
- pinMode (led_red, OUTPUT);
- pinMode (led_yellow, OUTPUT);
- pinMode (led_green, OUTPUT);
- pinMode (led_blue, OUTPUT);
- pinMode (PwOn, OUTPUT);
- pinMode (botao_1, INPUT_PULLUP);
- pinMode (botao_2, INPUT_PULLUP);
- pinMode (botao_3, INPUT_PULLUP);
- pinMode (botao_4, INPUT_PULLUP);
- pinMode (2, INPUT_PULLUP);
- attachInterrupt(0, Liga_Genio, FALLING);
- randomSeed(analogRead(0)); // gera numeros mais aleatorios pois utiliza ponto-flutuante, no caso o pino 0 está desconectado;
- }
- //----------------------------------------
- void Liga_Genio ()
- {
- noInterrupts();
- delay(1000);
- JogoNovo = 0; // Para mostrar o ledes picando uma vez só
- contador_jogo = 0; //contador para jogo;
- contador_botao = 0; //contador para botao;
- jogo = true; //variavel booleana que so assume valor verdadeiro ou falso;
- botok = 1 ;
- estado = 1- estado;
- BotApertado = 1;
- }
- //----------------------------------------
- void loop() //declaracao do laco a ser executado pelo loop;
- {
- digitalWrite (PwOn, LOW);
- while(estado == 1)
- {
- digitalWrite (PwOn, HIGH);
- while (JogoNovo == 0)
- {
- contador_jogo = 0; //contador para jogo;
- contador_botao = 0; //contador para botao;
- jogo = true; //variavel booleana que so assume valor verdadeiro ou falso;
- inicio (); // zera contadores e confirma que jogo esteja em true (verdadeiro) para começar.
- pisca();
- delay(100);
- pause(); // pausa e confirma todos os leds desligados;
- delay(500);
- JogoNovo = 1;
- }
- if (jogo == true) // condicional para inicio do jogo;
- {
- funcao_randomica ();
- delay(100);
- }
- else
- {
- espera_botao ();
- }
- }
- }
- //----------------------------------------
- // bloco que realiza sorteio dos leds;
- void funcao_randomica ()
- {
- jogo = false;
- sequencia[contador_jogo] = random (4); // numero randomico é incrementado na variavel sequencia, com indicador determinado pelo contador_jogo;
- // cada numero armazenado corresponde a uma cor de led, que é definida na condicional "if" / se ; Ao entrar numa condicional, ele chama a funcao (pisca_leds) corresponde a cor;
- for ( int i = 0; i <= contador_jogo; i++)
- {
- if (sequencia[i] == 0) // de 0 a 3 e não de 1 a 4
- {
- pisca_red();
- delay(200);
- }
- else
- {
- if (sequencia[i] == 1)
- {
- pisca_yellow();
- delay(200);
- }
- else
- {
- if (sequencia[i] == 2)
- {
- pisca_green(); // tava trocado co o proximo
- delay(200);
- }
- else
- {
- if (sequencia[i] == 3)
- {
- pisca_blue();
- delay(200);
- }
- delay(100);
- }
- }
- }
- }
- contador_jogo ++;
- }
- // bloco que espera jogada do jogador;
- //----------------------------------------
- void espera_botao () //recebe botoes pressionados pelo jogador;
- {
- for (byte repeticao = 0; repeticao <contador_jogo; repeticao++)
- {
- botok = 0 ;
- while (botok == 0) // Flag pra saber se apertou botão
- {
- input = 0;
- BotApertado = 0;
- while(BotApertado == 0)
- {
- if (digitalRead(botao_1) == LOW)
- {
- BotApertado = 1;
- botok = 1;
- pisca_red();
- input = 0;
- }
- if (digitalRead(botao_2) == LOW)
- {
- BotApertado = 1;
- botok = 1;
- pisca_yellow ();
- input = 1;
- }
- if (digitalRead(botao_3) == LOW)
- {
- BotApertado = 1;
- botok = 1;
- pisca_green ();
- input = 2;
- }
- if (digitalRead(botao_4) == LOW)
- {
- BotApertado = 1;
- botok = 1;
- pisca_blue ();
- input = 3;
- }
- interrupts();
- }
- if ( sequencia[repeticao] != input)
- {
- if (estado == 1)
- {
- delay(300);
- pisca_errou(8, 150);
- delay (3000);
- JogoNovo = 0;
- }
- }
- }
- }
- jogo = true;
- delay(500);
- }
- //----------------------------------------
- void sound_red() // foi passado parametro para que ficasse mais legivel o codigo, no caso o sound_red, utiliza paramentro do led_red. Quando ligado, chama a funcao sound_red;
- {
- tone(buzzer, 262); //DO // incrementa-se o comando "Tone" indicando qual variavel ta sendo usado o som (no caso, buzzer), e qual a frequencia deve ser emitida;
- delay (180); // para desliga-lo basta digitar "notone" seguido do nome da variavel do som (buzzer);
- noTone (buzzer);
- }
- //-------------------------------------------------
- void sound_yellow()
- {
- tone(buzzer, 294); //RE
- delay (180);
- noTone (buzzer);
- }
- //-------------------------------------------------
- void sound_green()
- {
- tone(buzzer, 349); //FA
- delay (180);
- noTone (buzzer);
- }
- //-------------------------------------------------
- void sound_blue()
- {
- tone(buzzer, 330); //MI
- delay (180);
- noTone (buzzer);
- }
- //----------------------------------------
- void pisca_errou (int qtd, int t) {
- for (int y = 1; y <= qtd; y++) {
- digitalWrite (led_red, HIGH);
- sound_red ();
- digitalWrite (led_yellow, HIGH);
- sound_yellow ();
- digitalWrite (led_green, HIGH);
- sound_green ();
- digitalWrite (led_blue, HIGH);
- sound_blue ();
- delay (100);
- digitalWrite (led_red, LOW);
- digitalWrite (led_yellow, LOW);
- digitalWrite (led_green, LOW);
- digitalWrite (led_blue, LOW);
- delay (80);
- }
- }
- //----------------------------------------
- // bloco para comandos repetidos de pisca leds; utilizados na hora de apertar o botão e no sorteio do randomico;
- void pisca_red ()
- {
- digitalWrite (led_red, HIGH);
- delay(100);
- sound_red ();
- digitalWrite (led_red, LOW);
- }
- //-----------------------------------------------------
- void pisca_yellow ()
- {
- digitalWrite (led_yellow, HIGH);
- delay(100);
- sound_yellow ();
- digitalWrite (led_yellow, LOW);
- }
- //-----------------------------------------------------
- void pisca_green ()
- {
- digitalWrite (led_green, HIGH);
- delay(100);
- sound_green ();
- digitalWrite (led_green, LOW);
- }
- //-----------------------------------------------------
- void pisca_blue ()
- {
- digitalWrite (led_blue, HIGH);
- delay(100);
- sound_blue ();
- digitalWrite (led_blue, LOW);
- }
- //----------------------------------------
- void inicio()
- {
- contador_jogo = 0;
- contador_botao = 0;
- jogo = true;
- }
- //bloco para comando ao iniciar jogo quando rodada = 0;
- //----------------------------------------
- void pisca()
- {
- digitalWrite (led_red, HIGH);
- sound_red ();
- digitalWrite (led_yellow, LOW);
- digitalWrite (led_green, LOW);
- digitalWrite (led_blue, LOW);
- digitalWrite (led_red, LOW);
- digitalWrite (led_yellow, HIGH);
- sound_yellow ();
- digitalWrite (led_green, LOW);
- digitalWrite (led_blue, LOW);
- digitalWrite (led_red, LOW);
- digitalWrite (led_yellow, LOW);
- digitalWrite (led_green, HIGH);
- sound_green ();
- digitalWrite (led_blue, LOW);
- digitalWrite (led_red, LOW);
- digitalWrite (led_yellow, LOW);
- digitalWrite (led_green, LOW);
- digitalWrite (led_blue, HIGH);
- sound_blue ();
- digitalWrite (led_red, LOW);
- digitalWrite (led_yellow, LOW);
- digitalWrite (led_green, HIGH);
- sound_green ();
- digitalWrite (led_blue, LOW);
- digitalWrite (led_red, LOW);
- digitalWrite (led_yellow, HIGH);
- sound_yellow ();
- digitalWrite (led_green, LOW);
- digitalWrite (led_blue, LOW);
- digitalWrite (led_red, HIGH);
- sound_red ();
- digitalWrite (led_yellow, LOW);
- digitalWrite (led_green, LOW);
- digitalWrite (led_blue, LOW);
- digitalWrite (led_red, LOW);
- digitalWrite (led_yellow, LOW);
- digitalWrite (led_green, LOW);
- digitalWrite (led_blue, LOW);
- delay (80);
- digitalWrite (led_red, HIGH);
- sound_red ();
- digitalWrite (led_yellow, HIGH);
- sound_yellow ();
- digitalWrite (led_green, HIGH);
- sound_green ();
- digitalWrite (led_blue, HIGH);
- sound_blue ();
- }
- //bloco para dar uma pausa durante os programas e confirmar todos os leds desligados;
- //----------------------------------------
- void pause ()
- {
- digitalWrite (led_red, LOW);
- digitalWrite (led_yellow, LOW);
- digitalWrite (led_green, LOW);
- digitalWrite (led_blue, LOW);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement