Advertisement
Villalba2006

POST_56

Nov 28th, 2016
2,888
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.31 KB | None | 0 0
  1. /*  TITULO: Piano con teclado matricial capacitivo TTP229 de 16 canales y un zumbador
  2.  
  3.     AUTOR:
  4.    
  5.     MARIANO DEL CAMPO GARCÍA (@2016) --> INGENIERO TÉCNICO INDUSTRIAL ESPECIALIDAD ELECTRÓNICA
  6.     - FACEBOOK: https://www.facebook.com/mariano.delcampogarcia
  7.     - TWITTER: https://twitter.com/MarianoCampoGa
  8.     - CORREO: marianodc83@gmail.com
  9.    
  10.    
  11.     DESCRIPCIÓN DEL PROGRAMA
  12.    
  13.     Con este programa vamos a ser capaces de reproducir las notas Do, Do#, Re, Re#, Mi, Fa, Fa#, Sol,
  14.     Sol#, La, La# y Si, desde la octava 2ª (LED_Blanco encendido) hasta la 6ª (LED_Azul encendido),
  15.     mediante un zumbador piezoeléctrico activo, para poder crear así nuestras propias melodías.
  16.    
  17.    
  18.     ESQUEMA DE CONEXION
  19.    
  20.                                       +-----+
  21.          +----[PWR]-------------------| USB |--+
  22.          |                            +-----+  |
  23.          |         GND/RST2  [ ][ ]            |
  24.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |    
  25.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |    
  26.          |                             AREF[ ] |
  27.          |                              GND[ ] |
  28.          | [ ]N/C                    SCK/13[ ] |  
  29.          | [ ]IOREF                 MISO/12[ ] |  
  30.          | [ ]RST                   MOSI/11[ ]~|  
  31.          | [ ]3V3    +---+               10[ ]~|   Zumbador(+)
  32.          | [ ]5v    -| A |-               9[ ]~|   Pin SDO del teclado TTP229
  33.          | [ ]GND   -| R |-               8[ ] |   Pin SCL del teclado TTP229
  34.          | [ ]GND   -| D |-                    |
  35.          | [ ]Vin   -| U |-               7[ ] |  
  36.          |          -| I |-               6[ ]~|   LED_Blanco(+)
  37.          | [ ]A0    -| N |-               5[ ]~|   LED_Verde(+)
  38.          | [ ]A1    -| O |-               4[ ] |   LED_Amarillo(+)
  39.          | [ ]A2     +---+           INT1/3[ ]~|   LED_Rojo(+)
  40.          | [ ]A3                     INT0/2[ ] |   LED_Azul(+)
  41.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  42.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  43.          |            [ ] [ ] [ ]              |
  44.          |  UNO_R3    GND MOSI 5V  ____________/
  45.           \_______________________/
  46.  
  47.   NOTAS:
  48.  
  49.    - Alimentación del teclado matricial capacitivo TTP229:
  50.      - Pin VCC del teclado TTP229 --> +3,3V de Arduino.
  51.      - Pin GND del teclado TTP229 --> GND de Arduino.
  52.    - Cátodo(-) de todos los LED a GND a través de una R=220 omhs (difrente para cada LED).
  53.    - Zumbador(-) a GND.
  54. */
  55.  
  56.  
  57.   #define CLOCK_PIN 8
  58.   #define DATA_PIN 9
  59.  
  60.   int boton;
  61.   int zumbador = 10; // Pin digital con PWM para el zumbador
  62.   int LED_Blanco = 6; // Pin digital para el lED_Blanco (Octava 2ª)
  63.   int LED_Verde = 5; // Pin digital para el lED_Verde (Octava 3ª)
  64.   int LED_Amarillo = 4; // Pin digital para el lED_Amarillo (Octava 4ª)
  65.   int LED_Rojo = 3; // Pin digital para el lED_Rojo (Octava 5ª)
  66.   int LED_Azul = 2; // Pin digital para el lED_Azul (Octava 6ª)
  67.   // Variables auxiliares
  68.   int i=0;
  69.   int databit, button, contador;
  70.  
  71.   // Tiene cargados por defecto los valores de frecuencia de las notas de la Octava 2ª
  72.   float frecuencia[ ] =
  73.   {
  74.     65.40, 69.29, 73.41, 77.78, 82.40, 87.30, 92.49, 97.99, 103.82, 110.00, 116.54, 123.47
  75.   }; // Octava 2ª por defecto
  76.  
  77.   // Valores de las frecuencias de las notas en diferentes octavas (de la 3ª a la 6ª)
  78.   // {Do, Do#, Re, Re#, Mi, Fa, Fa#, Sol, Sol#, La, La#, Si}
  79.   const float octava_3[ ] =
  80.   {
  81.     130.81, 138.59, 146.83, 155.56, 164.81, 174.61, 184.99, 195.99, 207.65, 220.00, 233.08, 246.94
  82.   };
  83.  
  84.   const float octava_4[ ] =
  85.   {
  86.     261.62, 277.18, 293.66, 311.12, 329.62, 349.22, 369.99, 391.99, 415.30, 440.00, 466.16, 493.88
  87.   };
  88.  
  89.   const float octava_5[ ] =
  90.   {
  91.     523.25, 554.36, 587.33, 622.25, 659.25, 698.45, 739.98, 783.91, 830.60, 880.00, 932.32, 987.76
  92.   };
  93.  
  94.   const float octava_6[ ] =
  95.   {
  96.     1046.50, 1108.73, 1174.66, 1244.51, 1318.51, 1398.91, 1479.98, 1567.98, 1661.22, 1760.00, 1864.66, 1975.53
  97.   };
  98.  
  99.   void setup()
  100.   {
  101.     Serial.begin(9600);
  102.     pinMode(CLOCK_PIN, OUTPUT);
  103.     pinMode(DATA_PIN, INPUT);
  104.     pinMode(zumbador, OUTPUT);
  105.     pinMode(LED_Blanco, OUTPUT);
  106.     pinMode(LED_Verde, OUTPUT);
  107.     pinMode(LED_Amarillo, OUTPUT);
  108.     pinMode(LED_Rojo, OUTPUT);
  109.     pinMode(LED_Azul, OUTPUT);
  110.     digitalWrite(CLOCK_PIN, HIGH);
  111.    
  112.     // Enciendo el LED Blanco al iniciarse el programa (Octava 2ª)
  113.     digitalWrite(LED_Blanco, HIGH);
  114.   }
  115.  
  116.   void loop()
  117.   {
  118.     contador = 0;
  119.    
  120.     // Se comprueba el estado de las 16 teclas (canales)
  121.     for (button = 1; button < 17; button++)
  122.     {
  123.       // Reloj activado
  124.       digitalWrite(CLOCK_PIN, LOW);
  125.          
  126.       // Lee la tecla pulsada
  127.       databit = digitalRead(DATA_PIN);
  128.      
  129.       // Si se encuentra alguna tecla a nivel BAJO es que está siendo pulsada
  130.       if(digitalRead(DATA_PIN)==LOW)
  131.       {      
  132.         boton = button;
  133.         // Llamada a la función notas_octavas()
  134.         notas_octavas(boton);  
  135.         contador = 1;      
  136.       }
  137.       // Reloj desactivado
  138.       digitalWrite(CLOCK_PIN, HIGH);
  139.     };
  140.    
  141.     // Si no estamos pulsando ninguna tecla
  142.     if(contador == 0)
  143.     {
  144.       noTone(zumbador); // El zumbador no suena
  145.     }
  146.    
  147.     delay(100);
  148.   }
  149.  
  150.   // Función que manda las notas al zumbador y selecciona las diferentes octavas
  151.   void notas_octavas(int tecla)
  152.   {
  153.     // Dependiendo de la tecla pulsada desde la 1 a la 16
  154.     switch (tecla)
  155.     {
  156.        case 1: // Nota: Do
  157.          tone(zumbador, frecuencia[0]);
  158.          break;
  159.        case 2: // Nota: Do#
  160.          tone(zumbador, frecuencia[1]);
  161.          break;
  162.        case 3: // Nota: Re
  163.          tone(zumbador, frecuencia[2]);
  164.          break;
  165.        case 4: // Nota: Re#
  166.          tone(zumbador, frecuencia[3]);
  167.          break;
  168.        case 5: // Nota: Mi
  169.          tone(zumbador, frecuencia[4]);
  170.          break;
  171.        case 6: // Nota: Fa
  172.          tone(zumbador, frecuencia[5]);
  173.          break;
  174.        case 7: // Nota: Fa#
  175.          tone(zumbador, frecuencia[6]);
  176.          break;
  177.        case 8: // Nota: Sol
  178.          tone(zumbador, frecuencia[7]);
  179.          break;    
  180.        case 9: // Nota: Sol#
  181.          tone(zumbador, frecuencia[8]);
  182.          break;
  183.        case 10: // Nota: La
  184.          tone(zumbador, frecuencia[9]);
  185.          break;
  186.        case 11: // Nota: La#
  187.          tone(zumbador, frecuencia[10]);
  188.          break;
  189.        case 12: // Nota: Si
  190.          tone(zumbador, frecuencia[11]);
  191.          break;
  192.        case 13: // Octava 3ª
  193.         // Pasamos a la matriz frecuencia los valores de la Octava 3ª
  194.         for(i=0; i<12; i++)
  195.         {
  196.           frecuencia[i]=octava_3[i];      
  197.         }
  198.         // LED Verde encendido, los demás apagados
  199.         digitalWrite(LED_Blanco, LOW);
  200.         digitalWrite(LED_Verde, HIGH);
  201.         digitalWrite(LED_Amarillo, LOW);
  202.         digitalWrite(LED_Rojo, LOW);
  203.         digitalWrite(LED_Azul, LOW);
  204.         break;  
  205.       case 14: // Octava 4ª
  206.         // Pasamos a la matriz frecuencia los valores de la Octava 4ª  
  207.         for(i=0; i<12; i++)
  208.         {
  209.           frecuencia[i]=octava_4[i];      
  210.         }
  211.         // LED Amarillo encendido, los demás apagados
  212.         digitalWrite(LED_Blanco, LOW);
  213.         digitalWrite(LED_Verde, LOW);
  214.         digitalWrite(LED_Amarillo, HIGH);
  215.         digitalWrite(LED_Rojo, LOW);
  216.         digitalWrite(LED_Azul, LOW);
  217.         break;  
  218.       case 15: // Octava 5ª
  219.         // Pasamos a la matriz frecuencia los valores de la Octava 5ª
  220.         for(i=0; i<12; i++)
  221.         {
  222.           frecuencia[i]=octava_5[i];        
  223.         }
  224.         // LED Rojo encendido, los demás apagados
  225.         digitalWrite(LED_Blanco, LOW);
  226.         digitalWrite(LED_Verde, LOW);
  227.         digitalWrite(LED_Amarillo, LOW);
  228.         digitalWrite(LED_Rojo, HIGH);
  229.         digitalWrite(LED_Azul, LOW);
  230.         break;  
  231.       case 16: // Octava 6
  232.         // Pasamos a la matriz frecuencia los valores de la Octava 6ª
  233.         for(i=0; i<12; i++)
  234.         {
  235.           frecuencia[i]=octava_6[i];
  236.         }
  237.         // LED Azul encendido, los demás apagados
  238.         digitalWrite(LED_Blanco, LOW);
  239.         digitalWrite(LED_Verde, LOW);
  240.         digitalWrite(LED_Amarillo, LOW);
  241.         digitalWrite(LED_Rojo, LOW);
  242.         digitalWrite(LED_Azul, HIGH);
  243.         break;  
  244.      }
  245.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement