Teclado de piano eletrônico com músicas predefinidas
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 8 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Sobre este projeto
Introdução
Para começar, devo informar que sou completamente novo no mundo da eletrônica. Tenho uma boa experiência em codificação, o que ajuda, mas estou sempre aberto a novas idéias e sugestões para qualquer um dos projetos que criei.
Recentemente, tenho aprendido mais sobre o Piezo Buzzer e a codificação envolvida, e esta é minha criação com base no que aprendi até agora. Há muito espaço para expansão com novos recursos ou opções, o que pretendo fazer mais tarde, mas por enquanto é o próximo desafio!
Abaixo está um vídeo de como o dispositivo funciona, incluindo o menu de músicas predefinidas. Eu vou admitir, tecnicamente as músicas 4 e 5 são iguais, mas o que posso dizer, eu tenho o desejo de criar coisas maiores e melhores e escrever o código da música para mais músicas não era uma delas! A codificação básica para os loops principais e os loops de músicas individuais são muito fáceis de adaptar às suas próprias ideias, então sinta-se à vontade para mudar como quiser.
Veja em ação!
Como configurar o hardware
As teclas do piano ...
As chaves de piano foram conectadas usando uma escada de resistor. Os resistores são colocados em ordem sequencial, conectando cada chave à alimentação. Para meu projeto, optei por usar (em ohms) 1M, 10k, 4.7K, 1K, 560 e 220. O primeiro botão de piano (à esquerda) é conectado à alimentação e também ao próximo botão do circuito. A segunda chave é conectada ao menor resistor, e cada chave depois disso se conecta ao próximo maior resistor da série. A última chave aterra a conexão por meio de um resistor de 10k ohm e também conecta todas as 7 chaves ao pino A0 de "entrada analógica" no Arduino. O esboço principal define quais frequências de notas musicais estão associadas a cada tecla do piano. Para este projeto, usei C4, D4, E4, F4, G4, A4 e B4, com C4 sendo a chave mais à esquerda. Altere os valores de frequência ou adicione interruptores adicionais para personalizar totalmente seu próprio projeto!
A tela LCD ...
Conecte os pinos do LCD de acordo com o diagrama de circuito abaixo. Conecte o pino 3 do LCD ao potenciômetro para controlar o contraste da tela. Os pinos externos do potenciômetro são conectados à alimentação e aterramento para completar este circuito. O pino 15 do LCD está conectado à alimentação por meio de um resistor de 220 ohms. Se algum desses pinos mudar em seu próprio projeto, atualize o código de acordo.
A mudança de menu ...
Conecte a chave de menu à alimentação e aterre-a por meio de um resistor de 10K ohm. Essa chave também deve ser conectada ao pino 7 no Arduino para que você possa controlá-la por meio de codificação.
O LED ...
O LED é usado para indicar quando você está no "modo de menu" e as teclas do piano foram desativadas. A luz LED acende assim que o botão do menu é pressionado. Conecte o ânodo (positivo) do LED ao pino 6 do Arduino e aterre o LED por meio de um resistor de 220 ohms.
A campainha Piezo ...
Para integrar o Piezo Buzzer, basta conectar uma extremidade ao pino 8 do Arduino e a outra extremidade ao aterramento por meio de um resistor de 220 ohms. A função "tom" no código procurará esse pino para tocar a nota chamada.
Como funciona o código
A configuração ...
- O esboço começa importando as bibliotecas "LiquidCrystal.h" e "pitches.h" para que possamos fazer referência a vários itens delas posteriormente no código
- Em seguida, o código é configurado definindo um nome para o botão de menu, determinando quais pinos são entradas e saídas e configurando os valores de frequência para cada uma das 7 teclas do piano
- Uma nova guia foi criada para cada música individual em um esforço para manter meu código um pouco organizado e fácil de entender, e para expandir mais tarde. Se você quiser excluir ou adicionar mais músicas, certifique-se de alterar o código no esboço principal do "Teclado eletrônico" também.
O loop principal ...
- O teclado começa com o LED desligado e todas as teclas do piano ativas
- Assim que o loop detectar que o botão do menu foi pressionado, ele desativará as teclas do piano e acenderá o LED para indicar que você está no "modo menu"
Acessando o menu ...
- Pressione o botão de menu para percorrer as músicas presentes e pressione qualquer uma das teclas do piano para iniciar a reprodução da música exibida na tela LCD
- A tela LCD mostrará qual música está tocando no momento e, em seguida, retornará ao mesmo ponto no menu quando a música terminar de tocar. A partir daí, você pode reproduzir ou continuar na lista de músicas disponíveis.
- Clicar duas vezes no botão do menu irá reiniciar o menu desde o início
- Para voltar a usar as teclas do piano, percorra o restante das músicas no menu. Assim que a tela LCD ficar em branco e o LED apagado, as teclas do piano funcionarão novamente.
Código
- Teclado eletrônico
- Song1
- Song2
- Song3
- Song4
- Song5
- pitches.h
Teclado eletrônico Arduino
O código principal// Configuração de tela LCD, interruptor e LED # inclui#include "pitches.h" LiquidCrystal lcd (12, 11, 5, 4, 3, 2); const int LCDswitchPin =7; // define menu / opção LCD nameint LCDswitchState =0; // define o estado da chave do menu / LCD para desligado / lowint prevLCDswitchState =0; int blueLED =6; int LCDswitchCounter =0; // contador para o número de pressionamentos do botão do menu // (este código conta os pressionamentos do botão do menu, os exibe no seu computador, // e começa do zero após terminar o "modo de menu". atualmente não tem nenhum outro efeito // neste esboço , mas é um bom ponto de partida para expandir o projeto com // novos recursos mais tarde // Teclas de notas musicais - Definir valores de frequência notas inteiras [] ={262, 294, 330, 349, 392, 440, 494}; // Definir notas C, D, E, F, G, A, B //////////////////////////////////////// ////////// void setup () {Serial.begin (9600); lcd.begin (16, 2); pinMode (LCDswitchPin, INPUT); pinMode (blueLED, OUTPUT); digitalWrite (blueLED, LOW ); // LED permanece desligado enquanto as teclas do piano estão ligadas} // finalizar a configuração ///////////////////////////////////// ///////////// void loop () {LCDswitchState =digitalRead (LCDswitchPin); int keyVal =analogRead (A0); Serial.println (keyVal); lcd.noDisplay (); digitalWrite (blueLED, LOW); // Desligue o LED toda vez que o loop principal for iniciado // ************** INICIE "LCDstart" QUANDO O BOTÃO DO MENU É PRESSIONADO ******** *** if (LCDswitchState ==HIGH) {digitalWrite (blueLED, HIGH); // Liga o LED para mostrar que as teclas do piano estão desabilitadas e o dispositivo está no "modo menu" lcd.display (); lcd.clear (); LCDstart (); } // *********************************************** ************************* ////// NOTAS DE TECLADO E DECLARAÇÕES DE FREQUÊNCIA //////// Use a escada de resistor que você criou para alterar a tensão de cada botão de tecla de piano // 220 ohm =C5 // 560 ohm =D5 // 1K ohm =E5 // etc ... if (keyVal ==1023) {tone (8, notas [0]); // C} // fim if else if (keyVal> =990 &keyVal <=1010) {tone (8, notas [1]); // D} // fim else if else if (keyVal> =960 &&keyVal <=980) {tone (8, notas [2]); // E} // fim else if else if (keyVal> =900 &&keyVal <=945) {tone (8, notas [3]); // F} // fim else if else if (keyVal> =650 &&keyVal <=710) {tone (8, notas [4]); // G} // fim else if else if (keyVal> =500 &&keyVal <=550) {tone (8, notas [5]); // A} // fim else if else if (keyVal> =5 &&keyVal <=10) {tone (8, notas [6]); // B} // fim else if else if (keyVal <=1) {// se nenhum interruptor for pressionado, não reproduz o tom noTone (8); } // fim do senão if} // fim do loop de tom de frequência /////////////////////////////////////// //////////////// void LCDstart () {int keyVal =analogRead (A0); LCDswitchState =digitalRead (LCDswitchPin); // verifica o estado do botão do menu enquanto (LCDswitchState ==LOW) {// continua o loop enquanto o botão do menu não é pressionado LCDswitchState =digitalRead (LCDswitchPin); // verificar o estado do botão de menu toda vez que o loop começar // ************* START SONG 1 TITLE LOOP ******************* * if (LCDswitchState ==HIGH) {// se o botão do menu for pressionado, então ... LCDswitchCounter ++; // define a contagem do botão para 1 Serial.print ("número de pressionamentos de botão:"); Serial.println (LCDswitchCounter); atraso (300); // min. o tempo até a contagem adiciona mais 1 Song1title (); lcd.clear (); pausa; } // ************* ELSE SHOW MENU **************** else {// se o botão do menu não for pressionado, então ... LCDswitchCounter =0; // define a contagem do botão do menu para 0 lcd.clear (); lcd.setCursor (0, 0); lcd.print ("QUE CANÇÃO IRIA"); lcd.setCursor (0, 1); lcd.print ("VOCÊ GOSTA DE JOGAR"); atraso (50); // retorna ao principal}} // termina enquanto} // termina o loop LCDstart // ************* CANÇÃO 1 LOOP COMEÇA AQUI ************* * void Song1title () {int keyVal =analogRead (A0); LCDswitchState =digitalRead (LCDswitchPin); // verifique o estado do botão do menu novamente enquanto (LCDswitchState ==LOW) {// continua o loop enquanto o botão do menu não é pressionado LCDswitchState =digitalRead (LCDswitchPin); // verificar o estado do botão de menu novamente // ************* INICIAR SONG 2 TITLE LOOP ******************** if ( LCDswitchState ==HIGH) {// se o botão do menu for pressionado, então ... LCDswitchCounter ++; // define a contagem do botão para 2 Serial.print ("número de pressionamentos de botão:"); Serial.println (LCDswitchCounter); atraso (300); // min. tempo até a contagem adiciona mais 1 Song2title (); lcd.clear (); pausa; } else {// se o botão do menu não for pressionado int keyVal =analogRead (A0); Serial.println (keyVal); if (keyVal> =2) {digitalWrite (blueLED, LOW); Song1 (); pausa; } // termina se lcd.clear (); lcd.setCursor (0, 0); lcd.print ("SUPER MARIO BROS"); lcd.setCursor (0, 1); lcd.print ("TEMA CANÇÃO"); atraso (50); }} // termina enquanto a música 1 -> 2} // termina o loop Song1title // ************* CANÇÃO 2 LOOP COMEÇA AQUI ************* * void Song2title () {int keyVal =analogRead (A0); LCDswitchState =digitalRead (LCDswitchPin); // verifique o estado do botão do menu novamente enquanto (LCDswitchState ==LOW) {// continua o loop enquanto o botão do menu não é pressionado LCDswitchState =digitalRead (LCDswitchPin); // verifique o estado do botão do menu novamente // ************* INICIAR SONG 3 TITLE LOOP ******************** if ( LCDswitchState ==HIGH) {// se o botão do menu for pressionado, então ... LCDswitchCounter ++; // define a contagem do botão para 3 Serial.print ("número de pressionamentos de botão:"); Serial.println (LCDswitchCounter); atraso (300); // min. tempo até a contagem adiciona mais 1 Song3title (); lcd.clear (); pausa; } else {// se o botão do menu não for pressionado int keyVal =analogRead (A0); Serial.println (keyVal); if (keyVal> =2) {digitalWrite (blueLED, LOW); Song2 (); pausa; } // termina se lcd.clear (); lcd.setCursor (0, 0); lcd.print ("SUPER MARIO BROS"); lcd.setCursor (0, 1); lcd.print ("UNDERWORLD"); atraso (50); }} // termina enquanto a música 2 -> 3} // termina o loop Song2title // ************* CANÇÃO 3 LOOP COMEÇA AQUI ************* * void Song3title () {int keyVal =analogRead (A0); LCDswitchState =digitalRead (LCDswitchPin); // verifique o estado do botão do menu novamente enquanto (LCDswitchState ==LOW) {// continua o loop enquanto o botão do menu não é pressionado LCDswitchState =digitalRead (LCDswitchPin); // verificar o estado do botão do menu novamente // ************* INICIAR SONG 4 TITLE LOOP ******************** if ( LCDswitchState ==HIGH) {// se o botão do menu for pressionado, então ... LCDswitchCounter ++; // define a contagem do botão para 4 Serial.print ("número de pressionamentos de botão:"); Serial.println (LCDswitchCounter); atraso (300); // min. tempo até a contagem adiciona mais 1 Song4title (); lcd.clear (); pausa; } else {// se o botão do menu não for pressionado int keyVal =analogRead (A0); Serial.println (keyVal); if (keyVal> =2) {digitalWrite (blueLED, LOW); Song3 (); pausa; } // termina se lcd.clear (); lcd.setCursor (0, 0); lcd.print ("JEOPARDIA"); lcd.setCursor (0, 1); lcd.print ("TEMA CANÇÃO"); atraso (50); }} // termina enquanto a música 3 -> 4} // termina o loop Song3title // ************* CANÇÃO 4 LOOP COMEÇA AQUI ************* * void Song4title () {int keyVal =analogRead (A0); LCDswitchState =digitalRead (LCDswitchPin); // verifique o estado do botão do menu novamente enquanto (LCDswitchState ==LOW) {// continua o loop enquanto o botão do menu não é pressionado LCDswitchState =digitalRead (LCDswitchPin); // verificar o estado do botão do menu novamente // ************* INICIAR SONG 5 TITLE LOOP ******************** if ( LCDswitchState ==HIGH) {// se o botão do menu for pressionado, então ... LCDswitchCounter ++; // define a contagem do botão para 5 Serial.print ("número de pressionamentos de botão:"); Serial.println (LCDswitchCounter); atraso (300); // min. tempo até a contagem adiciona mais 1 Song5title (); lcd.clear (); pausa; } else {// se o botão do menu não for pressionado int keyVal =analogRead (A0); Serial.println (keyVal); if (keyVal> =2) {digitalWrite (blueLED, LOW); Song4 (); pausa; } // termina se lcd.clear (); lcd.setCursor (0, 0); lcd.print ("SONG 4"); lcd.setCursor (0, 1); lcd.print ("TÍTULO AQUI"); atraso (50); }} // termina enquanto a música 4 -> 5} // termina o loop Song4title // ************* CANÇÃO 5 LOOP COMEÇA AQUI ************* * void Song5title () {int keyVal =analogRead (A0); LCDswitchState =digitalRead (LCDswitchPin); // verifique o estado do botão do menu novamente enquanto (LCDswitchState ==LOW) {// continua o loop enquanto o botão do menu não é pressionado LCDswitchState =digitalRead (LCDswitchPin); // verificar o estado do botão do menu novamente // ************* INICIAR SONG 4 TITLE LOOP ******************** if ( LCDswitchState ==HIGH) {// se o botão do menu for pressionado, então ... LCDswitchCounter =0; // define a contagem do botão para 0 Serial.print ("número de pressionamentos de botão:"); Serial.println (LCDswitchCounter); atraso (300); // min. tempo até a contagem adiciona mais 1 lcd.clear (); } else {// se o botão do menu não for pressionado int keyVal =analogRead (A0); Serial.println (keyVal); if (keyVal> =2) {digitalWrite (blueLED, LOW); Song5 (); pausa; } // termina se lcd.clear (); lcd.setCursor (0, 0); lcd.print ("SONG 5"); lcd.setCursor (0, 1); lcd.print ("TÍTULO AQUI"); atraso (50); }} // termina enquanto a música 4 -> 5} // termina o loop Song5title
Song1 Arduino
Código para a primeira música. Atualmente carrega a Música Tema do Mario Bros.// ***************** CANÇÃO 1 NOTAS AQUI *************** *********** ///////////////////////////////////////// //////////////////////////////////////////////////////// /////////////////////////// TUTORIAL COMPLETO SOBRE COMO CRIAR AS CANÇÕES DE MARIO PODEM SER ENCONTRADAS AQUI://///////////// /////////////////////// http://www.linuxcircle.com/2013/03/31/playing-mario-bros-tune-with-arduino-and -piezo-buzzer / /////////////////////////////////////////////// //////////////////////////////////////////////////////// //////// void Song1 () {lcd.clear (); // notas na melodia:melodia int [] ={NOTE_E7, NOTE_E7, 0, NOTE_E7, 0, NOTE_C7, NOTE_E7, 0, NOTE_G7, 0, 0, 0, NOTE_G6, 0, 0, 0, NOTE_C7, 0, 0, NOTE_G6, 0, 0, NOTE_E6, 0, 0, NOTE_A6, 0, NOTE_B6, 0, NOTE_AS6, NOTE_A6, 0, NOTE_G6, NOTE_E7, NOTE_G7, NOTE_A7, 0, NOTE_F7, NOTE_G7, 0, NOTE_E7, 0, NOTE_C7, NOTE_D7, NOTE_B6, 0, 0, NOTE_C7, 0, 0, NOTE_G6, 0, 0, NOTE_E6, 0, 0, NOTE_A6, 0, NOTE_B6, 0, NOTE_AS6, NOTE_A6, 0, NOTE_G6, NOTE_E7, NOTE_G7 , NOTE_A7, 0, NOTE_F7, NOTE_G7, 0, NOTE_E7, 0, NOTE_C7, NOTE_D7, NOTE_B6, 0, 0}; // durações das notas:4 =semínima, 8 =colcheia, etc.:int noteDurations [] ={ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 9, 9, 9, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 9, 9, 9, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,}; lcd.setCursor (1, 0); lcd.print ("Reproduzindo agora ..."); lcd.setCursor (0, 1); lcd.print ("MARIO THEME SONG"); tamanho int =sizeof (melodia) / sizeof (int); for (int thisNote =0; thisNoteSong2 Arduino
Código para a 2ª música. Atualmente carrega o Mario Bros Underworld Song.// ***************** SONG 2 NOTES HERE *************** *********** ///////////////////////////////////////// //////////////////////////////////////////////////////// /////////////////////////// TUTORIAL COMPLETO SOBRE COMO CRIAR AS CANÇÕES DE MARIO PODEM SER ENCONTRADAS AQUI://///////////// /////////////////////// http://www.linuxcircle.com/2013/03/31/playing-mario-bros-tune-with-arduino-and -piezo-buzzer / /////////////////////////////////////////////// //////////////////////////////////////////////////////// //////// void Song2 () {lcd.clear (); // notas na melodia:melodia int [] ={NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4, NOTE_AS3, NOTE_AS4, 0, 0, NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4, NOTE_AS3, NOTE_AS4, 0, 0, NOTE_F3, NOTE_F4, NOTE_D3, NOTE_D4, NOTE_DS3, NOTE_DS4, 0, 0, NOTE_F3, NOTE_F4, NOTE_D3, NOTE_D4, NOTE_DS3, NOTE_DS4, 0, NOTE_D4, NOTE_CS4, NOTE_DS4, NOTE_DS4, NOTE_GS3, NOTE_G3, NOTE_CS4, NOTE_C4, NOTE_FS4, NOTE_F4, NOTE_E3, NOTE_AS4, NOTE_A4, NOTE_GS4, NOTE_DS4, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_GS3, 0, 0, 0}; // durações das notas:4 =semínima, 8 =colcheia, etc.:int noteDurations [] ={12, 12, 12, 12, 12 , 12, 6, 3, 12, 12, 12, 12, 12, 12, 6, 3, 12, 12, 12, 12, 12, 12, 6, 3, 12, 12, 12, 12, 12, 12 , 6, 6, 18, 18, 18, 6, 6, 6, 6, 6, 6, 18, 18, 18, 18, 18, 18, 10, 10, 10, 10, 10, 10, 3, 3 , 3}; lcd.setCursor (1, 0); lcd.print ("Reproduzindo agora ..."); lcd.setCursor (0, 1); lcd.print ("MARIO UNDERWORLD"); tamanho int =sizeof (melodia) / sizeof (int); for (int thisNote =0; thisNoteSong3 Arduino
Código para a 3ª música. Atualmente tem a música tema do Jeopardy carregada.// ***************** CANÇÃO 3 NOTAS AQUI **************** ********** void Song3 () {lcd.clear (); // notas na melodia:int melody [] ={NOTE_C2, NOTE_F3, NOTE_C3, NOTE_A2, NOTE_A2, NOTE_C3, NOTE_F3, NOTE_C3, NOTE_C3, NOTE_F3, NOTE_C3, NOTE_F3, NOTE_AS3, NOTE_G3, NOTE_F3, NOTE_E3, NOTE_D3, NOTE_CS3, NOTE_C2, NOTE_F3, NOTE_C3, NOTE_A2, NOTE_A2, // repita as linhas 1 e 2 NOTE_C3, NOTE_F3, NOTE_C3, NOTE_AS3, 0, , NOTE_E3, NOTE_D3, NOTE_CS3, NOTE_C3}; // durações das notas:4 =semínima, 8 =colcheia, etc.:int noteDurations [] ={4, 4, 4, 8, 8, 4, 4, 2, 4, 4, 4, 4, 3, 8, 8, 8, 8, 8, 4, 4, 4, 8, 8, // repetir a linha 1 e 2 4, 4, 2, 4, 8, 8, 4 , 4, 4, 4, 4, 4, 0}; lcd.setCursor (1, 0); lcd.print ("Reproduzindo agora ..."); lcd.setCursor (0, 1); lcd.print ("JEOPARDIA"); for (int thisNote =0; noteDurations [thisNote]! =0; thisNote ++) {// para calcular a duração da nota, leve um segundo // dividido pelo tipo de nota. //por exemplo. semínima =1000/4, colcheia =1000/8, etc. int noteDuration =2000 / noteDurations [thisNote]; tom (8, melodia [thisNote], noteDuração * 0,9); // para distinguir as notas, defina um tempo mínimo entre elas. // a duração da nota + 30% parece funcionar bem:// int pauseBetweenNotes =noteDuration * 1.30; // atraso (pauseBetweenNotes); atraso (noteDuração); } Song3title (); } // fim do loop Song3Song4 Arduino
Código para a 4ª música. Atualmente tem uma melodia curta e genérica carregada.// ***************** CANÇÃO 4 NOTAS AQUI *************** *********** void Song4 () {lcd.clear (); // notas na melodia:int melody [] ={NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 }; // durações das notas:4 =semínima, 8 =colcheia, etc.:int noteDurations [] ={4, 8, 8, 4, 4, 4, 4, 4}; lcd.setCursor (1, 0); lcd.print ("Reproduzindo agora ..."); lcd.setCursor (0, 1); lcd.print ("SONG 4 TITLE"); int thisNote =0; // para calcular a duração da nota, leve um segundo // dividido pelo tipo de nota. //por exemplo. semínima =1000/4, colcheia =1000/8, etc. for (int thisNote =0; thisNote <8; thisNote ++) {// para calcular a duração da nota, leve um segundo // dividido pelo tipo de nota. //por exemplo. semínima =1000/4, colcheia =1000/8, etc. int noteDuration =1000 / noteDurations [thisNote]; tom (8, melodia [thisNote], noteDuração); // para distinguir as notas, defina um tempo mínimo entre elas. // a duração da nota + 30% parece funcionar bem:int pauseBetweenNotes =noteDuration * 1.30; atraso (pauseBetweenNotes); noTone (8); // interrompe a reprodução do tom:} // end forSong4title (); } // fim do loop Song4Song5 Arduino
Código para a 5ª música. Atualmente tem uma melodia curta e genérica carregada.// ***************** CANÇÃO 5 NOTAS AQUI *************** *********** void Song5 () {lcd.clear (); // notas na melodia:int melody [] ={NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 }; // durações das notas:4 =semínima, 8 =colcheia, etc.:int noteDurations [] ={4, 8, 8, 4, 4, 4, 4, 4}; lcd.setCursor (1, 0); lcd.print ("Reproduzindo agora ..."); lcd.setCursor (0, 1); lcd.print ("SONG 5 TITLE"); int thisNote =0; // to calculate the note duration, take one second // divided by the note type. //por exemplo. quarter note =1000 / 4, eighth note =1000/8, etc. for (int thisNote =0; thisNote <8; thisNote++) { // to calculate the note duration, take one second // divided by the note type. //por exemplo. quarter note =1000 / 4, eighth note =1000/8, etc. int noteDuration =1000 / noteDurations[thisNote]; tone(8, melody[thisNote], noteDuration); // para distinguir as notas, defina um tempo mínimo entre elas. // a duração da nota + 30% parece funcionar bem:int pauseBetweenNotes =noteDuration * 1.30; atraso (pauseBetweenNotes); noTone(8); // stop the tone playing:} // end forSong5title(); } // end Song5 looppitches.hArduino
Library of music notes for songs. Save in the same folder as your other keyboard/song sketches.//*************************************************//** DEFINE MUSIC NOTES//*************************************************#define NOTE_B0 31#define NOTE_C1 33#define NOTE_CS1 35#define NOTE_D1 37#define NOTE_DS1 39#define NOTE_E1 41#define NOTE_F1 44#define NOTE_FS1 46#define NOTE_G1 49#define NOTE_GS1 52#define NOTE_A1 55#define NOTE_AS1 58#define NOTE_B1 62#define NOTE_C2 65#define NOTE_CS2 69#define NOTE_D2 73#define NOTE_DS2 78#define NOTE_E2 82#define NOTE_F2 87#define NOTE_FS2 93#define NOTE_G2 98#define NOTE_GS2 104#define NOTE_A2 110#define NOTE_AS2 117#define NOTE_B2 123#define NOTE_C3 131#define NOTE_CS3 139#define NOTE_D3 147#define NOTE_DS3 156#define NOTE_E3 165#define NOTE_F3 175#define NOTE_FS3 185#define NOTE_G3 196#define NOTE_GS3 208#define NOTE_A3 220#define NOTE_AS3 233#define NOTE_B3 247#define NOTE_C4 262#define NOTE_CS4 277#define NOTE_D4 294#define NOTE_DS4 311#define NOTE_E4 330#define NOTE_F4 349#define NOTE_FS4 370#define NOTE_G4 392#define NOTE_GS4 415#define NOTE_A4 440#define NOTE_AS4 466#define NOTE_B4 494#define NOTE_C5 523#define NOTE_CS5 554#define NOTE_D5 587#define NOTE_DS5 622#define NOTE_E5 659#define NOTE_F5 698#define NOTE_FS5 740#define NOTE_G5 784#define NOTE_GS5 831#define NOTE_A5 880#define NOTE_AS5 932#define NOTE_B5 988#define NOTE_C6 1047#define NOTE_CS6 1109#define NOTE_D6 1175#define NOTE_DS6 1245#define NOTE_E6 1319#define NOTE_F6 1397#define NOTE_FS6 1480#define NOTE_G6 1568#define NOTE_GS6 1661#define NOTE_A6 1760#define NOTE_AS6 1865#define NOTE_B6 1976#define NOTE_C7 2093#define NOTE_CS7 2217#define NOTE_D7 2349#define NOTE_DS7 2489#define NOTE_E7 2637#define NOTE_F7 2794#define NOTE_FS7 2960#define NOTE_G7 3136#define NOTE_GS7 3322#define NOTE_A7 3520#define NOTE_AS7 3729#define NOTE_B7 3951#define NOTE_C8 4186#define NOTE_CS8 4435#define NOTE_D8 4699#define NOTE_DS8 4978
Esquemas
Processo de manufatura
- Introdução ao TJBot
- Alarme de planta de alerta de sede
- Word Clock italiano
- Arduino + LEDs + Teclado MIDI + MuseScore =Piano Tutor
- Sensor de obstáculo simples com Arduino
- Medidor Sigfox kWh
- Monitor de temperatura Bluetooth
- Mini rádio estéreo com RDA5807
- Bloqueio controlado por gestos
- Meça seu tempo de reação