This Program generate a audibly frequency on a Buzzer

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
CCastrop1012
Date:
Thu Feb 28 17:14:57 2019 +0000
Commit message:
C

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 309da55d6e5a main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Feb 28 17:14:57 2019 +0000
@@ -0,0 +1,166 @@
+#include "mbed.h"
+
+
+
+
+//******************************************************************************
+//                          Definiciones
+
+/// Puerto Serial
+Serial SerialPort(SERIAL_TX, SERIAL_RX, 9600);
+
+/// PWM OUTPUTS
+PwmOut Buzzer(LED1);
+
+//  Temporizadores 
+Ticker LengthTonoBuzzer;
+
+// constantes
+const int long_vector = 10; // longitud del vector
+
+/// Global Variables
+
+uint8_t VCOMANDS     [long_vector]; // vector en donde se almacena la informacion 
+                                    // Recividos por el PC (Los Comandos)
+uint8_t VINDICATORS  [long_vector]; // vector en donde se almacena la informacion 
+                                    // que se Enviara al PC (Los indicadores)
+
+uint8_t i = 0;                      // Variable usada como Indice de los vectores,
+                                    // indica la posicion del vector en donde se reciben 
+                                    // ó se almacenan los datos
+
+float periodo_Buzzer = 1;           
+uint8_t duracion_Tono = 1;
+
+//******************************************************************************
+
+//                  Prototipo de Funciones
+
+void ReadPort(void);                // Lee el puerto Serial
+void MainConfig(void);              // Configuracion Inicial de los Perifericos del uC
+
+
+void stopBuzzer(void);              // Detiene el Sonido del Buzzer
+void BuzzerSound(void);             // Genera la Frecuencia de Audio en el Buzzer
+
+//******************************************************************************
+
+///             Configuración Inicial
+
+void MainConfig(void)
+    {
+        
+    // se habilita la interrupción RX
+        SerialPort.attach(&ReadPort, Serial::RxIrq );
+          
+        
+    // configuracion inicial del PWM Buzzer
+        Buzzer.period(periodo_Buzzer);
+        Buzzer.write(0.50);
+    
+    
+    
+    }
+
+
+
+///             Función Principal
+
+int main()
+{
+    
+    MainConfig();
+    // Mensaje Inicial
+    SerialPort.printf("Hello World, System Run !!\n");
+    
+    
+    
+    
+    while(1)
+     {
+
+            if(VCOMANDS[2] != 0)            // Si hemos enviado el comando de Ejecucion de Tono
+                {
+                    BuzzerSound();          // Genera el Tono Seleccionado   
+                }
+                
+            /// Visualizamos la informacion que hemos Modificado
+            SerialPort.printf("VCOMANDS[%d] = %d  - VCOMANDS[9] = %d\n", i, VCOMANDS[i], VCOMANDS[9]);
+            wait(1); 
+            
+            
+    }
+
+
+}
+
+//******************************************************************************
+
+//                  Funciones Secundarias
+
+
+void stopBuzzer(void)                               // Detiene el Tono del Buzzer, poniendo el ancho de pulso a 0;
+{
+    Buzzer.period(1); Buzzer.write(0);              // Volvemos a la configuracion Inicial del Buzzer       
+    LengthTonoBuzzer.attach(&stopBuzzer,10000);     // Mientras no se envie un nuevo comando de tiempo para
+                                                    // La interrupcion se deja un tiempo muy alto para generar la interrupcion
+                                                    // Lo menos Posible
+}
+
+void BuzzerSound(void)
+    {
+        
+    // Se calcula el valor del Periodo para el Buzzer limitando el ancho de banda de las
+        // Frecuencias de entradas entre 1 y 20Hz ó 1 y 20KHz
+        
+        // hallamos el valor de 1 a 20 que se ha ingresado    
+        if(VCOMANDS[1] <= 40) periodo_Buzzer = 1.0;           // Se restringe el limite inferior del valor ingresado a 40 y lo hace equivalente a un periodo de 1 segundo.
+                    else if (VCOMANDS[1] > 60) periodo_Buzzer = 20.0;     // Se restringe el limite Superior del valor ingresado a 60 y lo hace equivalente a un periodo de 20 segundo.
+                    else periodo_Buzzer = (float)(VCOMANDS[1] - 40);
+                    periodo_Buzzer = (1 / periodo_Buzzer); //Se realiza la conversión de Frequencia a Periodo
+
+                        
+                    // Ahora si VCOMANDS[2] == 48 == '0'; la frecuencia estará en el orden de los Herz    
+                    if (VCOMANDS[2] == 48) 
+                        {
+                            Buzzer.period(periodo_Buzzer);
+                            VCOMANDS[2] = 0 ;
+                        } 
+                    // Pero si VCOMANDS[2] == 49 == '1'; la frecuencia estará en el orden de los KiloHerz
+                    else if (VCOMANDS[2] == 49) 
+                        {
+                            Buzzer.period_us( (uint8_t)(periodo_Buzzer * 1000) );
+                            VCOMANDS[2] = 0 ;
+                        }
+                    // Determinamos el tiempo por el cual estará sonando el Buzeer
+                    if(VCOMANDS[0] <= 40) duracion_Tono = 1;           // Se restringe el limite inferior del valor ingresado a 40 y lo hace equivalente a una duración de 1 segundo.
+                    else if (VCOMANDS[0] > 100) duracion_Tono = 60;     // Se restringe el limite Superior del valor ingresado a 60 y lo hace equivalente a una duración de 60 segundo.
+                    else duracion_Tono = (VCOMANDS[0] - 40);
+                    
+                    Buzzer.write(50); // Se carga el ancho de pulso a 50 ya que en la 
+                                      // Interrupcion se pone a 0   
+                    // Se habilita la interrupcion del ticker y se le asigna
+                    // La función que ejecutará cuando se genere la interrupción
+                    LengthTonoBuzzer.attach(&stopBuzzer,duracion_Tono); // Cargamos el Tiempo(0-60 segundos) ingresado
+                                                                        // y se lo Cargamos al Ticker del Buzzer
+                                                                        
+                    VCOMANDS[9] = (uint8_t) (periodo_Buzzer * 1000); // Almacenamos El resultado del periodo en VCOMANDS[9] para visualizarlo
+                                                                     // Y confirmar que el valor sea el correcto
+    
+    
+    
+    
+    }
+
+
+
+void ReadPort()
+{
+
+//   if  (SerialPort.readable())
+    VCOMANDS[i] = SerialPort.getc();
+    i++;
+    if(i > 2) i = 0;
+
+
+}
\ No newline at end of file
diff -r 000000000000 -r 309da55d6e5a mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Feb 28 17:14:57 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/3a7713b1edbc
\ No newline at end of file