Fala Pessoal! Tudo Bom com Vocês?! 😉
Primeiramente sou imensamente grato pela visita de vocês aqui ao nosso Blog – EletronicaParaTodos.com
Neste video, vamos falar e mostrar como podemos de forma totalmente “caseira”, sim, utilizando componentes eletrônicos de fácil aquisição no mercado e “baratos”, montar o nosso próprio jogo da memória (uma simulação do famoso Genius, fabricado pela marca de brinquedos “Estrela” anos atrás e que parece ter sido relançado ultimamente no mercado brasileiro)!
Bom, seguindo então a linha de funcionalidades do famoso jogo “Genius” da fabricante “Estrela”, também conhecido mundialmente como “Simon“, vamos então montar nosso circuito baseado na nossa placa Roduino V2 (um Arduino Standalone Feito em Casa)! 😉
PS: É claro que você pode utilizar sua placa Arduino UNO ou qualquer outra similar e compatível para realizar a montagem deste protótipo!
E aí, vamos adiante?! 😉
Código/Sketch do Jogo Genius (ou Simon) para Arduino UNO / Roduino V2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
/* ----------------------------------- Memory Game with Arduino ----------------------------------- Based on a project by Jeremy Wilson Modified by Rui Santos ----------------------------------- Publicado por Rodrigo Costa do Blog https://EletronicaParaTodos.com ----------------------------------- */ // Constants const int button1 = 2; // 1st button controls Blue LED const int button2 = 3; // 2nd button controls Yellow LED const int button3 = 4; // 3rd button controls Green LED const int button4 = 5; // 4th button controls Red LED const int led1 = 7; // Blue LED const int led2 = 8; // Yellow LED const int led3 = 9; // Green LED const int led4 = 10; // Red LED const int buzzer = 12; // Buzzer Output const int tones[] = {1915, 1700, 1519, 1432, 2700}; // tones when you press the LED's - the last one is when you fail. // Variables int buttonState[] = {0,0,0,0}; // current state of the button int lastButtonState[] = {0,0,0,0}; // previous state of the button int buttonPushCounter[] = {0,0,0,0}; void playTone(int tone, int duration) { for (long i = 0; i < duration * 1000L; i += tone * 2) { digitalWrite(buzzer, HIGH); delayMicroseconds(tone); digitalWrite(buzzer, LOW); delayMicroseconds(tone); } } void setup() { // initialize inputs : randomSeed(analogRead(0)); pinMode(button1, INPUT); pinMode(button2, INPUT); pinMode(button3, INPUT); pinMode(button4, INPUT); // initialize outputs: pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(buzzer, OUTPUT); // initialize serial communication for debugging: //Serial.begin(9600); } int game_on = 0; int wait = 0; int currentlevel = 1; // This is the level (also the number of button presses to pass to next level) long rand_num = 0; //initialize long variable for random number from 0-100. int rando = 0; //initialize random integer for loopgame_on. Will be from 1-4 later. int butwait = 500; //amount of time to wait for next button input (ghetto de-bounce) int ledtime = 500; //amount of time each LED flashes for when button is pressed int n_levels = 10; //number of levels until the game is won int pinandtone = 0; //This integer is used when the sequence is displayed int right = 0; //This variable must be 1 in order to go to the next level int speedfactor = 5; //This is the final speed of the lights and sounds for the last level. This increases as more games are won int leddelay = 200; //Initializing time for LED. This will decrease as the level increases void loop() { int n_array[n_levels]; int u_array[n_levels]; int i; //clears arrays both "n_array" and "u_array" and starts a new game if (game_on == 0){ for(i=0; i<n_levels; i=i+1){ n_array[i]=0; u_array[i]=0; rand_num = random(1,200); if (rand_num <= 50) rando=0; else if (rand_num>50 && rand_num<=100) rando=1; else if (rand_num>100 && rand_num<=150) rando=2; else if (rand_num<=200) rando=3; //saves a random number in our n_array n_array[i]=rando; } game_on = 1; } //shows the user the current sequence if (wait == 0){ delay (200); i = 0; for (i = 0; i < currentlevel; i= i + 1){ leddelay = ledtime/(1+(speedfactor/n_levels)*(currentlevel - 1)); pinandtone = n_array[i]; digitalWrite(pinandtone+7, HIGH); playTone(tones[pinandtone], leddelay); digitalWrite(pinandtone+7, LOW); delay(100/speedfactor); } wait = 1; } i = 0; int buttonchange = 0; int j = 0; // This is the current position in the sequence while (j < currentlevel){ while (buttonchange == 0){ for (i = 0; i < 4; i = i + 1){ buttonState[i] = digitalRead(i+2); buttonchange = buttonchange + buttonState[i]; } } for (i = 0; i < 4; i = i + 1){ if (buttonState[i] == HIGH) { digitalWrite(i+7, HIGH); playTone(tones[i], ledtime); digitalWrite(i+7, LOW); wait = 0; u_array[j]=i; buttonState[i] = LOW; buttonchange = 0; } } if (u_array[j] == n_array[j]){ j++; right = 1; } else{ right = 0; i = 4; j = currentlevel; wait = 0; } } if (right == 0){ delay(300); i = 0; game_on = 0; currentlevel = 1; for (i = 0; i < 4; i = i + 1){ digitalWrite(i+7, HIGH); } playTone(tones[4], ledtime); for (i = 0; i < 4; i = i + 1){ digitalWrite(i+7, LOW); } delay (200); for (i = 0; i < 4; i = i + 1){ digitalWrite(i+7, HIGH); } playTone(tones[4], ledtime); for (i = 0; i < 4; i = i + 1){ digitalWrite(i+7, LOW); } delay(500); game_on = 0; } //if you insert the right sequence it levels up if (right == 1){ currentlevel++; wait = 0; } //if you finish the game if (currentlevel == n_levels){ delay(500); // The following is the victory sound: int notes[] = {2, 2, 2, 2, 0, 1, 2, 1, 2}; int note = 0; int tempo[] = {200, 200, 200, 400, 400, 400, 200, 200, 600}; int breaks[] = {100, 100, 100, 200, 200, 200, 300, 100, 200}; for (i = 0; i < 9; i = i + 1){ note = notes[i]; digitalWrite(note+7, HIGH); playTone(tones[note], tempo[i]); digitalWrite(note+7, LOW); delay(breaks[i]); } //sets game_on to 0, so it restarts a new game game_on = 0; currentlevel = 1; n_levels = n_levels + 2; speedfactor = speedfactor + 1; } } |
Espero que tenham gostado e que o conteúdo tenha sido útil! 🙂
Abração Pessoal!
- Medindo e Monitorando a Temperatura com Arduino (Sensor LM35) - 5 de setembro de 2021
- Controle de Cargas através de Entrada Analógica com Arduino - 30 de agosto de 2021
- REVIEW E DICAS – ALICATE AMPERÍMETRO (UNI-T UT210E PRO) - 28 de agosto de 2021