Código
- Simon diz o código do Arduino
Simon diz código do Arduino Arduino
int ledArray [] ={12, 9, 5, 2}; // ledArray [0] é verde, ledArray [1] é vermelho, ledArray [2] é amarelo e ledArray [3] é azul. int buttonArray [] ={13, 10, 6, 3}; // buttonArray [0] é verde, buttonArray [1] é vermelho, buttonArray [2] é amarelo e buttonArray [3] é azul. pinCount int =4; // tanto ledArray quanto buttonArray têm o mesmo pinCount -> use isso para botões e leds int buzzer =8; int ledState =0; int gameState =0; #define NUMBERTOWIN 5 // Número de luzes que você deve combinar para vencer -> Você pode alterar este número para tornar o jogo mais ou menos desafiador para ganhar int gameValues [NUMBERTOWIN]; int roundNum =0; sem sinal long previousMillis =0; // precisa disso para o estado pré-jogo para luzes piscando sem atraso -> se você usar o atraso, seu botão para iniciar o jogo pode não ser notado unsigned long interval1 =500; // precisa disso para o tempo entre piscadas // declara functionsvoid setLed (int ledNum); void displayClue (int roundNum); boolean waitForInput (int buttonNum); void setup () {Serial.begin (9600); Serial.println ("configuração"); for (int Pin =0; Pin a função setLed () afirma que se ledNum for <0, o led é BAIXO setLed (-1); // defina o número da rodada como zero para começar na primeira rodada roundNum =0; atraso (1000); // define gameState para 1 gameState =1; }} if (gameState ==1) {gamePlay (); } if (gameState ==2) {// Você ganhou !! - reproduza o som vencedor e percorra os leds (winDisplay) 3 vezes, seguido de uma exibição perdida uma vez para uma boa transição. // demora para dar ao jogador tempo para soltar o botão pressionado antes de vencer as reproduções de som delay (500); win_sound (); winDisplay (); winDisplay (); winDisplay (); perderDisplay (); Serial.println ("winDisplay"); // atrase um pouco antes de executar o pre_game delay (1000); // redefine gameState para zero para chamar pre_game gameState =0; } if (gameState ==3) {// Você perde :( - reproduza som perdendo e leds flash (LossDisplay) 3 vezes para uma boa transição. // retarde para dar ao jogador tempo para soltar o botão pressionado antes de perder o retardo de reprodução de som (500); lost_sound (); LossDisplay (); LossDisplay (); LossDisplay (); Serial.println ("LossDisplay"); // atrasar brevemente antes de executar o atraso pre_game (1000); // redefinir gameState para zero para chamar pre_game gameState =0;}} // pre_gamevoid pre_game () {// Verifique se passou tempo suficiente entre os leds acendendo long unsigned long currentMillis =millis (); if (currentMillis - previousMillis> interval1) {// se tempo suficiente passou atualização acende if ( ledState ==0) {Serial.println ("pre green"); setLed (0); ledState =1;} else if (ledState ==1) {Serial.println ("pre red"); setLed (1); ledState =2;} else if (ledState ==2) {Serial.println ("pre yellow"); setLed (2); ledState =3;} else if (ledState ==3) {Serial.println ("pre blue "); setLed (3); ledState =0;} // tempo redefinir previousMillis =currentMillis; }} // função enquanto o jogo está sendo reproduzidovoid gamePlay () {Serial.println ("gamePlay"); // pré-carrega a matriz com números aleatórios para o jogo para (int i =0; i se algum botão for pressionado, vá para o resto do código if (! button0 ||! button1 ||! button2 ||! button3) {// Atrase brevemente para evitar a contagem dupla de atraso do pressionamento do botão ( 250); // acende o led correspondente quando um botão é pressionado if (buttonNum ==0) {digitalWrite (ledArray [0], HIGH); atraso (250); digitalWrite (ledArray [0], LOW); } else if (buttonNum ==1) {digitalWrite (ledArray [1], HIGH); atraso (250); digitalWrite (ledArray [1], LOW); } else if (buttonNum ==2) {digitalWrite (ledArray [2], HIGH); atraso (250); digitalWrite (ledArray [2], LOW); } else if (buttonNum ==3) {digitalWrite (ledArray [3], HIGH); atraso (250); digitalWrite (ledArray [3], LOW); } // verifique se o botão correto foi pressionado if (buttonNum ==0 &&button0 ==0) {Serial.println ("0 Pressed"); return true; } else if (buttonNum ==1 &&button1 ==0) {Serial.println ("1 Pressionado"); return true; } else if (buttonNum ==2 &&button2 ==0) {Serial.println ("2 pressionado"); return true; } else if (buttonNum ==3 &&button3 ==0) {Serial.println ("3 pressionado"); return true; } else {return false; }}}} // após a vitória - faça com que as luzes se movam rapidamente para evitar winDisplay () {digitalWrite (ledArray [0], HIGH); delay (75); digitalWrite (ledArray [0], LOW); delay (75); digitalWrite (ledArray [1], HIGH); atraso (75); digitalWrite (ledArray [1], LOW); atraso (75); digitalWrite (ledArray [2], HIGH); atraso (75); digitalWrite (ledArray [2], LOW ); atraso (75); digitalWrite (ledArray [3], HIGH); atraso (75); digitalWrite (ledArray [3], LOW); atraso (75); digitalWrite (ledArray [2], HIGH); atraso (75 ); digitalWrite (ledArray [2], LOW); atraso (75); digitalWrite (ledArray [1], HIGH); atraso (75); digitalWrite (ledArray [1], LOW); atraso (75); digitalWrite (ledArray [0], HIGH); delay (75); digitalWrite (ledArray [0], LOW); delay (75);} void win_sound (void) {// tom (número pin, frequência - pesquisei online para encontrar a frequência das notas que eu queria, duração da melodia) Serial.println ("buzzer1"); tom (campainha, 294, 250); atraso (200); tom (campainha, 294, 250); atraso (200); tom (campainha, 294, 250); atraso (200); tom (campainha, 392, 500); atraso (500); Serial.println ("segundo 392"); tom (campainha, 392, 250); atraso (200); tom (campainha, 440, 250); atraso (200); tom (campainha, 392, 250); atraso (200); tom (campainha, 440, 250); atraso (200); tom (campainha, 494, 500);} void percaDisplay () {digitalWrite (ledArray [0], HIGH); digitalWrite (ledArray [1], HIGH); digitalWrite (ledArray [2], HIGH); digitalWrite (ledArray [3], HIGH); atraso (200); digitalWrite (ledArray [0], LOW); digitalWrite (ledArray [1], LOW); digitalWrite (ledArray [2], LOW); digitalWrite (ledArray [3], LOW); atraso (200);} void lost_sound (void) {Serial.println ("lost_sound"); tom (campainha, 98, 250); atraso (250); tom (campainha, 93, 250); atraso (250); tom (campainha, 87, 250); atraso (250);}