Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" 00002 00003 00004 00005 00006 //****************************************************************************** 00007 // Definiciones 00008 00009 /// Puerto Serial 00010 Serial SerialPort(SERIAL_TX, SERIAL_RX, 9600); 00011 00012 /// PWM OUTPUTS 00013 PwmOut Buzzer(LED1); 00014 00015 // Temporizadores 00016 Ticker LengthTonoBuzzer; 00017 00018 // constantes 00019 const int long_vector = 10; // longitud del vector 00020 00021 /// Global Variables 00022 00023 uint8_t VCOMANDS [long_vector]; // vector en donde se almacena la informacion 00024 // Recividos por el PC (Los Comandos) 00025 uint8_t VINDICATORS [long_vector]; // vector en donde se almacena la informacion 00026 // que se Enviara al PC (Los indicadores) 00027 00028 uint8_t i = 0; // Variable usada como Indice de los vectores, 00029 // indica la posicion del vector en donde se reciben 00030 // ó se almacenan los datos 00031 00032 float periodo_Buzzer = 1; 00033 uint8_t duracion_Tono = 1; 00034 00035 //****************************************************************************** 00036 00037 // Prototipo de Funciones 00038 00039 void ReadPort(void); // Lee el puerto Serial 00040 void MainConfig(void); // Configuracion Inicial de los Perifericos del uC 00041 00042 00043 void stopBuzzer(void); // Detiene el Sonido del Buzzer 00044 void BuzzerSound(void); // Genera la Frecuencia de Audio en el Buzzer 00045 00046 //****************************************************************************** 00047 00048 /// Configuración Inicial 00049 00050 void MainConfig(void) 00051 { 00052 00053 // se habilita la interrupción RX 00054 SerialPort.attach(&ReadPort, Serial::RxIrq ); 00055 00056 00057 // configuracion inicial del PWM Buzzer 00058 Buzzer.period(periodo_Buzzer); 00059 Buzzer.write(0.50); 00060 00061 00062 00063 } 00064 00065 00066 00067 /// Función Principal 00068 00069 int main() 00070 { 00071 00072 MainConfig(); 00073 // Mensaje Inicial 00074 SerialPort.printf("Hello World, System Run !!\n"); 00075 00076 00077 00078 00079 while(1) 00080 { 00081 00082 if(VCOMANDS[2] != 0) // Si hemos enviado el comando de Ejecucion de Tono 00083 { 00084 BuzzerSound(); // Genera el Tono Seleccionado 00085 } 00086 00087 /// Visualizamos la informacion que hemos Modificado 00088 SerialPort.printf("VCOMANDS[%d] = %d - VCOMANDS[9] = %d\n", i, VCOMANDS[i], VCOMANDS[9]); 00089 wait(1); 00090 00091 00092 } 00093 00094 00095 } 00096 00097 //****************************************************************************** 00098 00099 // Funciones Secundarias 00100 00101 00102 void stopBuzzer(void) // Detiene el Tono del Buzzer, poniendo el ancho de pulso a 0; 00103 { 00104 Buzzer.period(1); Buzzer.write(0); // Volvemos a la configuracion Inicial del Buzzer 00105 LengthTonoBuzzer.attach(&stopBuzzer,10000); // Mientras no se envie un nuevo comando de tiempo para 00106 // La interrupcion se deja un tiempo muy alto para generar la interrupcion 00107 // Lo menos Posible 00108 } 00109 00110 void BuzzerSound(void) 00111 { 00112 00113 // Se calcula el valor del Periodo para el Buzzer limitando el ancho de banda de las 00114 // Frecuencias de entradas entre 1 y 20Hz ó 1 y 20KHz 00115 00116 // hallamos el valor de 1 a 20 que se ha ingresado 00117 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. 00118 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. 00119 else periodo_Buzzer = (float)(VCOMANDS[1] - 40); 00120 periodo_Buzzer = (1 / periodo_Buzzer); //Se realiza la conversión de Frequencia a Periodo 00121 00122 00123 // Ahora si VCOMANDS[2] == 48 == '0'; la frecuencia estará en el orden de los Herz 00124 if (VCOMANDS[2] == 48) 00125 { 00126 Buzzer.period(periodo_Buzzer); 00127 VCOMANDS[2] = 0 ; 00128 } 00129 // Pero si VCOMANDS[2] == 49 == '1'; la frecuencia estará en el orden de los KiloHerz 00130 else if (VCOMANDS[2] == 49) 00131 { 00132 Buzzer.period_us( (uint8_t)(periodo_Buzzer * 1000) ); 00133 VCOMANDS[2] = 0 ; 00134 } 00135 // Determinamos el tiempo por el cual estará sonando el Buzeer 00136 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. 00137 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. 00138 else duracion_Tono = (VCOMANDS[0] - 40); 00139 00140 Buzzer.write(50); // Se carga el ancho de pulso a 50 ya que en la 00141 // Interrupcion se pone a 0 00142 // Se habilita la interrupcion del ticker y se le asigna 00143 // La función que ejecutará cuando se genere la interrupción 00144 LengthTonoBuzzer.attach(&stopBuzzer,duracion_Tono); // Cargamos el Tiempo(0-60 segundos) ingresado 00145 // y se lo Cargamos al Ticker del Buzzer 00146 00147 VCOMANDS[9] = (uint8_t) (periodo_Buzzer * 1000); // Almacenamos El resultado del periodo en VCOMANDS[9] para visualizarlo 00148 // Y confirmar que el valor sea el correcto 00149 00150 00151 00152 00153 } 00154 00155 00156 00157 void ReadPort() 00158 { 00159 00160 // if (SerialPort.readable()) 00161 VCOMANDS[i] = SerialPort.getc(); 00162 i++; 00163 if(i > 2) i = 0; 00164 00165 00166 }
Generated on Tue Aug 23 2022 16:58:35 by
1.7.2