Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Teclado de piano electrónico con canciones predefinidas

Componentes y suministros

Arduino UNO
× 1
LCD estándar Adafruit - 16x2 blanco sobre azul
× 1
Interruptor de botón SparkFun de 12 mm
× 8
Resistencia 220 ohmios
× 4
Resistencia de 560 ohmios
× 1
Resistencia 1k ohm
× 1
Resistencia de 4,7 K ohmios
× 1
Resistencia de 10k ohmios
× 3
Resistencia 1M ohm
× 1
Buzzer
× 1
LED (genérico)
× 1
Potenciómetro de una sola vuelta - 10k ohmios
× 1
Cables de puente (genéricos)
× 1
Breadboard (genérico)
× 1

Acerca de este proyecto

Introducción

Para empezar, debo informarles que soy completamente nuevo en el mundo de la electrónica. Tengo una experiencia decente en codificación, lo que ayuda, pero siempre estoy abierto a nuevas ideas y sugerencias para cualquiera de los proyectos que he creado.

Recientemente, he estado aprendiendo más sobre Piezo Buzzer y la codificación involucrada, y esta es mi creación basada en lo que he aprendido hasta ahora. Hay mucho espacio para la expansión con nuevas funciones o conmutadores, lo que planeo hacer más adelante, ¡pero por ahora estamos en el próximo desafío!

A continuación se muestra un video de cómo funciona el dispositivo, incluido el menú de canciones preestablecidas. Debo admitir que técnicamente las canciones 4 y 5 son iguales, pero qué puedo decir, ¡tengo la necesidad de crear cosas más grandes y mejores y escribir el código musical para más canciones no era una de ellas! La codificación básica tanto para los bucles principales como para los bucles de canciones individuales es bastante fácil de adaptar a sus propias ideas, así que siéntase libre de cambiar como mejor le parezca.

¡Véalo en acción!

Cómo configurar el hardware

Las teclas del piano ...

Los interruptores de las teclas del piano se conectaron mediante una escalera de resistencia. Las resistencias se colocan en orden secuencial, conectando cada interruptor a la alimentación. Para mi proyecto, elegí usar (en ohmios) 1M, 10k, 4.7K, 1K, 560 y 220. El primer interruptor de piano (a la izquierda) está conectado a la alimentación, y también al siguiente interruptor del circuito. El segundo interruptor está conectado a la resistencia más pequeña, y cada interruptor posterior se conecta a la siguiente resistencia más grande de la serie. El último interruptor conecta a tierra la conexión a través de una resistencia de 10k ohmios y también conecta los 7 interruptores al pin A0 de "entrada analógica" en el Arduino. El esquema principal define qué frecuencias de notas musicales están asociadas con cada tecla del piano. Para este proyecto, utilicé C4, D4, E4, F4, G4, A4 y B4, siendo C4 el interruptor más a la izquierda. ¡Cambie los valores de frecuencia o agregue interruptores adicionales para personalizar completamente su propio proyecto!

La pantalla LCD ...

Conecte las clavijas de la pantalla LCD de acuerdo con el diagrama de circuito a continuación. Conecte el pin 3 de la pantalla LCD al potenciómetro para controlar el contraste de la pantalla. Las clavijas exteriores del potenciómetro están conectadas a la alimentación y a tierra para completar este circuito. El pin 15 de la pantalla LCD está conectado a la alimentación a través de una resistencia de 220 ohmios. Si alguno de estos pines cambia en su propio proyecto, actualice el código en consecuencia.

El interruptor de menú ...

Conecte el interruptor de menú a la alimentación y conecte a tierra a través de una resistencia de 10K ohmios. Este interruptor también debe estar conectado al pin 7 en el Arduino para que pueda controlarlo mediante codificación.

El LED ...

El LED se utiliza para indicar cuando estás en el "modo de menú" y las teclas del piano se han desactivado. La luz LED se enciende una vez que se presiona el interruptor de menú. Conecte el ánodo (positivo) del LED al pin 6 del Arduino y conecte a tierra el LED a través de una resistencia de 220 ohmios.

El zumbador piezoeléctrico ...

Para integrar el zumbador piezoeléctrico, simplemente conecte un extremo al pin 8 de Arduino y el otro lado a tierra a través de una resistencia de 220 ohmios. La función "tono" en el código buscará este pin para reproducir la nota llamada.

Cómo funciona el código

La configuración ...

  • El boceto comienza importando las bibliotecas "LiquidCrystal.h" y "pitches.h" para que podamos hacer referencia a varios elementos de ellos más adelante en el código
  • A continuación, el código se configura definiendo un nombre para el interruptor de menú, determinando qué pines son entradas y salidas y configurando los valores de frecuencia para cada una de las 7 teclas del piano.
  • Se creó una nueva pestaña para cada canción individual en un esfuerzo por mantener mi código algo organizado y más fácil de entender, y para expandirlo más tarde. Si desea eliminar o agregar más canciones, asegúrese de cambiar también el código en el boceto principal del "Teclado electrónico".

El bucle principal ...

  • El teclado comienza con el LED apagado y todas las teclas del piano activas
  • Una vez que el bucle detecta que se ha presionado el botón de menú, desactivará las teclas del piano y encenderá el LED para indicar que está en el "modo de menú"

Accediendo al menú ...

  • Presione el botón de menú para recorrer las canciones presentes y presione cualquiera de las teclas del piano para comenzar a reproducir la canción que se muestra en la pantalla LCD
  • La pantalla LCD mostrará qué canción se está reproduciendo actualmente, luego regresará al mismo punto en el menú una vez que la canción haya terminado. Desde allí, puede reproducir o continuar en la lista de canciones disponibles.
  • Al hacer doble clic en el botón de menú, se reiniciará el menú desde el principio
  • Para volver a usar las teclas del piano, recorra el resto de las canciones en el menú. Una vez que la pantalla LCD esté en blanco y el LED esté apagado, las teclas del piano volverán a funcionar.

Código

  • Teclado electrónico
  • Song1
  • Song2
  • Song3
  • Song4
  • Song5
  • pitches.h
Teclado electrónico Arduino
El código principal
 // Pantalla LCD, interruptor y configuración de LED # incluye  #include "tonos.h" LiquidCrystal lcd (12, 11, 5, 4, 3, 2); const int LCDswitchPin =7; // define el nombre del interruptor de menú / LCD en LCDswitchState =0; // establece el estado del interruptor de menú / LCD en apagado / bajoint prevLCDswitchState =0; int blueLED =6; int LCDswitchCounter =0; // contador del número de pulsaciones de botones de menú // (este código cuenta las pulsaciones de botones de menú, las muestra en su computadora, // y comienza desde cero después de finalizar el "modo de menú". Actualmente no tiene ningún otro efecto // en este boceto , pero es un buen punto de partida para expandir el proyecto con // nuevas funciones más adelante // Teclas de notas musicales:establecer valores de frecuencia en notas [] ={262, 294, 330, 349, 392, 440, 494}; // Establecer 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 ); // El LED permanece apagado mientras las teclas del piano están encendidas} // finalizar la configuración /////////////////////////////////// ///////////// bucle vacío () {LCDswitchState =digitalRead (LCDswitchPin); int keyVal =analogRead (A0); Serial.println (keyVal); lcd.noDisplay (); digitalWrite (blueLED, LOW); // Apaga el LED cada vez que se inicia el bucle principal // ************** INICIO "LCDstart" CUANDO SE PULSA EL BOTÓN DE MENÚ ******** *** if (LCDswitchState ==HIGH) {digitalWrite (blueLED, HIGH); // Enciende el LED para mostrar que las teclas del piano están deshabilitadas y el dispositivo está en "modo menú" lcd.display (); lcd.clear (); LCDstart (); } // ********************************************* *********************** ////// NOTAS DEL TECLADO Y DECLARACIONES DE FRECUENCIA //////// Utilice la escalera de resistencia que creó para cambiar el voltaje de cada botón de tecla del piano // 220 ohm =C5 // 560 ohm =D5 // 1K ohm =E5 // etc ... if (keyVal ==1023) {tone (8, notes [0]); // C} // finaliza if else if (keyVal> =990 &keyVal <=1010) {tone (8, notes [1]); // D} // fin else if else if (keyVal> =960 &&keyVal <=980) {tone (8, notes [2]); // E} // fin else if else if (keyVal> =900 &&keyVal <=945) {tone (8, notes [3]); // F} // finaliza else if else if (keyVal> =650 &&keyVal <=710) {tone (8, notes [4]); // G} // fin else if else if (keyVal> =500 &&keyVal <=550) {tone (8, notes [5]); // A} // finaliza else if else if (keyVal> =5 &&keyVal <=10) {tone (8, notes [6]); // B} // fin else if else if (keyVal <=1) {// si no se presiona ningún interruptor, no toque el tono noTone (8); } // fin else if} // fin del bucle de tono de frecuencia ///////////////////////////////////// //////////////// void LCDstart () {int keyVal =analogRead (A0); LCDswitchState =digitalRead (LCDswitchPin); // verifica el estado del botón de menú while (LCDswitchState ==LOW) {// continúa el bucle mientras el botón de menú no está presionado LCDswitchState =digitalRead (LCDswitchPin); // comprobar el estado del botón de menú cada vez que se inicia el bucle // ************* INICIAR LA CANCIÓN 1 TÍTULO LOOP ******************* * if (LCDswitchState ==HIGH) {// si se presiona el botón de menú, entonces ... LCDswitchCounter ++; // establece el recuento de botones en 1 Serial.print ("número de pulsaciones de botón:"); Serial.println (LCDswitchCounter); retraso (300); // min. el tiempo hasta que los conteos agregue 1 título más Song1 (); lcd.clear (); descanso; } // ************* ELSE SHOW MENU **************** else {// si no se presiona el botón de menú, entonces ... LCDswitchCounter =0; // establece el recuento de botones de menú en 0 lcd.clear (); lcd.setCursor (0, 0); lcd.print ("CUAL CANCIÓN SERÍA"); lcd.setCursor (0, 1); lcd.print ("TE GUSTA JUGAR"); retraso (50); // volver a main}} // finalizar mientras} // finalizar LCDstart loop // ************* CANCIÓN 1 LOOP EMPIEZA AQUÍ ************* * void Song1title () {int keyVal =analogRead (A0); LCDswitchState =digitalRead (LCDswitchPin); // verifica el estado del botón de menú nuevamente while (LCDswitchState ==LOW) {// continúa el bucle mientras el botón de menú no está presionado LCDswitchState =digitalRead (LCDswitchPin); // comprobar el estado del botón de menú de nuevo // ************* INICIAR EL BUCLE DE TÍTULO DE LA CANCIÓN 2 ******************* if ( LCDswitchState ==HIGH) {// si se presiona el botón de menú, entonces ... LCDswitchCounter ++; // establece el recuento de botones en 2 Serial.print ("número de pulsaciones de botón:"); Serial.println (LCDswitchCounter); retraso (300); // min. el tiempo hasta que el conteo agrega 1 título más Song2 (); lcd.clear (); descanso; } else {// si no se presiona el botón del menú int keyVal =analogRead (A0); Serial.println (keyVal); if (keyVal> =2) {digitalWrite (blueLED, LOW); Canción1 (); descanso; } // finaliza si lcd.clear (); lcd.setCursor (0, 0); lcd.print ("SUPER MARIO BROS"); lcd.setCursor (0, 1); lcd.print ("CANCIÓN TEMÁTICA"); retraso (50); }} // finaliza mientras que la canción 1 -> 2} // finaliza el bucle del título de la canción1 // ************* EL BUCLE DE LA CANCIÓN 2 COMIENZA AQUÍ ************* * void Song2title () {int keyVal =analogRead (A0); LCDswitchState =digitalRead (LCDswitchPin); // verifica el estado del botón de menú nuevamente while (LCDswitchState ==LOW) {// continúa el bucle mientras el botón de menú no está presionado LCDswitchState =digitalRead (LCDswitchPin); // comprobar el estado del botón de menú de nuevo // ************* INICIAR EL BUCLE DE TÍTULO DE LA CANCIÓN 3 ******************** if ( LCDswitchState ==HIGH) {// si se presiona el botón de menú, entonces ... LCDswitchCounter ++; // establece el recuento de botones en 3 Serial.print ("número de pulsaciones de botón:"); Serial.println (LCDswitchCounter); retraso (300); // min. el tiempo hasta que los recuentos agrega 1 título más Song3 (); lcd.clear (); descanso; } else {// si no se presiona el botón del menú int keyVal =analogRead (A0); Serial.println (keyVal); if (keyVal> =2) {digitalWrite (blueLED, LOW); Song2 (); descanso; } // finaliza si lcd.clear (); lcd.setCursor (0, 0); lcd.print ("SUPER MARIO BROS"); lcd.setCursor (0, 1); lcd.print ("UNDERWORLD"); retraso (50); }} // finaliza mientras la canción 2 -> 3} // finaliza el bucle Song2title // ************* SONG 3 LOOP EMPIEZA AQUÍ ************* * void Song3title () {int keyVal =analogRead (A0); LCDswitchState =digitalRead (LCDswitchPin); // verifica el estado del botón de menú nuevamente while (LCDswitchState ==LOW) {// continúa el bucle mientras el botón de menú no está presionado LCDswitchState =digitalRead (LCDswitchPin); // comprobar el estado del botón de menú de nuevo // ************* INICIAR EL BUCLE DE TÍTULO DE LA CANCIÓN 4 ******************* if ( LCDswitchState ==HIGH) {// si se presiona el botón de menú, entonces ... LCDswitchCounter ++; // establece el recuento de botones en 4 Serial.print ("número de pulsaciones de botón:"); Serial.println (LCDswitchCounter); retraso (300); // min. el tiempo hasta que los conteos agrega 1 título más Song4 (); lcd.clear (); descanso; } else {// si no se presiona el botón del menú int keyVal =analogRead (A0); Serial.println (keyVal); if (keyVal> =2) {digitalWrite (blueLED, LOW); Song3 (); descanso; } // finaliza si lcd.clear (); lcd.setCursor (0, 0); lcd.print ("JEOPARDIA"); lcd.setCursor (0, 1); lcd.print ("CANCIÓN TEMÁTICA"); retraso (50); }} // finaliza mientras la canción 3 -> 4} // finaliza el bucle del título Song3 // ************* SONG 4 LOOP EMPIEZA AQUÍ ************* * void Song4title () {int keyVal =analogRead (A0); LCDswitchState =digitalRead (LCDswitchPin); // verifica el estado del botón de menú nuevamente while (LCDswitchState ==LOW) {// continúa el bucle mientras el botón de menú no está presionado LCDswitchState =digitalRead (LCDswitchPin); // comprobar el estado del botón de menú de nuevo // ************* INICIAR EL BUCLE DE TÍTULO DE LA CANCIÓN 5 ******************* if ( LCDswitchState ==HIGH) {// si se presiona el botón de menú, entonces ... LCDswitchCounter ++; // establece el recuento de botones en 5 Serial.print ("número de pulsaciones de botón:"); Serial.println (LCDswitchCounter); retraso (300); // min. el tiempo hasta que el conteo agrega 1 título más Song5 (); lcd.clear (); descanso; } else {// si no se presiona el botón del menú int keyVal =analogRead (A0); Serial.println (keyVal); if (keyVal> =2) {digitalWrite (blueLED, LOW); Song4 (); descanso; } // finaliza si lcd.clear (); lcd.setCursor (0, 0); lcd.print ("CANCIÓN 4"); lcd.setCursor (0, 1); lcd.print ("TÍTULO AQUÍ"); retraso (50); }} // finaliza mientras la canción 4 -> 5} // finaliza el bucle Song4title // ************* SONG 5 LOOP EMPIEZA AQUÍ ************* * Void Song5title () {int keyVal =analogRead (A0); LCDswitchState =digitalRead (LCDswitchPin); // verifica el estado del botón de menú nuevamente while (LCDswitchState ==LOW) {// continúa el bucle mientras el botón de menú no está presionado LCDswitchState =digitalRead (LCDswitchPin); // comprobar el estado del botón de menú de nuevo // ************* INICIAR EL BUCLE DE TÍTULO DE LA CANCIÓN 4 ******************* if ( LCDswitchState ==HIGH) {// si se presiona el botón de menú, entonces ... LCDswitchCounter =0; // establecer el recuento de botones en 0 Serial.print ("número de pulsaciones de botones:"); Serial.println (LCDswitchCounter); retraso (300); // min. el tiempo hasta que los conteos agrega 1 lcd.clear () más; } else {// si no se presiona el botón del menú int keyVal =analogRead (A0); Serial.println (keyVal); if (keyVal> =2) {digitalWrite (blueLED, LOW); Song5 (); descanso; } // finaliza si lcd.clear (); lcd.setCursor (0, 0); lcd.print ("CANCIÓN 5"); lcd.setCursor (0, 1); lcd.print ("TÍTULO AQUÍ"); retraso (50); }} // finaliza mientras la canción 4 -> 5} // finaliza el bucle Song5title 
Song1 Arduino
Código de la 1ª canción. Actualmente tiene cargada la canción temática de Mario Bros.
 // ***************** CANCIÓN 1 NOTAS AQUÍ ************** *********** ///////////////////////////////////////// //////////////////////////////////////////////////// /////////////////////// TUTORIAL COMPLETO SOBRE CÓMO CREAR LAS CANCIONES DE MARIO SE PUEDE ENCONTRAR AQUÍ:///////////// /////////////////////// http://www.linuxcircle.com/2013/03/31/playing-mario-bros-tune-with-arduino-and -piezo-zumbador / /////////////////////////////////////////////// //////////////////////////////////////////////////// //////// void Song1 () {lcd.clear (); // notas en la melodía:int melody [] ={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}; // duraciones de las notas:4 =negra, 8 =corchea, 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 ("Reproduciendo ahora ..."); lcd.setCursor (0, 1); lcd.print ("CANCIÓN TEMÁTICA DE MARIO"); int tamaño =tamaño de (melodía) / tamaño de (int); for (int thisNote =0; thisNote  
Song2 Arduino
Código para la 2da canción. Actualmente tiene cargada la Canción de Mario Bros Underworld.
 // ***************** CANCIÓN 2 NOTAS AQUÍ *************** *********** ///////////////////////////////////////// //////////////////////////////////////////////////// /////////////////////// TUTORIAL COMPLETO SOBRE CÓMO CREAR LAS CANCIONES DE MARIO SE PUEDE ENCONTRAR AQUÍ:///////////// /////////////////////// http://www.linuxcircle.com/2013/03/31/playing-mario-bros-tune-with-arduino-and -piezo-zumbador / /////////////////////////////////////////////// //////////////////////////////////////////////////// //////// void Song2 () {lcd.clear (); // notas en la melodía:int melody [] ={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, 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}; // duraciones de notas:4 =negra, 8 =corchea, 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 ("Reproduciendo ahora ..."); lcd.setCursor (0, 1); lcd.print ("MARIO UNDERWORLD"); int tamaño =tamaño de (melodía) / tamaño de (int); for (int thisNote =0; thisNote  
Song3 Arduino
Código para la tercera canción. Actualmente tiene cargada la canción temática Jeopardy.
 // ***************** CANCIÓN 3 NOTAS AQUÍ **************** ********** void Song3 () {lcd.clear (); // notas en la melodía: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 la línea 1 y 2 NOTE_C3, NOTE_F3, NOTE_3G3, 0, NOTA_C3, NOTE_F3, NOTE_3G3, , NOTE_E3, NOTE_D3, NOTE_CS3, NOTE_C3}; // duraciones de las notas:4 =negra, 8 =corchea, 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, // repita la línea 1 y 2 4, 4, 2, 4, 8, 8, 4 , 4, 4, 4, 4, 4, 0}; lcd.setCursor (1, 0); lcd.print ("Reproduciendo ahora ..."); lcd.setCursor (0, 1); lcd.print ("JEOPARDIA"); for (int thisNote =0; noteDurations [thisNote]! =0; thisNote ++) {// para calcular la duración de la nota, tome un segundo // dividido por el tipo de nota. //p.ej. negra =1000/4, corchea =1000/8, etc. int noteDuration =2000 / noteDurations [thisNote]; tono (8, melodía [thisNote], noteDuration * 0.9); // para distinguir las notas, establezca un tiempo mínimo entre ellas. // la duración de la nota + 30% parece funcionar bien:// int pauseBetweenNotes =noteDuration * 1.30; // retraso (pauseBetweenNotes); retraso (noteDuration); } Song3title (); } // finaliza el bucle Song3 
Song4 Arduino
Código para la cuarta canción. Actualmente tiene cargada una melodía breve y genérica.
 // ***************** CANCIÓN 4 NOTAS AQUÍ *************** *********** void Song4 () {lcd.clear (); // notas en la melodía:int melody [] ={NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 }; // duraciones de las notas:4 =negra, 8 =corchea, etc.:int noteDurations [] ={4, 8, 8, 4, 4, 4, 4, 4}; lcd.setCursor (1, 0); lcd.print ("Reproduciendo ahora ..."); lcd.setCursor (0, 1); lcd.print ("TÍTULO DE LA CANCIÓN 4"); int thisNote =0; // para calcular la duración de la nota, tome un segundo // dividido por el tipo de nota. //p.ej. negra =1000/4, corchea =1000/8, etc. for (int thisNote =0; thisNote <8; thisNote ++) {// para calcular la duración de la nota, tome un segundo // dividido por el tipo de nota. //p.ej. negra =1000/4, corchea =1000/8, etc. int noteDuration =1000 / noteDurations [thisNote]; tono (8, melodía [thisNote], noteDuration); // para distinguir las notas, establezca un tiempo mínimo entre ellas. // la duración de la nota + 30% parece funcionar bien:int pauseBetweenNotes =noteDuration * 1.30; delay (pauseBetweenNotes); noTone (8); // detiene la reproducción del tono:} // finaliza paraSong4title (); } // finaliza el bucle Song4 
Song5 Arduino
Código para la quinta canción. Actualmente tiene cargada una melodía breve y genérica.
 // ***************** CANCIÓN 5 NOTAS AQUÍ *************** *********** void Song5 () {lcd.clear (); // notas en la melodía:int melody [] ={NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 }; // duraciones de las notas:4 =negra, 8 =corchea, etc.:int noteDurations [] ={4, 8, 8, 4, 4, 4, 4, 4}; lcd.setCursor (1, 0); lcd.print ("Reproduciendo ahora ..."); lcd.setCursor (0, 1); lcd.print ("TÍTULO DE LA CANCIÓN 5"); int thisNote =0; // para calcular la duración de la nota, tome un segundo // dividido por el tipo de nota. //p.ej. negra =1000/4, corchea =1000/8, etc. for (int thisNote =0; thisNote <8; thisNote ++) {// para calcular la duración de la nota, tome un segundo // dividido por el tipo de nota. //p.ej. negra =1000/4, corchea =1000/8, etc. int noteDuration =1000 / noteDurations [thisNote]; tono (8, melodía [thisNote], noteDuration); // para distinguir las notas, establezca un tiempo mínimo entre ellas. // la duración de la nota + 30% parece funcionar bien:int pauseBetweenNotes =noteDuration * 1.30; delay (pauseBetweenNotes); noTone (8); // detiene la reproducción del tono:} // finaliza paraSong5title (); } // finaliza el bucle Song5 
pitches.h Arduino
Biblioteca de notas musicales para canciones. Guárdelo en la misma carpeta que sus otros bocetos de teclado / canción.
 // ****************************** ***************** // ** DEFINIR NOTAS MUSICALES // *********************** ************************* # definir NOTE_B0 31 # definir NOTE_C1 33 # definir NOTE_CS1 35 # definir NOTE_D1 37 # definir NOTE_DS1 39 # definir NOTE_E1 41 # definir NOTE_F1 44 # definir NOTE_FS1 46 # definir NOTE_G1 49 # definir NOTE_GS1 52 # definir NOTE_A1 55 # definir NOTE_AS1 58 # definir NOTE_B1 62 # definir NOTE_C2 65 # definir NOTE_CS2 69 # definir NOTE_D2 73 # definir NOTE_DS2 78 # definir NOTE_E2 82 # definir 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 # definir NOTE_FS3 185 # definir NOTE_G3 196 # definir NOTE_GS3 208 # definir NOTE_A3 220 # definir NOTE_AS3 233 # definir NOTE_B3 247 # definir NOTE_C4 262 # definir NOTE_CS4 277 # definir NOTE_D4 294 # definir NOTE_DS4 311 # definir NOTE_E4 330 # definir 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 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 2960 # define NOTE_F7 2794 # define NOTE_FS7 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


Proceso de manufactura

  1. Introducción a TJBot
  2. Alerta de sed Alarma de planta
  3. Reloj Word en italiano
  4. Arduino + LED + Teclado MIDI + MuseScore =Tutor de piano
  5. Sensor de obstáculos simple con Arduino
  6. Medidor de kWh Sigfox
  7. Monitor de temperatura Bluetooth
  8. Mini radio estéreo con RDA5807
  9. Bloqueo controlado por gestos
  10. El IC complementario
  11. Mide tu tiempo de reacción