Igal Salazar / Mbed 2 deprecated Bluepill_Adivina_el_numero

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       : STM32F103C8_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 interactuar con el USART a través 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 velocidades 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 RGB_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 RGB_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;  // Apaga los LED's
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();      // Espera por la Tecla
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(); // Introduce el Número Secreto !!!
00125             led_rojo  = led_on ;            // Enciende todos los LED's
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 ;    // Show de Luces !!!
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;    // Vuelve a comenzar
00184             else if( opcion == '0' )
00185             {
00186                 led_rojo  = led_off;            // Apaga los LED´s
00187                 led_verde = led_off;            
00188                 led_azul  = led_off;
00189                 terminal.printf(" Eso es todo Amigos!  \r\n");
00190                 break;                          // Y termina la ejecución
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 ................................................................................ 
00249 :    
00250 : La documentación va aquí!
00251 :
00252 ................................................................................
00253 *
00254 *+-----------------------------------------------------------------------------       
00255 *+  Conexión al Led RGB:
00256 *+------------------------------------------------------------------------------
00257 *+ 
00258 *+  Los leds se pueden conectar a cualquier pin que se declare como DigitalOut. 
00259 *+  El dispositivo puede drenar hasta 20ma por todas sus salidas a un voltaje de 
00260 *+  3.3V, pero se recomienda no exceder de 1mA por salida.
00261 *+  Esto se logra poniendo una resistencia limitadora de mínimo 330 Ohms.
00262 *+   
00263 *+ 
00264 *+            PIN (Digital Out)  
00265 *+
00266 *+     Led ROJO      Led VERDE   Led AZUL
00267 *+
00268 *+       R       GND      G        B
00269 *+       O        O       O        O
00270 *+       |        |       |        |
00271 *+       |        |       |        |
00272 *+       /        |       /        /
00273 *+       \   1K   |       \   2K   \   2.2K  
00274 *+       /        |       /        /
00275 *+       \        |       \        \         UTILIZANDO LED RGB DE CÁTODO COMÚN
00276 *+       |        |       |        |
00277 *+       |        |       |        |
00278 *+    ___|___     |    ___|___  ___|___     
00279 *+    \      /    |    \      / \      /
00280 *+     \    /     |     \    /   \    /
00281 *+      \  /      |      \  /     \  /
00282 *+     __\/__     |     __\/__   __\/__
00283 *+       |        |       |        |
00284 **       |        |       |        |
00285 *+       |________|_______|________|   
00286 *+
00287 *+      
00288 *+      
00289 *+            PIN (Digital Out)  
00290 *+
00291 *+     Led ROJO      Led VERDE   Led AZUL
00292 *+       
00293 *+       R       VCC      G        B
00294 *+       O        O       O        O
00295 *+       |        |       |        |
00296 *+       |        |       |        |
00297 *+       /        |       /        /
00298 *+       \   2K   |       \   1K   \   1K  
00299 *+       /        |       /        /
00300 *+       \        |       \        \         UTILIZANDO LED RGB DE ÁNODO COMÚN
00301 *+       |        |       |        |
00302 *+       |        |       |        |
00303 *+    ___|___     |    ___|___  ___|___
00304 *+      /\        |      /\       /\
00305 *+     /  \       |     /  \     /  \
00306 *+    /    \      |    /    \   /    \
00307 *+   /______\     |   /______\ /______\
00308 *+       |        |       |        |
00309 **       |        |       |        |
00310 *+       |________|_______|________|   
00311 *+
00312 *+    
00313 *+
00314 *+------------------------------------------------------------------------------
00315 *+ Descripción del Coexionado del Buzzer
00316 *+------------------------------------------------------------------------------
00317 *+
00318 *+                  150
00319 *+  PWM Pin  -----/\/\/\/-------|
00320 *+                              | 
00321 *+                              |  +
00322 *+                              |  
00323 *+                            ( o ) BUZZER
00324 *+                              |
00325 *+                              |
00326 *+                              |
00327 *+                              |
00328 *+                            -----
00329 *+                             ---
00330 *+                              -
00331 *+
00332 *+------------------------------------------------------------------------------
00333 */
00334 /* END documentation */ 
00335 /*
00336 +--------------------------------------------------------------------------------
00337 |                               EJERCICIO
00338 |
00339 | 1.-   Este programa tambien acepta letras o caracteres?
00340 | 2.-   Modificar este programa para: 
00341 |       a) Que solo acepte números
00342 |       b) Agregar un contador de Número de Intentos (6)
00343 |       
00344 +--------------------------------------------------------------------------------
00345 |
00346 |                               EXAMEN
00347 |
00348 | 1.-  Modificar el programa para que despliegue el número de intentos para 
00349 |      adivinar el número secreto.
00350 | 2.-  Modificar el programa para haga eco con la respuesta que le introducimos.
00351 | 3.-  Bloquear el programa despues de cierto número de intentos (6).
00352 | 4.-  Modificar el programa para que el número secreto sea generado aleatoriamente.
00353 |      a) Generar un Número Pseudo Aleatorio Mediante el Ticker
00354 |      b) Utilzando las Librerías conio.h: random( ) y randomize( ): 
00355 |      c) Utilizando la función rand()
00356 |      d) Utilizando una "semilla" para generar el número pseudo aleatorio
00357 |      e) Generar la "semilla" utilizando el Ticker y el Número pseudo aleatorio
00358 |         utilizando la función srand()
00359 |
00360 | Tip: http://programacionnerd.blogspot.com/2012/05/c-generando-numeros-aleatorios-random.html
00361 |
00362 | Suerte!
00363 +--------------------------------------------------------------------------------
00364 |
00365 |                     T H E     A N T U L I U S   T E A M
00366 |  Research, Development, Systems Equipment, Support & Spare Parts    I n c.
00367 |                (C) Copyright 1989-2014, All rigths Reserved
00368 |
00369 | This program is licensed under rules of
00370 | THE BEANERS TECHNOLOGIES PROYECT
00371 +-------------------------------------------------------------------------------
00372 */
00373 /* END Mbed */