Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* TITULO: Piano con teclado matricial capacitivo TTP229 de 16 canales y un zumbador
- AUTOR:
- MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
- - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
- - TWITTER: https://twitter.com/MarianoCampoGa
- - CORREO: marianodc83@gmail.com
- DESCRIPCIÓN DEL PROGRAMA
- Con este programa vamos a ser capaces de reproducir las notas Do, Do#, Re, Re#, Mi, Fa, Fa#, Sol,
- Sol#, La, La# y Si, desde la octava 2ª (LED_Blanco encendido) hasta la 6ª (LED_Azul encendido),
- mediante un zumbador piezoeléctrico activo, para poder crear así nuestras propias melodías.
- ESQUEMA DE CONEXION
- +-----+
- +----[PWR]-------------------| USB |--+
- | +-----+ |
- | GND/RST2 [ ][ ] |
- | MOSI2/SCK2 [ ][ ] A5/SCL[ ] |
- | 5V/MISO2 [ ][ ] A4/SDA[ ] |
- | AREF[ ] |
- | GND[ ] |
- | [ ]N/C SCK/13[ ] |
- | [ ]IOREF MISO/12[ ] |
- | [ ]RST MOSI/11[ ]~|
- | [ ]3V3 +---+ 10[ ]~| Zumbador(+)
- | [ ]5v -| A |- 9[ ]~| Pin SDO del teclado TTP229
- | [ ]GND -| R |- 8[ ] | Pin SCL del teclado TTP229
- | [ ]GND -| D |- |
- | [ ]Vin -| U |- 7[ ] |
- | -| I |- 6[ ]~| LED_Blanco(+)
- | [ ]A0 -| N |- 5[ ]~| LED_Verde(+)
- | [ ]A1 -| O |- 4[ ] | LED_Amarillo(+)
- | [ ]A2 +---+ INT1/3[ ]~| LED_Rojo(+)
- | [ ]A3 INT0/2[ ] | LED_Azul(+)
- | [ ]A4/SDA RST SCK MISO TX>1[ ] |
- | [ ]A5/SCL [ ] [ ] [ ] RX<0[ ] |
- | [ ] [ ] [ ] |
- | UNO_R3 GND MOSI 5V ____________/
- \_______________________/
- NOTAS:
- - Alimentación del teclado matricial capacitivo TTP229:
- - Pin VCC del teclado TTP229 --> +3,3V de Arduino.
- - Pin GND del teclado TTP229 --> GND de Arduino.
- - Cátodo(-) de todos los LED a GND a través de una R=220 omhs (difrente para cada LED).
- - Zumbador(-) a GND.
- */
- #define CLOCK_PIN 8
- #define DATA_PIN 9
- int boton;
- int zumbador = 10; // Pin digital con PWM para el zumbador
- int LED_Blanco = 6; // Pin digital para el lED_Blanco (Octava 2ª)
- int LED_Verde = 5; // Pin digital para el lED_Verde (Octava 3ª)
- int LED_Amarillo = 4; // Pin digital para el lED_Amarillo (Octava 4ª)
- int LED_Rojo = 3; // Pin digital para el lED_Rojo (Octava 5ª)
- int LED_Azul = 2; // Pin digital para el lED_Azul (Octava 6ª)
- // Variables auxiliares
- int i=0;
- int databit, button, contador;
- // Tiene cargados por defecto los valores de frecuencia de las notas de la Octava 2ª
- float frecuencia[ ] =
- {
- 65.40, 69.29, 73.41, 77.78, 82.40, 87.30, 92.49, 97.99, 103.82, 110.00, 116.54, 123.47
- }; // Octava 2ª por defecto
- // Valores de las frecuencias de las notas en diferentes octavas (de la 3ª a la 6ª)
- // {Do, Do#, Re, Re#, Mi, Fa, Fa#, Sol, Sol#, La, La#, Si}
- const float octava_3[ ] =
- {
- 130.81, 138.59, 146.83, 155.56, 164.81, 174.61, 184.99, 195.99, 207.65, 220.00, 233.08, 246.94
- };
- const float octava_4[ ] =
- {
- 261.62, 277.18, 293.66, 311.12, 329.62, 349.22, 369.99, 391.99, 415.30, 440.00, 466.16, 493.88
- };
- const float octava_5[ ] =
- {
- 523.25, 554.36, 587.33, 622.25, 659.25, 698.45, 739.98, 783.91, 830.60, 880.00, 932.32, 987.76
- };
- const float octava_6[ ] =
- {
- 1046.50, 1108.73, 1174.66, 1244.51, 1318.51, 1398.91, 1479.98, 1567.98, 1661.22, 1760.00, 1864.66, 1975.53
- };
- void setup()
- {
- Serial.begin(9600);
- pinMode(CLOCK_PIN, OUTPUT);
- pinMode(DATA_PIN, INPUT);
- pinMode(zumbador, OUTPUT);
- pinMode(LED_Blanco, OUTPUT);
- pinMode(LED_Verde, OUTPUT);
- pinMode(LED_Amarillo, OUTPUT);
- pinMode(LED_Rojo, OUTPUT);
- pinMode(LED_Azul, OUTPUT);
- digitalWrite(CLOCK_PIN, HIGH);
- // Enciendo el LED Blanco al iniciarse el programa (Octava 2ª)
- digitalWrite(LED_Blanco, HIGH);
- }
- void loop()
- {
- contador = 0;
- // Se comprueba el estado de las 16 teclas (canales)
- for (button = 1; button < 17; button++)
- {
- // Reloj activado
- digitalWrite(CLOCK_PIN, LOW);
- // Lee la tecla pulsada
- databit = digitalRead(DATA_PIN);
- // Si se encuentra alguna tecla a nivel BAJO es que está siendo pulsada
- if(digitalRead(DATA_PIN)==LOW)
- {
- boton = button;
- // Llamada a la función notas_octavas()
- notas_octavas(boton);
- contador = 1;
- }
- // Reloj desactivado
- digitalWrite(CLOCK_PIN, HIGH);
- };
- // Si no estamos pulsando ninguna tecla
- if(contador == 0)
- {
- noTone(zumbador); // El zumbador no suena
- }
- delay(100);
- }
- // Función que manda las notas al zumbador y selecciona las diferentes octavas
- void notas_octavas(int tecla)
- {
- // Dependiendo de la tecla pulsada desde la 1 a la 16
- switch (tecla)
- {
- case 1: // Nota: Do
- tone(zumbador, frecuencia[0]);
- break;
- case 2: // Nota: Do#
- tone(zumbador, frecuencia[1]);
- break;
- case 3: // Nota: Re
- tone(zumbador, frecuencia[2]);
- break;
- case 4: // Nota: Re#
- tone(zumbador, frecuencia[3]);
- break;
- case 5: // Nota: Mi
- tone(zumbador, frecuencia[4]);
- break;
- case 6: // Nota: Fa
- tone(zumbador, frecuencia[5]);
- break;
- case 7: // Nota: Fa#
- tone(zumbador, frecuencia[6]);
- break;
- case 8: // Nota: Sol
- tone(zumbador, frecuencia[7]);
- break;
- case 9: // Nota: Sol#
- tone(zumbador, frecuencia[8]);
- break;
- case 10: // Nota: La
- tone(zumbador, frecuencia[9]);
- break;
- case 11: // Nota: La#
- tone(zumbador, frecuencia[10]);
- break;
- case 12: // Nota: Si
- tone(zumbador, frecuencia[11]);
- break;
- case 13: // Octava 3ª
- // Pasamos a la matriz frecuencia los valores de la Octava 3ª
- for(i=0; i<12; i++)
- {
- frecuencia[i]=octava_3[i];
- }
- // LED Verde encendido, los demás apagados
- digitalWrite(LED_Blanco, LOW);
- digitalWrite(LED_Verde, HIGH);
- digitalWrite(LED_Amarillo, LOW);
- digitalWrite(LED_Rojo, LOW);
- digitalWrite(LED_Azul, LOW);
- break;
- case 14: // Octava 4ª
- // Pasamos a la matriz frecuencia los valores de la Octava 4ª
- for(i=0; i<12; i++)
- {
- frecuencia[i]=octava_4[i];
- }
- // LED Amarillo encendido, los demás apagados
- digitalWrite(LED_Blanco, LOW);
- digitalWrite(LED_Verde, LOW);
- digitalWrite(LED_Amarillo, HIGH);
- digitalWrite(LED_Rojo, LOW);
- digitalWrite(LED_Azul, LOW);
- break;
- case 15: // Octava 5ª
- // Pasamos a la matriz frecuencia los valores de la Octava 5ª
- for(i=0; i<12; i++)
- {
- frecuencia[i]=octava_5[i];
- }
- // LED Rojo encendido, los demás apagados
- digitalWrite(LED_Blanco, LOW);
- digitalWrite(LED_Verde, LOW);
- digitalWrite(LED_Amarillo, LOW);
- digitalWrite(LED_Rojo, HIGH);
- digitalWrite(LED_Azul, LOW);
- break;
- case 16: // Octava 6
- // Pasamos a la matriz frecuencia los valores de la Octava 6ª
- for(i=0; i<12; i++)
- {
- frecuencia[i]=octava_6[i];
- }
- // LED Azul encendido, los demás apagados
- digitalWrite(LED_Blanco, LOW);
- digitalWrite(LED_Verde, LOW);
- digitalWrite(LED_Amarillo, LOW);
- digitalWrite(LED_Rojo, LOW);
- digitalWrite(LED_Azul, HIGH);
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement