Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Teclado de piano eletrônico com músicas predefinidas

Componentes e suprimentos

Arduino UNO
× 1
Adafruit LCD padrão - 16x2 branco em azul
× 1
SparkFun Botão de pressão 12 mm
× 8
Resistor 220 ohm
× 4
Resistor 560 ohm
× 1
Resistor 1k ohm
× 1
Resistor 4,7 K ohm
× 1
Resistor 10k ohm
× 3
Resistor 1M ohm
× 1
Buzzer
× 1
LED (genérico)
× 1
Potenciômetro de volta única - 10k ohms
× 1
Fios de jumpers (genérico)
× 1
Breadboard (genérico)
× 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; thisNote  
Song2 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; thisNote  
Song3 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 Song3 
Song4 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 Song4 
Song5 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 loop
pitches.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

  1. Introdução ao TJBot
  2. Alarme de planta de alerta de sede
  3. Word Clock italiano
  4. Arduino + LEDs + Teclado MIDI + MuseScore =Piano Tutor
  5. Sensor de obstáculo simples com Arduino
  6. Medidor Sigfox kWh
  7. Monitor de temperatura Bluetooth
  8. Mini rádio estéreo com RDA5807
  9. Bloqueio controlado por gestos
  10. Meça seu tempo de reação