Advertisement
Villalba2006

POST_43

Nov 25th, 2016
8,467
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.39 KB | None | 0 0
  1. /*  TITULO: Radio FM con el módulo TEA5767 V3.
  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 se pueden sintonizar de manera automática 16 emisoras de Radio FM de España. Si
  14.     apretamos el pulsador "subeCanal" se sintonizará la frecuencia del siguiente canal y si apretamos
  15.     el pulsador "bajaCanal" se sintonizará el canal anterior. Para saber en que emisora y frecuencia
  16.     nos encontramos en cada momento disponemos de un LCD 1602 conectado mediante al Arduino mediante
  17.     comunicación I2C al igual que el módulo TEA5767 V3, que es el que nos permite sintonizar las emisoras.
  18.     La salida de audio del módulo TEA5767 V3 la conectaremos a unos altavoces auto amplificados mediante
  19.     un conector Jack hembra de 3,5 mm del que dispone el módulo.
  20.    
  21.    
  22.     ESQUEMA DE CONEXION
  23.    
  24.                                       +-----+
  25.          +----[PWR]-------------------| USB |--+
  26.          |                            +-----+  |
  27.          |         GND/RST2  [ ][ ]            |
  28.          |       MOSI2/SCK2  [ ][ ]  A5/SCL[ ] |   SCL del módulo LCM 1602 I2C V1 y del módulo TEA5767 V3.
  29.          |          5V/MISO2 [ ][ ]  A4/SDA[ ] |   SDA del módulo LCM 1602 I2C V1 y del módulo TEA5767 V3.
  30.          |                             AREF[ ] |
  31.          |                              GND[ ] |
  32.          | [ ]N/C                    SCK/13[ ] |  
  33.          | [ ]IOREF                 MISO/12[ ] |  
  34.          | [ ]RST                   MOSI/11[ ]~|  
  35.          | [ ]3V3    +---+               10[ ]~|  
  36.          | [ ]5v    -| A |-               9[ ]~|  
  37.          | [ ]GND   -| R |-               8[ ] |  
  38.          | [ ]GND   -| D |-                    |
  39.          | [ ]Vin   -| U |-               7[ ] |  
  40.          |          -| I |-               6[ ]~|  
  41.          | [ ]A0    -| N |-               5[ ]~|  
  42.          | [ ]A1    -| O |-               4[ ] |    
  43.          | [ ]A2     +---+           INT1/3[ ]~|   PAS
  44.          | [ ]A3                     INT0/2[ ] |   PAB
  45.          | [ ]A4/SDA  RST SCK MISO     TX>1[ ] |  
  46.          | [ ]A5/SCL  [ ] [ ] [ ]      RX<0[ ] |  
  47.          |            [ ] [ ] [ ]              |
  48.          |  UNO_R3    GND MOSI 5V  ____________/
  49.           \_______________________/
  50.  
  51.   NOTAS:
  52.    
  53.    - Los pulsadores suelen tener dos pines, que vamos a denominar PA y PB (si es de 4 sólo usamos 2 de ellos)
  54.        - PAS y PBS--> Pines para el pulsador subeCanal.
  55.        - PAB y PBB--> Pines para el pulsador bajaCanal.
  56.    - Conexión PULL-DOWN del pulsador.
  57.        - PBS y PBB conectados a VCC.
  58.        - PAS y PAB conectados a GND a través de una R=10K omhs (diferente para cada uno).
  59.    - La alimentación y la masa de los módulos LCM 1602 I2C V1 y TEA5767 V3 van directamente conectadas a VCC
  60.      (+5V) y GND respectivamente.        
  61. */
  62.  
  63.   #include <Wire.h>
  64.   #include <LiquidCrystal_I2C.h>
  65.   #include <TEA5767Radio.h>
  66.  
  67.   // Declaración del objeto "radio" de tipo TEA5767Radio
  68.   TEA5767Radio radio = TEA5767Radio();
  69.  
  70.   // Matriz que acumula las 16 frecuencias de las 16 emisoras de radio FM que yo he seleccionado
  71.   float frecuencia[16] =
  72.   {
  73.     88.5, 90.2, 90.9, 92.2, 94.4, 95.1, 97.3, 98.1, 99.4, 100.4, 101.5, 102.4, 102.8, 104.5, 105.2, 106.7
  74.   };
  75.  
  76.   int canalInicial = 6; // Establecemos el canal inicial en uno diferente al actual
  77.   int canalActual = 7; // Establecemos la emisora intermedia de la lista
  78.   int subeCanal = 3; // Pin digital para el botón de subir el canal
  79.   int bajaCanal = 2; // Pin digital para el botón de bajar el canal
  80.   int imprimir = 1; // Variable para imprimir datos una sola vez
  81.   // Declaración del objeto
  82.   // Terminales de conexión del LCD
  83.   //                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
  84.   LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  85.  
  86.   void setup()
  87.   {
  88.     Wire.begin(); // Comienza la comunicación I2C  
  89.     lcd.begin(16,2);   // Inicializa el LCD para 16x2
  90.    
  91.     // Mensaje de inicio de la RADIO
  92.     lcd.backlight();
  93.     lcd.clear();
  94.     lcd.setCursor(0,0);
  95.     lcd.print("RADIO TEA5767 V3");  
  96.     delay(3000);
  97.    
  98.     // Imprimimos los valores iniciales a través del LCD
  99.     imprimirFrecuenciaCanal();
  100.     lcd.setCursor(0,1);
  101.     imprimirEmisora();
  102.   }
  103.  
  104.   void loop()
  105.   {
  106.     // Si presionamos el pulsador subeCanal y el canal es menor o igual a 14
  107.     if(digitalRead(subeCanal)== HIGH && canalActual <=14)
  108.     {
  109.       // Subimos un canal e imprimimos valores a través del LCD  
  110.       canalActual ++;
  111.       imprimirFrecuenciaCanal();
  112.       lcd.setCursor(0,1);
  113.       imprimirEmisora();
  114.     }
  115.    
  116.     // Si presionamos el pulsador bajaCanal y el canal es mayor o igual a 1
  117.     if(digitalRead(bajaCanal)== HIGH && canalActual >=1)
  118.     {
  119.       // Bajamos un canal e imprimimos valores a través del LCD  
  120.       canalActual --;
  121.       imprimirFrecuenciaCanal();
  122.       lcd.setCursor(0,1);
  123.       imprimirEmisora();
  124.     }
  125.    
  126.     // Si hemos cambiado de canal
  127.     if(canalInicial != canalActual)
  128.     {
  129.       radio.setFrequency(frecuencia[canalActual]); // Se sintoniza la frecuencia correspondiente
  130.     }
  131.  
  132.     canalInicial = canalActual; // Actualizamos el canal inicial
  133.     delay(50); // Retardo para evitar el rebote de los pulsadores
  134.   }
  135.  
  136.   // Función que imprime la frecuencia de la emisora y el número del canal en el que estemos
  137.   void imprimirFrecuenciaCanal()
  138.   {
  139.     lcd.clear();
  140.     lcd.setCursor(0,0);
  141.     lcd.print("CH");
  142.     lcd.print(canalActual+1);
  143.     lcd.print("  ");
  144.     lcd.print(frecuencia[canalActual]);
  145.     lcd.print(" MHz");
  146.   }
  147.  
  148.   // Función que imprime el nombre de la emisora
  149.   void imprimirEmisora()
  150.   {
  151.     switch(canalActual)
  152.     {
  153.       case 0:
  154.       {  
  155.         lcd.print("<Cadena 100>");      
  156.         break;
  157.       }
  158.       case 1:
  159.       {
  160.         lcd.print("<Mortal FM>");      
  161.         break;
  162.       }
  163.       case 2:
  164.       {  
  165.         lcd.print("<40 Principales>");      
  166.         break;
  167.       }
  168.       case 3:
  169.       {
  170.         lcd.print("<RNE Radio 3>");      
  171.         break;
  172.       }
  173.       case 4:
  174.       {
  175.         lcd.print("<Europa FM>");      
  176.         break;
  177.       }
  178.       case 5:
  179.       {
  180.         lcd.print("<RNE Radio 5>");      
  181.         break;
  182.       }
  183.       case 6:
  184.       {
  185.         lcd.print("<RNE Nacional>");      
  186.         break;
  187.       }  
  188.       case 7:
  189.       {
  190.         lcd.print("<M80 Radio>");      
  191.         break;
  192.       }
  193.       case 8:
  194.       {
  195.         lcd.print("<Kiss FM>");      
  196.         break;
  197.       }
  198.       case 9:
  199.       {
  200.         lcd.print("<Cadena DIAL>");      
  201.         break;
  202.       }
  203.       case 10:
  204.       {
  205.         lcd.print("<Radio MARCA>");      
  206.         break;
  207.       }
  208.       case 11:
  209.       {
  210.         lcd.print("<Melodia FM>");      
  211.         break;
  212.       }
  213.       case 12:
  214.       {
  215.         lcd.print("<esRADIO>");      
  216.         break;
  217.       }
  218.       case 13:
  219.       {
  220.         lcd.print("<Cadena COPE>");      
  221.         break;
  222.       }
  223.       case 14:
  224.       {
  225.         lcd.print("<Onda CERO>");      
  226.         break;
  227.       }
  228.       case 15:
  229.       {
  230.         lcd.print("<Cadena SER>");      
  231.         break;
  232.       }  
  233.     }  
  234.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement