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 /* ########################################################################### 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 */
Generated on Fri Jul 15 2022 01:10:04 by
1.7.2