├── ver 2.0 ├── diagrama full.png ├── diagrama half.png ├── diagrama tinkercad.png ├── genius ver 2.0 full.fzz ├── genius ver 2.1 half.fzz └── genius.ino ├── ver 3.0 ├── diagrama_v3.png └── genius_v3.ino ├── ver 1.0 ├── genius ver 1.0.fzz ├── diagrama elétrico.png └── genius_arduino.ino ├── LICENSE └── README.md /ver 2.0/diagrama full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/professorjosedeassis/genius/HEAD/ver 2.0/diagrama full.png -------------------------------------------------------------------------------- /ver 2.0/diagrama half.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/professorjosedeassis/genius/HEAD/ver 2.0/diagrama half.png -------------------------------------------------------------------------------- /ver 3.0/diagrama_v3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/professorjosedeassis/genius/HEAD/ver 3.0/diagrama_v3.png -------------------------------------------------------------------------------- /ver 1.0/genius ver 1.0.fzz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/professorjosedeassis/genius/HEAD/ver 1.0/genius ver 1.0.fzz -------------------------------------------------------------------------------- /ver 1.0/diagrama elétrico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/professorjosedeassis/genius/HEAD/ver 1.0/diagrama elétrico.png -------------------------------------------------------------------------------- /ver 2.0/diagrama tinkercad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/professorjosedeassis/genius/HEAD/ver 2.0/diagrama tinkercad.png -------------------------------------------------------------------------------- /ver 2.0/genius ver 2.0 full.fzz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/professorjosedeassis/genius/HEAD/ver 2.0/genius ver 2.0 full.fzz -------------------------------------------------------------------------------- /ver 2.0/genius ver 2.1 half.fzz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/professorjosedeassis/genius/HEAD/ver 2.0/genius ver 2.1 half.fzz -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 José de Assis 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![GitHub](https://img.shields.io/github/license/professorjosedeassis/genius) 2 | ![Arduino](https://img.shields.io/badge/Made%20with-Arduino-blue) 3 | 4 | # Arduino - Jogo de Memória Genius (Simon) 5 | Aprenda passo a passo como construir o clássico jogo de memória eletrônico Genius (também conhecido como Simon) usando Arduino. 6 | ### Autor 7 | Professor José de Assis 8 | ### Demonstração do projeto 9 | [![genius arduino](https://img.youtube.com/vi/gYgGgox5Q4o/0.jpg)](https://youtu.be/gYgGgox5Q4o?si=lEu-qmUlX2n5_YAi "Assistir no YouTube") 10 | 11 | ![YouTube Video Views](https://img.shields.io/youtube/views/gYgGgox5Q4o?style=social) 12 | ### Iniciar tutorial: 13 | ▶️ [Playlist](https://www.youtube.com/playlist?list=PLbEOwbQR9lqwq5E0DW3CvjfmF4FoIAW1f) 14 | 15 |
16 | 17 | ### ☕ Projetos sem café? Impossível! 18 | Criar e compartilhar projetos gratuitos exige tempo, dedicação e, claro, muito café! Se quiser apoiar, um "cafezinho" faz toda a diferença.
Sua doação incentiva mais projetos reais e mantém a motivação lá em cima! 19 | #### Chave PIX❖: 20 | ~~~txt 21 | josedeassisfilho@gmail.com 22 | ~~~ 23 | *( em nome de José de Assis Filho )* 24 | 25 | E olha, só de dar uma estrela ⭐, seguir o repositório e compartilhar, você já está dando uma baita força! 26 | 27 | 😃 Valeu demais pelo apoio! 28 | -------------------------------------------------------------------------------- /ver 1.0/genius_arduino.ino: -------------------------------------------------------------------------------- 1 | /** 2 | Arduino GENIUS 3 | @author Professor José de Assis 4 | https://www.youtube.com/playlist?list=PLbEOwbQR9lqzta3bQTkwDWtkne6I8LOBg 5 | */ 6 | 7 | /***************** variáveis globais *******************/ 8 | 9 | int sequencia[32] = {}; 10 | int botoes[4] = {8, 9, 10, 11}; 11 | int leds[4] = {2, 3, 4, 5}; 12 | int tons[4] = {262, 294, 330, 349}; 13 | int rodada = 0; 14 | int passo = 0; 15 | bool game_over = false; 16 | 17 | void setup() { 18 | // Leds 19 | pinMode(2, OUTPUT); 20 | pinMode(3, OUTPUT); 21 | pinMode(4, OUTPUT); 22 | pinMode(5, OUTPUT); 23 | // Buzzer 24 | pinMode(7, OUTPUT); 25 | // Botões 26 | pinMode(8, INPUT); 27 | pinMode(9, INPUT); 28 | pinMode(10, INPUT); 29 | pinMode(11, INPUT); 30 | } 31 | 32 | void loop() { 33 | proximaRodada(); 34 | reproduzirSequencia(); 35 | aguardarJogador(); 36 | // estrutura usada para reiniciar todas as variáveis (novo jogo) 37 | if (game_over == true) { 38 | sequencia[32] = {}; 39 | rodada = 0; 40 | passo = 0; 41 | game_over = false; 42 | } 43 | delay(1000); 44 | } 45 | 46 | /************************* Funções **************************/ 47 | 48 | void proximaRodada() { 49 | randomSeed(analogRead(A0)); 50 | int sorteio = random(4); 51 | sequencia[rodada] = sorteio; 52 | rodada = rodada + 1; 53 | //Serial.print(sorteio); 54 | } 55 | 56 | void reproduzirSequencia() { 57 | for (int i = 0; i < rodada; i++) { 58 | tone(7, tons[sequencia[i]]); 59 | digitalWrite(leds[sequencia[i]], HIGH); 60 | delay(500); 61 | noTone(7); 62 | digitalWrite(leds[sequencia[i]], LOW); 63 | delay(100); 64 | } 65 | } 66 | 67 | void aguardarJogador() { 68 | int botao_pressionado = 0; 69 | for (int i = 0; i < rodada; i++) { 70 | bool jogada_efetuada = false; 71 | while (!jogada_efetuada) { 72 | for (int i = 0; i <= 3; i++) { 73 | if (digitalRead(botoes[i]) == HIGH) { 74 | botao_pressionado = i; 75 | tone(7, tons[i]); 76 | digitalWrite(leds[i], HIGH); 77 | delay(300); 78 | digitalWrite(leds[i], LOW); 79 | noTone(7); 80 | jogada_efetuada = true; 81 | } 82 | } 83 | } 84 | //verificar a jogada 85 | if (sequencia[passo] != botao_pressionado) { 86 | //efeito luminoso/sonoro indicando que o jogador perdeu 87 | for (int i = 0; i <= 3; i++) { 88 | tone (7, 70); 89 | digitalWrite(leds[i], HIGH); 90 | delay(100); 91 | digitalWrite(leds[i], LOW); 92 | noTone(7); 93 | } 94 | game_over = true; 95 | break; 96 | } 97 | passo = passo + 1; 98 | } 99 | passo = 0; 100 | } 101 | -------------------------------------------------------------------------------- /ver 2.0/genius.ino: -------------------------------------------------------------------------------- 1 | /** 2 | Jogo de memória (GENIUS) 3 | @author Professor José de Assis 4 | @version 2.0 5 | @link https://roboticapratica.com.br/ 6 | */ 7 | 8 | /* 9 | Vetor usado para armazenar a sequência da rodada. 10 | "16" é o número máximo de rodadas (0 a 15). 11 | Você pode aumentar este valor para deixar o jogo 12 | mais difícil, neste caso alterar também a linha 82. 13 | */ 14 | int sequencia[16] = {}; 15 | 16 | /* 17 | Vetores uados para associar o botão com a cor do LED 18 | e nota musical correspondente: 19 | ------------------------------------------------ 20 | | Índice | Botão | LED | Nota | 21 | ------------------------------------------------ 22 | | [0] | botão 8 | led 2 (verde) | DÓ | 23 | ------------------------------------------------ 24 | | [1] | botão 9 | led 3 (vermelho) | RÉ | 25 | ------------------------------------------------ 26 | | [2] | botão 10 | led 4 (azul) | MI | 27 | ------------------------------------------------ 28 | | [3] | botão 11 | led 5 (amarelo) | FÁ | 29 | ------------------------------------------------ 30 | */ 31 | int botoes[4] = {8, 9, 10, 11}; 32 | int leds[4] = {2, 3, 4, 5}; 33 | int tons[4] = {262, 294, 330, 349}; 34 | 35 | // variáveis usadas para determinar a dificuldade do jogo 36 | int dificuldade1 = 1000; // tempo de espera da rodada 37 | int dificuldade2 = 300; // velocidade de reprodução da sequência 38 | int dificuldade3 = 200; // velocidade de reprodução da sequência 39 | 40 | // variáveis usadas no apoio a lógica do jogo 41 | int rodada = 0; 42 | int passo = 0; 43 | int botaoPressionado = 0; 44 | bool gameOver = false; 45 | 46 | void setup() { 47 | // Leds 48 | pinMode(2, OUTPUT); 49 | pinMode(3, OUTPUT); 50 | pinMode(4, OUTPUT); 51 | pinMode(5, OUTPUT); 52 | // Buzzer 53 | pinMode(6, OUTPUT); 54 | // Botões 55 | pinMode(8, INPUT_PULLUP); 56 | pinMode(9, INPUT_PULLUP); 57 | pinMode(10, INPUT_PULLUP); 58 | pinMode(11, INPUT_PULLUP); 59 | // referência a inicialização da função random() 60 | randomSeed(analogRead(A0)); 61 | } 62 | 63 | void loop() { 64 | // validação GAME OVER 65 | if (gameOver == true) { 66 | efeito1(); 67 | } else { 68 | // lógica principal 69 | proximaRodada(); 70 | reproduzirSequencia(); 71 | aguardarJogador(); 72 | delay(dificuldade1); 73 | 74 | // aumentar a dificuldade à partir da 8ª rodada 75 | if (rodada > 7) { 76 | dificuldade1 = 500; 77 | dificuldade2 = 150; 78 | dificuldade3 = 100; 79 | } 80 | 81 | // vencedor (jogador chegou até a última rodada) 82 | if (rodada == 15) { 83 | efeito3(); 84 | gameOver = true; 85 | } 86 | } 87 | } 88 | 89 | /* Função que sorteia a sequência da próxima rodada */ 90 | void proximaRodada() { 91 | sequencia[rodada] = random(4); 92 | rodada = rodada + 1; 93 | } 94 | 95 | /* Função que reproduz a sequência da rodada */ 96 | void reproduzirSequencia() { 97 | for (int i = 0; i < rodada; i++) { 98 | tone(6, tons[sequencia[i]]); 99 | digitalWrite(leds[sequencia[i]], HIGH); 100 | delay(dificuldade2); 101 | noTone(6); 102 | digitalWrite(leds[sequencia[i]], LOW); 103 | delay(dificuldade3); 104 | } 105 | } 106 | 107 | /* Função que aguarda o jogador */ 108 | void aguardarJogador() { 109 | for (int i = 0; i < rodada; i++) { 110 | bool jogadaEfetuada = false; 111 | while (!jogadaEfetuada) { 112 | for (int i = 0; i <= 3; i++) { 113 | if (digitalRead(botoes[i]) == 0) { 114 | botaoPressionado = i; 115 | tone(6, tons[i]); 116 | digitalWrite(leds[i], HIGH); 117 | delay(300); 118 | digitalWrite(leds[i], LOW); 119 | noTone(6); 120 | jogadaEfetuada = true; 121 | } 122 | } 123 | } 124 | //verificar a jogada 125 | if (sequencia[passo] != botaoPressionado) { 126 | efeito2(); 127 | gameOver = true; 128 | break; 129 | } 130 | passo = passo + 1; 131 | } 132 | passo = 0; 133 | } 134 | 135 | /***** Efeitos luminosos / sonoros *****/ 136 | 137 | /* Game over */ 138 | void efeito1() { 139 | digitalWrite(2, HIGH); 140 | digitalWrite(3, HIGH); 141 | digitalWrite(4, HIGH); 142 | digitalWrite(5, HIGH); 143 | delay(1000); 144 | digitalWrite(2, LOW); 145 | digitalWrite(3, LOW); 146 | digitalWrite(4, LOW); 147 | digitalWrite(5, LOW); 148 | delay(1000); 149 | } 150 | 151 | /* Errou a sequência */ 152 | void efeito2() { 153 | for (int i = 0; i <= 3; i++) { 154 | tone (6, 70); 155 | digitalWrite(leds[i], HIGH); 156 | delay(100); 157 | digitalWrite(leds[i], LOW); 158 | noTone(6); 159 | } 160 | } 161 | 162 | /* Campeão !!! */ 163 | void efeito3() { 164 | // melodia (notas musicais) 165 | int nota[] = {660, 660, 660, 510, 660, 770, 380, 510, 380, 320, 440, 480, 450, 430, 380, 660, 760, 860, 700, 760, 660, 520, 580, 480, 510, 380, 320, 440, 480, 450, 430, 380, 660, 760, 860, 700, 760, 660, 520, 580, 480, 500, 760, 720, 680, 620, 650, 380, 430, 500, 430, 500, 570, 500, 760, 720, 680, 620, 650, 1020, 1020, 1020, 380, 500, 760, 720, 680, 620, 650, 380, 430, 500, 430, 500, 570, 585, 550, 500, 380, 500, 500, 500, 500, 760, 720, 680, 620, 650, 380, 430, 500, 430, 500, 570, 500, 760, 720, 680, 620, 650, 1020, 1020, 1020, 380, 500, 760, 720, 680, 620, 650, 380, 430, 500, 430, 500, 570, 585, 550, 500, 380, 500, 500, 500, 500, 500, 500, 500, 580, 660, 500, 430, 380, 500, 500, 500, 500, 580, 660, 870, 760, 500, 500, 500, 500, 580, 660, 500, 430, 380, 660, 660, 660, 510, 660, 770, 380}; 166 | // duraçao de cada nota da melodia 167 | int duracaoNota[] = {100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 80, 100, 100, 100, 80, 50, 100, 80, 50, 80, 80, 80, 80, 100, 100, 100, 100, 80, 100, 100, 100, 80, 50, 100, 80, 50, 80, 80, 80, 80, 100, 100, 100, 100, 150, 150, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 150, 200, 80, 80, 80, 100, 100, 100, 100, 100, 150, 150, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 150, 150, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 150, 200, 80, 80, 80, 100, 100, 100, 100, 100, 150, 150, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 60, 80, 60, 80, 80, 80, 80, 80, 80, 60, 80, 60, 80, 80, 80, 80, 80, 60, 80, 60, 80, 80, 80, 80, 80, 80, 100, 100, 100, 100, 100, 100, 100}; 168 | // pausa depois que cada nota da melodia é reproduzida 169 | int pausaNota[] = {150, 300, 300, 100, 300, 550, 575, 450, 400, 500, 300, 330, 150, 300, 200, 200, 150, 300, 150, 350, 300, 150, 150, 500, 450, 400, 500, 300, 330, 150, 300, 200, 200, 150, 300, 150, 350, 300, 150, 150, 500, 300, 100, 150, 150, 300, 300, 150, 150, 300, 150, 100, 220, 300, 100, 150, 150, 300, 300, 300, 150, 300, 300, 300, 100, 150, 150, 300, 300, 150, 150, 300, 150, 100, 420, 450, 420, 360, 300, 300, 150, 300, 300, 100, 150, 150, 300, 300, 150, 150, 300, 150, 100, 220, 300, 100, 150, 150, 300, 300, 300, 150, 300, 300, 300, 100, 150, 150, 300, 300, 150, 150, 300, 150, 100, 420, 450, 420, 360, 300, 300, 150, 300, 150, 300, 350, 150, 350, 150, 300, 150, 600, 150, 300, 350, 150, 150, 550, 325, 600, 150, 300, 350, 150, 350, 150, 300, 150, 600, 150, 300, 300, 100, 300, 550, 575}; 170 | for (int i = 0; i < 156; i++) { 171 | tone(6, nota[i], duracaoNota[i]); 172 | digitalWrite(2, HIGH); 173 | digitalWrite(3, HIGH); 174 | digitalWrite(4, HIGH); 175 | digitalWrite(5, HIGH); 176 | delay(15); 177 | digitalWrite(2, LOW); 178 | digitalWrite(3, LOW); 179 | digitalWrite(4, LOW); 180 | digitalWrite(5, LOW); 181 | delay(pausaNota[i]); 182 | noTone(6); 183 | } 184 | } 185 | -------------------------------------------------------------------------------- /ver 3.0/genius_v3.ino: -------------------------------------------------------------------------------- 1 | /** 2 | Jogo de memória GENIUS (Simon) 3 | @author Professor José de Assis 4 | @version 3.0 5 | @link https://roboticapratica.com.br/arduino.html 6 | 7 | /* 8 | Vetor usado para armazenar a sequência da rodada. 9 | "12" é o número máximo de rodadas (0 a 11). 10 | Você pode aumentar este valor para deixar o jogo 11 | mais difícil, neste caso alterar também a linha 81. 12 | */ 13 | int sequencia[12] = {}; 14 | 15 | /* 16 | Vetores usados para associar o botão com a cor do LED 17 | e nota musical correspondente: 18 | ------------------------------------------------ 19 | | Índice | Botão | LED | Nota | 20 | ------------------------------------------------ 21 | | [0] | botão 8 | led 2 (verde) | DÓ | 22 | ------------------------------------------------ 23 | | [1] | botão 9 | led 3 (vermelho) | RÉ | 24 | ------------------------------------------------ 25 | | [2] | botão 10 | led 4 (azul) | MI | 26 | ------------------------------------------------ 27 | | [3] | botão 11 | led 5 (amarelo) | FÁ | 28 | ------------------------------------------------ 29 | */ 30 | int botoes[4] = { 8, 9, 10, 11 }; 31 | int leds[4] = { 2, 3, 4, 5 }; 32 | int tons[4] = { 262, 294, 330, 349 }; 33 | 34 | // variáveis usadas para determinar a dificuldade do jogo 35 | int dificuldade1 = 1000; // tempo de espera da rodada 36 | int dificuldade2 = 300; // velocidade de reprodução da sequência 37 | int dificuldade3 = 200; // velocidade de reprodução da sequência 38 | 39 | // variáveis usadas no apoio a lógica do jogo 40 | int rodada = 0; 41 | int passo = 0; 42 | int botaoPressionado = 0; 43 | bool gameOver = false; 44 | 45 | void setup() { 46 | // Leds 47 | pinMode(2, OUTPUT); 48 | pinMode(3, OUTPUT); 49 | pinMode(4, OUTPUT); 50 | pinMode(5, OUTPUT); 51 | // Buzzer 52 | pinMode(6, OUTPUT); 53 | // Botões 54 | pinMode(8, INPUT_PULLUP); 55 | pinMode(9, INPUT_PULLUP); 56 | pinMode(10, INPUT_PULLUP); 57 | pinMode(11, INPUT_PULLUP); 58 | // referência a inicialização da função random() 59 | randomSeed(analogRead(A0)); 60 | } 61 | 62 | void loop() { 63 | // validação GAME OVER 64 | if (gameOver == true) { 65 | efeito1(); 66 | } else { 67 | // lógica principal 68 | proximaRodada(); 69 | reproduzirSequencia(); 70 | aguardarJogador(); 71 | delay(dificuldade1); 72 | 73 | // aumentar a dificuldade à partir da 8ª rodada 74 | if (rodada > 7) { 75 | dificuldade1 = 500; 76 | dificuldade2 = 150; 77 | dificuldade3 = 100; 78 | } 79 | 80 | // vencedor (jogador chegou até a última rodada) 81 | if (rodada == 12) { 82 | efeito3(); 83 | gameOver = true; 84 | } 85 | } 86 | } 87 | 88 | /* Função que sorteia a sequência da próxima rodada */ 89 | void proximaRodada() { 90 | sequencia[rodada] = random(4); 91 | rodada = rodada + 1; 92 | } 93 | 94 | /* Função que reproduz a sequência da rodada */ 95 | void reproduzirSequencia() { 96 | for (int i = 0; i < rodada; i++) { 97 | tone(6, tons[sequencia[i]]); 98 | digitalWrite(leds[sequencia[i]], HIGH); 99 | delay(dificuldade2); 100 | noTone(6); 101 | digitalWrite(leds[sequencia[i]], LOW); 102 | delay(dificuldade3); 103 | } 104 | } 105 | 106 | /* Função que aguarda o jogador */ 107 | void aguardarJogador() { 108 | for (int i = 0; i < rodada; i++) { 109 | bool jogadaEfetuada = false; 110 | while (!jogadaEfetuada) { 111 | for (int i = 0; i <= 3; i++) { 112 | if (digitalRead(botoes[i]) == 0) { 113 | botaoPressionado = i; 114 | tone(6, tons[i]); 115 | digitalWrite(leds[i], HIGH); 116 | delay(300); 117 | digitalWrite(leds[i], LOW); 118 | noTone(6); 119 | jogadaEfetuada = true; 120 | } 121 | } 122 | } 123 | //verificar a jogada 124 | if (sequencia[passo] != botaoPressionado) { 125 | efeito2(); 126 | gameOver = true; 127 | break; 128 | } 129 | passo = passo + 1; 130 | } 131 | passo = 0; 132 | } 133 | 134 | /***** Efeitos luminosos / sonoros *****/ 135 | 136 | /* Game over */ 137 | void efeito1() { 138 | digitalWrite(2, HIGH); 139 | digitalWrite(3, HIGH); 140 | digitalWrite(4, HIGH); 141 | digitalWrite(5, HIGH); 142 | delay(1000); 143 | digitalWrite(2, LOW); 144 | digitalWrite(3, LOW); 145 | digitalWrite(4, LOW); 146 | digitalWrite(5, LOW); 147 | delay(1000); 148 | } 149 | 150 | /* Errou a sequência */ 151 | void efeito2() { 152 | for (int i = 0; i <= 3; i++) { 153 | tone(6, 70); 154 | digitalWrite(leds[i], HIGH); 155 | delay(100); 156 | digitalWrite(leds[i], LOW); 157 | noTone(6); 158 | } 159 | delay(200); 160 | tone(6, 262); 161 | digitalWrite(3, HIGH); 162 | delay(300); 163 | tone(6, 196); 164 | digitalWrite(3, LOW); 165 | digitalWrite(4, HIGH); 166 | delay(300); 167 | tone(6, 165); 168 | digitalWrite(3, HIGH); 169 | digitalWrite(4, LOW); 170 | delay(300); 171 | tone(6, 220); 172 | digitalWrite(3, LOW); 173 | digitalWrite(4, HIGH); 174 | delay(300); 175 | tone(6, 247); 176 | digitalWrite(3, HIGH); 177 | digitalWrite(4, LOW); 178 | delay(400); 179 | tone(6, 220); 180 | digitalWrite(3, LOW); 181 | digitalWrite(4, HIGH); 182 | delay(300); 183 | tone(6, 208); 184 | digitalWrite(3, HIGH); 185 | digitalWrite(4, LOW); 186 | delay(300); 187 | tone(6, 233); 188 | digitalWrite(3, LOW); 189 | digitalWrite(4, HIGH); 190 | delay(400); 191 | tone(6, 208); 192 | digitalWrite(3, HIGH); 193 | digitalWrite(4, LOW); 194 | delay(400); 195 | tone(6, 131); 196 | digitalWrite(3, HIGH); 197 | digitalWrite(4, HIGH); 198 | delay(1800); 199 | digitalWrite(3, LOW); 200 | digitalWrite(4, LOW); 201 | noTone(6); 202 | } 203 | 204 | /* Campeão !!! */ 205 | void efeito3() { 206 | // melodia (notas musicais) 207 | int nota[] = { 660, 660, 660, 510, 660, 770, 380, 510, 380, 320, 440, 480, 450, 430, 380, 660, 760, 860, 700, 760, 660, 520, 580, 480, 510, 380, 320, 440, 480, 450, 430, 380, 660, 760, 860, 700, 760, 660, 520, 580, 480, 500, 760, 720, 680, 620, 650, 380, 430, 500, 430, 500, 570, 500, 760, 720, 680, 620, 650, 1020, 1020, 1020, 380, 500, 760, 720, 680, 620, 650, 380, 430, 500, 430, 500, 570, 585, 550, 500, 380, 500, 500, 500, 500, 760, 720, 680, 620, 650, 380, 430, 500, 430, 500, 570, 500, 760, 720, 680, 620, 650, 1020, 1020, 1020, 380, 500, 760, 720, 680, 620, 650, 380, 430, 500, 430, 500, 570, 585, 550, 500, 380, 500, 500, 500, 500, 500, 500, 500, 580, 660, 500, 430, 380, 500, 500, 500, 500, 580, 660, 870, 760, 500, 500, 500, 500, 580, 660, 500, 430, 380, 660, 660, 660, 510, 660, 770, 380 }; 208 | // duraçao de cada nota da melodia 209 | int duracaoNota[] = { 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 80, 100, 100, 100, 80, 50, 100, 80, 50, 80, 80, 80, 80, 100, 100, 100, 100, 80, 100, 100, 100, 80, 50, 100, 80, 50, 80, 80, 80, 80, 100, 100, 100, 100, 150, 150, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 150, 200, 80, 80, 80, 100, 100, 100, 100, 100, 150, 150, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 150, 150, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 150, 200, 80, 80, 80, 100, 100, 100, 100, 100, 150, 150, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 60, 80, 60, 80, 80, 80, 80, 80, 80, 60, 80, 60, 80, 80, 80, 80, 80, 60, 80, 60, 80, 80, 80, 80, 80, 80, 100, 100, 100, 100, 100, 100, 100 }; 210 | // pausa depois que cada nota da melodia é reproduzida 211 | int pausaNota[] = { 150, 300, 300, 100, 300, 550, 575, 450, 400, 500, 300, 330, 150, 300, 200, 200, 150, 300, 150, 350, 300, 150, 150, 500, 450, 400, 500, 300, 330, 150, 300, 200, 200, 150, 300, 150, 350, 300, 150, 150, 500, 300, 100, 150, 150, 300, 300, 150, 150, 300, 150, 100, 220, 300, 100, 150, 150, 300, 300, 300, 150, 300, 300, 300, 100, 150, 150, 300, 300, 150, 150, 300, 150, 100, 420, 450, 420, 360, 300, 300, 150, 300, 300, 100, 150, 150, 300, 300, 150, 150, 300, 150, 100, 220, 300, 100, 150, 150, 300, 300, 300, 150, 300, 300, 300, 100, 150, 150, 300, 300, 150, 150, 300, 150, 100, 420, 450, 420, 360, 300, 300, 150, 300, 150, 300, 350, 150, 350, 150, 300, 150, 600, 150, 300, 350, 150, 150, 550, 325, 600, 150, 300, 350, 150, 350, 150, 300, 150, 600, 150, 300, 300, 100, 300, 550, 575 }; 212 | for (int i = 0; i < 156; i++) { 213 | tone(6, nota[i], duracaoNota[i]); 214 | digitalWrite(2, HIGH); 215 | digitalWrite(3, HIGH); 216 | digitalWrite(4, HIGH); 217 | digitalWrite(5, HIGH); 218 | delay(15); 219 | digitalWrite(2, LOW); 220 | digitalWrite(3, LOW); 221 | digitalWrite(4, LOW); 222 | digitalWrite(5, LOW); 223 | delay(pausaNota[i]); 224 | noTone(6); 225 | } 226 | } --------------------------------------------------------------------------------