├── 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 | 
2 | 
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 | [](https://youtu.be/gYgGgox5Q4o?si=lEu-qmUlX2n5_YAi "Assistir no YouTube")
10 |
11 | 
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 | }
--------------------------------------------------------------------------------