Mbed for ESIMEos / Mbed 2 deprecated torretmod

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /* #############################################################################
00002 **    Archivo        : main.c
00003 **    Proyecto       : STM32-F103C8_Torreta
00004 **    Procesador     : STM32F103C8T6
00005 **    Plataforma     : Blue Pill
00006 **    Herramienta    : Mbed Compiler
00007 **    Version        : Driver 01.01
00008 **    Compilador     : GNU C Compiler
00009 **    Fecha/Hora     : 14-07-2015, 11:48, # CodeGen: 0
00010 **    Descripción    :
00011 **         Este proyecto hace...
00012 **         This module contains user's application code.
00013 **   Componentes     : GPIO, Timer, etc .
00014 **   Configuraciones : Includes, Stacks y Drivers externos
00015 **   Autores         :
00016 **         ATEAM Development Group:
00017 **          - Antulio Morgado Valle
00018 **
00019 **   Versión        : Beta
00020 **   Revisión       : A
00021 **   Release        : 0
00022 **   Bugs & Fixes   :
00023 **   Date           : 20/10/2019
00024 **                    Added support for Led_RGB
00025 **                    22/09/2018 
00026 **                    Added LCD Menu, Beta version (with bugs)
00027 **
00028 ** ###########################################################################*/
00029 /*
00030 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
00031 :  Includes
00032 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
00033 */#include "stm32f103c8t6.h"
00034 #include "mbed.h"
00035 #include "Serial.h"
00036 #include "stdio.h"
00037 #define DO 523.25, //definimos las frecuencias de las notas
00038 #define        DoS 554.37
00039 #define        RE 587.33
00040 #define        RES 622.25
00041 #define        MI 659.26
00042 #define        FA 698.46
00043 #define        FAS 739.99
00044 #define        SOL 783.99
00045 #define        SOLS 830.61
00046 #define        LA 880
00047 #define        LAS 932.33
00048 #define        SI 987.77
00049 #define        RE2 1174.66
00050 #define        FAS2 1479.98
00051 #define        PAU 30000
00052 /*
00053 :...............................................................................
00054 :  Definiciones
00055 :...............................................................................
00056 */#define on              0               // Estado para boton presionado
00057 #define off             1               // Estado para boton sin presionar
00058 #define hold            2               // Estado para boton mantenido
00059 #define release         3               // Estado para boton liberado
00060 #define FALSE           0               // Estado FALSO
00061 #define TRUE            1               // Estado VERDADERO
00062 #define Ticker_Rate     1000            
00063             // Periodo de interrupción (us)
00064 /*
00065 +-------------------------------------------------------------------------------
00066 |  Configuración de Puertos 
00067 +-------------------------------------------------------------------------------
00068 */
00069 DigitalOut   verde  (LED1);    // NC       (Green_Led)
00070 BusOut       Torreta(PB_4,PB_3,PA_15,PA_12,PA_11,PA_10,PA_9,PA_8); // 
00071 DigitalOut   Led_Monitor (PB_1);         // Led monitor de la Tarjeta STM32F103C8
00072 Ticker       Barrido;    
00073 PwmOut       Buzzer(PB_11);
00074 Serial       terminal (PA_2, PA_3);               // PB1_TIM3_CH4N
00075 /*
00076 +-------------------------------------------------------------------------------
00077 |  Variables Globales de Usuario 
00078 +-------------------------------------------------------------------------------
00079 */
00080 uint8_t Secuencias[]={
00081         //0x03, 0x03, 0xC0, 0xC0, 0x03, 0x03, 0xC0, 0xC0, //   8
00082         0x32, 0x12, 0x15, 0xF1, 0x58, 0x33, 0x32, 0x12,
00083         0x15, 0xE6, 0x21, 0x81, 0x72, 0xF1, 0xC3, 0xAA,
00084         0x15, 0xE6, 0x21, 0x81, 0x72, 0xF1, 0xC3, 0xAA,
00085         0x32, 0x12, 0x15, 0xF1, 0x58, 0x33, 0x32, 0x12,
00086         0x12, 0x32, 0x33, 0x58, 0xF1, 0x15, 0x12, 0x32,
00087         0xAA, 0xC3, 0xF1, 0x72, 0x81, 0x21, 0xE6, 0x15,
00088 };
00089 uint16_t No_Secuencias=48;     // Número de secuencias a desplegar
00090 uint16_t i=0;                   // Indice para las secuencias
00091 uint16_t delayA=250;             // Tiempo de retardo entre secuencias (en ms)
00092 uint16_t contadorA=0;            // Contador de mili segundos
00093 int cont=0;
00094 
00095 /* END Global Variables */           
00096 /*
00097 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00098 |  Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción
00099 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00100 */
00101 void caratula ();
00102 void Menu ();
00103 void N (void);
00104 void Barrido_OnInterrupt(void); 
00105 
00106 //______________________________________________________________________________  
00107 int tones[] = {SI, RE2,  SI,  RE2,   PAU,  SI,   LA,   SI,   SI,    SI,   PAU,  RE2,  SI,    SI, PAU,
00108                RE2, PAU, RE2,  RE2,  PAU,  SI,   RE2,  SI,   RE2,   PAU,  SI,   LA,   SI,    SI, 
00109                SI, PAU,  RE2,  SI,   SI,   PAU,  RE2,  PAU,  RE2,   RE2,  PAU,  RE2,  PAU,   SI,
00110                RE2, PAU, SI,   RE2,  PAU,  SI,   RE2,  PAU,  SI,   PAU,   RE2,  SI,   LA,    SI, 
00111                PAU, RE2, PAU,   SI,  RE2,  PAU,  SI,   RE2,  PAU,  SI,    RE2,  PAU,  SI,   PAU, 
00112                RE2, SI,   LA,   SI,  PAU,  FAS2, PAU,  RE2,  FAS2, PAU,   RE2,  FAS2, PAU, 
00113                RE2 ,FAS2, PAU, RE2,  FAS2, PAU,  RE2,  LA,   SOLS, SI,   PAU,   FAS2, PAU,
00114                RE2, FAS2, PAU, RE2,  FAS2, PAU,  RE2,  FAS2, PAU,  RE2,  FAS2,  PAU, //64+13
00115                RE2, LA,    SI, SI,};//113 tonos
00116 int tones_num = 113;
00117 int d=1000, e=500, m=250, c=125; //definimos los tiempos de doble, entera, media y cuarta
00118 int duracionNota[] = {m, m, m, m, e, c, m, m, c, m, e, m, m, m, e, m, m, m, m, d, m, m, m, m, e, c, m, m, c, m, e, m, m, m, e, m, m, m, m, d,
00119 m, m, m, m, m, m, m, m, m, m, m, m, c, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m,
00120 m, m, m, m, m, m, m, m, m, m, m, m, c, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m,
00121 };
00122 
00123 
00124 void Play_tunes(PwmOut name, int notes, int tones);
00125 
00126 
00127 /*
00128 #===============================================================================
00129 |
00130 |               P R O G R A M A     P R I N C I P A L
00131 |
00132 #=============================================================================== 
00133 */
00134 int main()          
00135 {       // Inicialización de variables locales, puertos e interrupciones van aquí !!!
00136 confSysClock();     // Inicialización del Sistema, 
00137 Barrido.attach_us(&Barrido_OnInterrupt, Ticker_Rate);   // Periodo de la Interrupción por Timer = 1ms (Tcker_Rate=1000)
00138 
00139     //while (true)                // El Lazo del Programa principal está aquí !!!
00140     N ();
00141     caratula ();
00142     Menu ();
00143 }
00144 /* END main */
00145 
00146 /*
00147 ................................................................................
00148 :  Rutinas de los Vectores de Interrupción
00149 ................................................................................
00150 */
00151 // Esta es la función Play_tunes que mandamos a llamar dandole algunos
00152 // valores anteriormente
00153 void N()
00154     {
00155         terminal.baud(115200); 
00156     }
00157 void caratula ()
00158     { 
00159         terminal.printf("Instituto Politecnico Nacional\n");
00160         terminal.printf("Escuela Superior de Ingenieria Mecanica y Electrica\n");
00161         terminal.printf("Analisis Numerico\n");
00162         terminal.printf("Moya Garcia Iris\n");
00163     }
00164 void Menu ()
00165     {
00166         int opcion=0;
00167         do 
00168         {
00169             terminal.printf("\tBievenido\n");
00170             terminal.printf ("Este programa tiene secuencias de: leds y de notas\n");
00171             terminal.printf("Elija la opcion deseada\n");
00172             terminal.printf("Seleccione 1: Si solo quiere secuencia de leds\n");
00173             terminal.printf("Seleccione 2: Si solo quiere secuencia de tonos\n");
00174             terminal.printf("Seleccione 3: Si solo quiere secuencia de leds\n");
00175             terminal.printf("Seleccione 4: Si quiere salir\n");
00176             scanf("%d", &opcion);
00177             if (opcion== 0)
00178             {
00179                 Barrido.attach_us(&Barrido_OnInterrupt, Ticker_Rate);
00180             }
00181             if (opcion== 2)
00182             {
00183             for(int x=0; x<40; x++)
00184               {
00185               int i;
00186               for (i=0; i<100; i=+5) { 
00187               Buzzer.period(1.0/969.0);
00188               Buzzer = float(i)/50.0;
00189               wait(.5);
00190               Buzzer.period(1.0/800.0);
00191               wait(.5);
00192               }
00193               for (i=25; i>=0; i=i-2) {
00194               Buzzer.period(1.0/969.0);
00195               Buzzer = float(i)/50.0;
00196               wait(.5);
00197               Buzzer.period(1.0/800.0);
00198               wait(.5);
00199               }
00200               Buzzer = 0.0;
00201               }
00202             }
00203         if (opcion== 3)
00204         {
00205              {
00206               Barrido.attach_us(&Barrido_OnInterrupt, Ticker_Rate);
00207               for(int x=0; x<40; x++)
00208               {
00209               int i;
00210               for (i=0; i<26; i=i+2) {
00211               Buzzer.period(1.0/969.0);
00212               Buzzer = float(i)/50.0;
00213               wait(.5);
00214               Buzzer.period(1.0/800.0);
00215               wait(.5);
00216               }
00217               for (i=25; i>=0; i=i-2) {
00218               Buzzer.period(1.0/969.0);
00219               Buzzer = float(i)/50.0;
00220               wait(.5);
00221               Buzzer.period(1.0/800.0);
00222               wait(.5);
00223               }
00224               Buzzer = 0.0;
00225               }
00226               }
00227         }
00228         if ((opcion!=0) || (opcion!= 1)||(opcion!= 2)||(opcion!= 3))
00229        terminal.printf("Opcion invalida");
00230         }
00231        while (opcion== 3); 
00232     }
00233     void Barrido_OnInterrupt()
00234 {
00235     /* Rutina de Atención a la Interrupción */
00236     
00237     contadorA++;                     // Incremeta el contador de mili segundos
00238     if (contadorA == delayA)          // Contador es igual al retardo programado?
00239     {
00240     Torreta=tones[cont];          // Escribe la secuencia
00241     cont++;                            // Incrementa el índice
00242     if (cont >= No_Secuencias) cont=0;    // Es la última secuencia?
00243     contadorA =0;                    // Reinicia contador de retardo
00244     Led_Monitor = !Led_Monitor;     // Parpadeo del Led Monitor
00245     }
00246 }
00247 /*
00248 ________________________________________________________________________________
00249 |
00250 |  Funciones Prototipo
00251 |_______________________________________________________________________________
00252 */
00253                     // Las Funciones Prototipo van aquí !
00254 //void confSysClock(void);    // Configure system clock (72MHz HSE clock, 48MHz USB clock)
00255 
00256 /* END functions */    
00257                 
00258 /* END program */
00259 
00260 /*+-----------------------------------------------------------------------------       
00261 *+ La documentación va aquí!:
00262 +--------------------------------------------------------------------------------
00263 |                               EJERCICIO
00264 |
00265 | 1.-   Modificar este programa para: 
00266 |       a) Agregar más secuencias (mínimo 32).
00267 |       b) Realizar el barrido del arreglo de atrás hacia adelante y repetir
00268 | 2.-   Modificar el programa para incluir secuencias de sonidos utiliando el 
00269 |       módulo PWM (Sirena).
00270 |       
00271 +--------------------------------------------------------------------------------
00272 |
00273 |                               EXAMEN
00274 |
00275 | 1.-   Modificar el programa para que despliegue un rango de secuencias  
00276 |       determinado.
00277 | 2.-   Modificar el programa para incluir un menú de selección de secuencias.
00278 |       a) Para la Torreta
00279 |       b) Para la Sirena
00280 |       c) Combinados
00281 | 3.-   Volver a realizar éste programa utilizando tambien con apuntadores.
00282 |
00283 |       Mucha Suerte!                       
00284 |
00285 *+----------------------------------------------------------------------------*
00286 *+
00287 *+   Powered by
00288 *+
00289 *+          T H E     A N T U L I U ' S   T E A M   R&D  Unltd 
00290 *+
00291 *+  Research, Development, Systems, Equipment, Support & Spare Parts.
00292 *+  (C) Copyright 1989-2019, All Rights Reserved            
00293 *+
00294 *+  Welcome to The Beaners Proyect Community!                   
00295 *+----------------------------------------------------------------------------*/
00296 
00297 /* END Mbed */