IPN ESIME ZACATENCO / Mbed 2 deprecated STM32F103C8_Adivina

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-103C8_Adivina
00004 **    Procesador     : STM32F103C8
00005 **    Plataforma     : Blue Pill
00006 **    Herramienta    : Mbed
00007 **    Compilador     : Mbed Online C Compiler
00008 **    Version        : Mbed-OS 5.15.0
00009 **    Fecha/Hora     : 18-12-2019, 11:48, # CodeG
00010 **    Descripción    :
00011 **         Este proyecto muestra la configuración y uso de la Terminal Serial
00012 **         para intercurar con el usuar a traves del juego de "Adivina el Número" 
00013 **         This module contains user's application code.
00014 **   Componentes     : Timer, etc .
00015 **   Configuraciones : Se puede seleccionar entre diferentes velocodades de 
00016 **                     transmisión
00017 **   Autores         :
00018 **         ATEAM Development Group:
00019 **          - Antulio Morgado Valle
00020 **
00021 **   Versión        : Beta
00022 **   Revisión       : A
00023 **   Release        : 0
00024 **   Bugs & Fixes   :
00025 **   Date           : 20/10/2019
00026 **                    Ejemplpo del Hola Mundo
00027 **                    27/09/2010 
00028 **                    
00029 **
00030 ** ###########################################################################*/
00031 /*
00032 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
00033 :  Includes
00034 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
00035 */
00036 
00037 #include "stm32f103c8t6.h"
00038 #include "mbed.h"
00039 #include "Serial.h"
00040 #include "stdio.h"
00041 /*
00042 :...............................................................................
00043 :  Definiciones
00044 :...............................................................................
00045 */
00046 #define LED_Type        0           // Tipo de LED RGB: 0=Cátodo Común, 1=Ánodo Común
00047 #define on              0           // Estado para boton presionado
00048 #define off             1           // Estado para boton sin presionar
00049 #define hold            2           // Estado para boton mantenido
00050 #define release         3           // Estado para boton liberado
00051 #define FALSE           0           // Estado FALSO
00052 #define TRUE            1           // Estado VERDADERO
00053 #define Buzz_Off        0           // Estado del Buzzer Apagado
00054 #define Buzz_On         1           // Estado del Buzzer Encendido
00055 #define Baud_Rate       115200      // Velocidad de Transmisión (Bauds)
00056                                     // Velocidades Permitidas:
00057                                     // 300, 600, 1200, 2400, 4800, 9600,
00058                                     // 14400, 19600, 28800, 38400, 57600
00059                                     // 115200, 230400
00060 #if Display_Type == 0               // Si el Led RGB es Cátodo Común
00061 #define led_on          1           // Estado para el Led encendido
00062 #define led_off         0           // Estado para el Led encendido
00063 #endif
00064 
00065 #if Display_Type == 1               // Si el Led RGB es Ánodo Común
00066 #define led_on          0           // Estado para el Led encendido
00067 #define led_off         1           // Estado para el Led encendido
00068 #endif
00069 /*
00070 +-------------------------------------------------------------------------------
00071 |  Configuración de Puertos 
00072 +-------------------------------------------------------------------------------
00073 */
00074 DigitalOut  led_monitor(LED1);      // Inicializa el LED Monitor (Interno)
00075 DigitalOut  led_azul(PB_0);         // Inicializa el PWM1 (PB0_TIM3_CH3) Led AZUL
00076 DigitalOut  led_verde(PA_7);        // Inicializa el PWM2 (PA7_TIM3_CH2) Led VERDE
00077 DigitalOut  led_rojo(PA_6);         // Inicializa el PWM3 (PA6_TIM3_CH1) Led ROJO
00078 PwmOut      buzzer(PB_1);           // PB1_TIM3_CH4N
00079 // *****    Host PC Terminal Communication channels
00080 Serial      terminal (PA_2, PA_3);          // Inicializa la comunicación serial a la PC (Tx,Rx)
00081 //Serial      terminal(USBTX, USBRX,115200);// Tx, Rx  Baud Rate - Terminal Serial por USB @ 115,200 Bauds
00082 
00083 /*
00084 +-------------------------------------------------------------------------------
00085 |  Variables Globales de Usuario 
00086 +-------------------------------------------------------------------------------
00087 */
00088 uint8_t  Seleccion;                 // Seleccion de opción para el menú
00089 /*
00090 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00091 |  Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción
00092 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00093 */
00094 void setup(void);
00095 void buzzer_test(void);
00096 void clear_screen(void);
00097 /* END definitions */ 
00098 
00099 /*
00100 #===============================================================================
00101 |
00102 |               P R O G R A M A     P R I N C I P A L
00103 |
00104 #=============================================================================== 
00105 */
00106 int main()          
00107 {                   // Inicialización de variables, puertos e interrupciones
00108   confSysClock();     // Configure system clock (72MHz HSE clock, 48MHz USB clock)
00109   setup();            // Inicialización del sistema
00110   terminal.printf ("ADIVINA\n\r");
00111   led_rojo  = led_off;
00112   led_verde = led_off;
00113   led_azul  = led_off; 
00114   terminal.printf(" System is Wake Up!.\n\r");    // e inicia la  comunicación serial
00115   terminal.printf ("\t\e[1;37;41mInstituto Politecnico Nacional\e[0m\n\r");
00116   terminal.printf ("\e[1;37;42mESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA\e[0m\n\r\v");
00117   terminal.printf ("\t\e[1;34;40mAdivina \e[1;37;40mel \e[1;32;40mNumero \e[1;33;40mSecreto \e[0m\n\r\v\v\e[0m");
00118   terminal.printf("Pulse Cualquier Tecla para continuar..."); // Pausa 
00119   Seleccion=getchar();
00120   while(TRUE) 
00121     {   
00122 Inicio:     clear_screen();                 // Limpia la Pantalla de la Terminal
00123             terminal.printf(" DIGITE UN NUMERO SECRETO DE 0 A 9 \r\n");
00124             char secreto = terminal.getc();
00125             led_rojo  = led_on ;
00126             led_verde = led_on ;
00127             led_azul  = led_on ;
00128             clear_screen();                 // Limpia la Pantalla de la Terminal
00129 Intenta:   terminal.printf(" ADIVINA EL NUMERO: \r\n");
00130             char respuesta = terminal.getc();
00131             if( secreto < respuesta  ) 
00132             {
00133                 terminal.printf(" Es mas Bajo  \r\n");
00134                 led_rojo  = led_on ;
00135                 led_verde = led_off;
00136                 led_azul  = led_off;             
00137                 goto Intenta;
00138             }
00139             if( secreto > respuesta  ) 
00140             {
00141                 terminal.printf(" Es mas Alto  \r\n");
00142                 led_rojo  = led_off;
00143                 led_verde = led_off;
00144                 led_azul  = led_on ;
00145                 goto Intenta;
00146             }
00147             if( secreto == respuesta ) 
00148             {
00149                 terminal.printf(" CORRECTO!, Es igual a: %c \r\n",secreto);
00150                 led_rojo  = led_off;
00151                 led_verde = led_on ;
00152                 led_azul  = led_off;
00153                 wait(1.0);
00154                 led_rojo  = led_off;
00155                 led_verde = led_off;
00156                 led_azul  = led_off;
00157                 wait(1.0);
00158                 led_rojo  = led_off;
00159                 led_verde = led_on ;
00160                 led_azul  = led_off;
00161                 wait(1.0);
00162                 terminal.printf(" Eres un Genio !!!  \r\n");
00163                 wait(1.0);
00164                 led_rojo  = led_on ;
00165                 led_verde = led_off;
00166                 led_azul  = led_on ;
00167                 wait(1.0);
00168                 led_rojo  = led_on ;
00169                 led_verde = led_on ;
00170                 led_azul  = led_off;
00171                 wait(1.0);
00172                 led_rojo  = led_off;
00173                 led_verde = led_on ;
00174                 led_azul  = led_on ;
00175                 wait(1.0);
00176                 led_rojo  = led_on ;
00177                 led_verde = led_on ;
00178                 led_azul  = led_on ;
00179             }
00180         terminal.printf(" Quieres intentarlo de nuevo?  \r\n");
00181         terminal.printf(" 0 = No \r\n 1 = Si  \r\n");
00182             char opcion = terminal.getc();
00183             if( opcion == '1' ) goto Inicio;
00184             else if( opcion == '0' )
00185             {
00186                 led_rojo  = led_off;
00187                 led_verde = led_off;
00188                 led_azul  = led_off;
00189                 terminal.printf(" Eso es todo Amigos!  \r\n");
00190                 break;
00191             }
00192         }
00193 }
00194 
00195 /* END main */
00196 
00197 /*
00198 ................................................................................
00199 :  Rutinas de los Vectores de Interrupción
00200 ................................................................................
00201 */
00202  
00203 /* END Events */ 
00204 /*
00205 ________________________________________________________________________________
00206 |
00207 |  Funciones Prototipo
00208 |_______________________________________________________________________________
00209 */
00210                 // Las Funciones Prototipo van aquí !
00211 void setup()
00212 {   
00213   terminal.baud(Baud_Rate);         // Se configura la velocidad de transmisión  
00214   terminal.printf("\r System is Wake Up!.\n\r"); //e inicia la comunicación a la Terminal.
00215   buzzer_test();
00216   clear_screen();
00217 }
00218               
00219 void buzzer_test()             // Software Blinking routine for LED 
00220 {
00221     /* Prueba del Buzzer */
00222     terminal.printf("Testing Buzzer... \n\r");
00223     buzzer = Buzz_On;
00224     wait_ms(750);
00225     buzzer = Buzz_Off;
00226     wait_ms(125);
00227     buzzer = Buzz_On;
00228     wait_ms(250);
00229     buzzer = Buzz_Off;
00230     wait_ms(125);
00231     buzzer = Buzz_On;
00232     wait_ms(500);
00233     buzzer = Buzz_Off;
00234     terminal.printf("Buzzer OK ! \n\r");
00235 }
00236 
00237 void clear_screen() 
00238 {
00239 //ANSI Terminal Commands
00240     terminal.printf("\x1B[2J");
00241     terminal.printf("\x1B[H");
00242 }
00243 
00244 /* END routines */   
00245  
00246 /* END program */                
00247 /*+-----------------------------------------------------------------------------       
00248 *+ La documentación va aquí!:
00249 *+-----------------------------------------------------------------------------       
00250 *+  Conexión al Led RGB:
00251 *+------------------------------------------------------------------------------
00252 *+ 
00253 *+  Los leds se pueden conectar a cualquier pin que se declare como DigitalOut. 
00254 *+  El dispositivo puede drenar hasta 20ma por todas sus salidas a un voltaje de 
00255 *+  3.3V, pero se recomienda no exceder de 1mA por salida.
00256 *+  Esto se logra poniendo una resistencia limitadora de mínimo 330 Ohms.
00257 *+   
00258 *+ 
00259 *+            PIN (Digital Out)  
00260 *+
00261 *+     Led ROJO      Led VERDE   Led AZUL
00262 *+
00263 *+       R       GND      G        B
00264 *+       O        O       O        O
00265 *+       |        |       |        |
00266 *+       |        |       |        |
00267 *+       /        |       /        /
00268 *+       \   1K   |       \   2K   \   2.2K  
00269 *+       /        |       /        /
00270 *+       \        |       \        \         UTILIZANDO LED RGB DE CÁTODO COMÚN
00271 *+       |        |       |        |
00272 *+       |        |       |        |
00273 *+    ___|___     |    ___|___  ___|___     
00274 *+    \      /    |    \      / \      /
00275 *+     \    /     |     \    /   \    /
00276 *+      \  /      |      \  /     \  /
00277 *+     __\/__     |     __\/__   __\/__
00278 *+       |        |       |        |
00279 **       |        |       |        |
00280 *+       |________|_______|________|   
00281 *+
00282 *+      
00283 *+      
00284 *+            PIN (Digital Out)  
00285 *+
00286 *+     Led ROJO      Led VERDE   Led AZUL
00287 *+       
00288 *+       R       VCC      G        B
00289 *+       O        O       O        O
00290 *+       |        |       |        |
00291 *+       |        |       |        |
00292 *+       /        |       /        /
00293 *+       \   2K   |       \   1K   \   1K  
00294 *+       /        |       /        /
00295 *+       \        |       \        \         UTILIZANDO LED RGB DE ÁNODO COMÚN
00296 *+       |        |       |        |
00297 *+       |        |       |        |
00298 *+    ___|___     |    ___|___  ___|___
00299 *+      /\        |      /\       /\
00300 *+     /  \       |     /  \     /  \
00301 *+    /    \      |    /    \   /    \
00302 *+   /______\     |   /______\ /______\
00303 *+       |        |       |        |
00304 **       |        |       |        |
00305 *+       |________|_______|________|   
00306 *+
00307 *+    
00308 *+
00309 *+------------------------------------------------------------------------------
00310 *+ Descripción del Coexionado del Buzzer
00311 *+------------------------------------------------------------------------------
00312 *+
00313 *+                  150
00314 *+  PWM Pin  -----/\/\/\/-------|
00315 *+                              | 
00316 *+                              |  +
00317 *+                              |  
00318 *+                            ( o ) BUZZER
00319 *+                              |
00320 *+                              |
00321 *+                              |
00322 *+                              |
00323 *+                            -----
00324 *+                             ---
00325 *+                              -
00326 *+
00327 *+------------------------------------------------------------------------------
00328 */
00329 /* END documentation */ 
00330 /*
00331 +--------------------------------------------------------------------------------
00332 |                               EJERCICIO
00333 |
00334 | 1.-   Este programa tambien acepta letras o caracteres?
00335 | 2.-   Modificar este programa para: 
00336 |       a) Que solo acepte números
00337 |       b) Agregar un contador de Número de Intentos 
00338 |       
00339 +--------------------------------------------------------------------------------
00340 |
00341 |                               EXAMEN
00342 |
00343 | 1.-  Modificar el programa para que despliegue el número de intentos para 
00344 |      adivinar el número secreto.
00345 | 2.-  Modificar el programa para haga eco con la respuesta que le introducimos.
00346 | 3.-  Bloquear el programa despues de cierto número de intentos
00347 | 4.-  Modificar el programa para que el número secreto sea generado aleatoriamente.
00348 |      a) Generar un Número Pseudo Aleatorio Mediante el Ticker
00349 |      b) Utilizando la función RANDOMIZE
00350 | Suerte!
00351 +--------------------------------------------------------------------------------
00352 |
00353 |                     T H E     A N T U L I U S   T E A M
00354 |  Research, Development, Systems Equipment, Support & Spare Parts    I n c.
00355 |                (C) Copyright 1989-2014, All rigths Reserved
00356 |
00357 | This program is licensed under rules of
00358 | THE BEANERS TECHNOLOGIES PROYECT
00359 +-------------------------------------------------------------------------------
00360 */
00361 /* END Mbed */