Adivina el Número Secreto desde la Terminal Serial
Dependencies: mbed
main.cpp
- Committer:
- Antulius
- Date:
- 2020-06-21
- Revision:
- 1:d5005327bdc4
- Parent:
- 0:f680c41c1640
File content as of revision 1:d5005327bdc4:
/* ########################################################################### ** Archivo : main.c ** Proyecto : STM32-103C8_Adivina ** Procesador : STM32F103C8 ** Plataforma : Blue Pill ** Herramienta : Mbed ** Compilador : Mbed Online C Compiler ** Version : Mbed-OS 5.15.0 ** Fecha/Hora : 18-12-2019, 11:48, # CodeG ** Descripción : ** Este proyecto muestra la configuración y uso de la Terminal Serial ** para intercurar con el usuar a traves del juego de "Adivina el Número" ** This module contains user's application code. ** Componentes : Timer, etc . ** Configuraciones : Se puede seleccionar entre diferentes velocodades de ** transmisión ** Autores : ** ATEAM Development Group: ** - Antulio Morgado Valle ** ** Versión : Beta ** Revisión : A ** Release : 0 ** Bugs & Fixes : ** Date : 20/10/2019 ** Ejemplpo del Hola Mundo ** 27/09/2010 ** ** ** ###########################################################################*/ /* :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: : Includes :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ #include "stm32f103c8t6.h" #include "mbed.h" #include "Serial.h" #include "stdio.h" /* :............................................................................... : Definiciones :............................................................................... */ #define LED_Type 0 // Tipo de LED RGB: 0=Cátodo Común, 1=Ánodo Común #define on 0 // Estado para boton presionado #define off 1 // Estado para boton sin presionar #define hold 2 // Estado para boton mantenido #define release 3 // Estado para boton liberado #define FALSE 0 // Estado FALSO #define TRUE 1 // Estado VERDADERO #define Buzz_Off 0 // Estado del Buzzer Apagado #define Buzz_On 1 // Estado del Buzzer Encendido #define Baud_Rate 115200 // Velocidad de Transmisión (Bauds) // Velocidades Permitidas: // 300, 600, 1200, 2400, 4800, 9600, // 14400, 19600, 28800, 38400, 57600 // 115200, 230400 #if Display_Type == 0 // Si el Led RGB es Cátodo Común #define led_on 1 // Estado para el Led encendido #define led_off 0 // Estado para el Led encendido #endif #if Display_Type == 1 // Si el Led RGB es Ánodo Común #define led_on 0 // Estado para el Led encendido #define led_off 1 // Estado para el Led encendido #endif /* +------------------------------------------------------------------------------- | Configuración de Puertos +------------------------------------------------------------------------------- */ DigitalOut led_monitor(LED1); // Inicializa el LED Monitor (Interno) DigitalOut led_azul(PB_0); // Inicializa el PWM1 (PB0_TIM3_CH3) Led AZUL DigitalOut led_verde(PA_7); // Inicializa el PWM2 (PA7_TIM3_CH2) Led VERDE DigitalOut led_rojo(PA_6); // Inicializa el PWM3 (PA6_TIM3_CH1) Led ROJO PwmOut buzzer(PB_1); // PB1_TIM3_CH4N // ***** Host PC Terminal Communication channels Serial terminal (PA_2, PA_3); // Inicializa la comunicación serial a la PC (Tx,Rx) //Serial terminal(USBTX, USBRX,115200);// Tx, Rx Baud Rate - Terminal Serial por USB @ 115,200 Bauds /* +------------------------------------------------------------------------------- | Variables Globales de Usuario +------------------------------------------------------------------------------- */ uint8_t Seleccion; // Seleccion de opción para el menú /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ void setup(void); void buzzer_test(void); void clear_screen(void); /* END definitions */ /* #=============================================================================== | | P R O G R A M A P R I N C I P A L | #=============================================================================== */ int main() { // Inicialización de variables, puertos e interrupciones confSysClock(); // Configure system clock (72MHz HSE clock, 48MHz USB clock) setup(); // Inicialización del sistema terminal.printf ("ADIVINA\n\r"); led_rojo = led_off; led_verde = led_off; led_azul = led_off; terminal.printf(" System is Wake Up!.\n\r"); // e inicia la comunicación serial terminal.printf ("\t\e[1;37;41mInstituto Politecnico Nacional\e[0m\n\r"); terminal.printf ("\e[1;37;42mESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA\e[0m\n\r\v"); 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"); terminal.printf("Pulse Cualquier Tecla para continuar..."); // Pausa Seleccion=getchar(); while(TRUE) { Inicio: clear_screen(); // Limpia la Pantalla de la Terminal terminal.printf(" DIGITE UN NUMERO SECRETO DE 0 A 9 \r\n"); char secreto = terminal.getc(); led_rojo = led_on ; led_verde = led_on ; led_azul = led_on ; clear_screen(); // Limpia la Pantalla de la Terminal Intenta: terminal.printf(" ADIVINA EL NUMERO: \r\n"); char respuesta = terminal.getc(); if( secreto < respuesta ) { terminal.printf(" Es mas Bajo \r\n"); led_rojo = led_on ; led_verde = led_off; led_azul = led_off; goto Intenta; } if( secreto > respuesta ) { terminal.printf(" Es mas Alto \r\n"); led_rojo = led_off; led_verde = led_off; led_azul = led_on ; goto Intenta; } if( secreto == respuesta ) { terminal.printf(" CORRECTO!, Es igual a: %c \r\n",secreto); led_rojo = led_off; led_verde = led_on ; led_azul = led_off; wait(1.0); led_rojo = led_off; led_verde = led_off; led_azul = led_off; wait(1.0); led_rojo = led_off; led_verde = led_on ; led_azul = led_off; wait(1.0); terminal.printf(" Eres un Genio !!! \r\n"); wait(1.0); led_rojo = led_on ; led_verde = led_off; led_azul = led_on ; wait(1.0); led_rojo = led_on ; led_verde = led_on ; led_azul = led_off; wait(1.0); led_rojo = led_off; led_verde = led_on ; led_azul = led_on ; wait(1.0); led_rojo = led_on ; led_verde = led_on ; led_azul = led_on ; } terminal.printf(" Quieres intentarlo de nuevo? \r\n"); terminal.printf(" 0 = No \r\n 1 = Si \r\n"); char opcion = terminal.getc(); if( opcion == '1' ) goto Inicio; else if( opcion == '0' ) { led_rojo = led_off; led_verde = led_off; led_azul = led_off; terminal.printf(" Eso es todo Amigos! \r\n"); break; } } } /* END main */ /* ................................................................................ : Rutinas de los Vectores de Interrupción ................................................................................ */ /* END Events */ /* ________________________________________________________________________________ | | Funciones Prototipo |_______________________________________________________________________________ */ // Las Funciones Prototipo van aquí ! void setup() { terminal.baud(Baud_Rate); // Se configura la velocidad de transmisión terminal.printf("\r System is Wake Up!.\n\r"); //e inicia la comunicación a la Terminal. buzzer_test(); clear_screen(); } void buzzer_test() // Software Blinking routine for LED { /* Prueba del Buzzer */ terminal.printf("Testing Buzzer... \n\r"); buzzer = Buzz_On; wait_ms(750); buzzer = Buzz_Off; wait_ms(125); buzzer = Buzz_On; wait_ms(250); buzzer = Buzz_Off; wait_ms(125); buzzer = Buzz_On; wait_ms(500); buzzer = Buzz_Off; terminal.printf("Buzzer OK ! \n\r"); } void clear_screen() { //ANSI Terminal Commands terminal.printf("\x1B[2J"); terminal.printf("\x1B[H"); } /* END routines */ /* END program */ /*+----------------------------------------------------------------------------- *+ La documentación va aquí!: *+----------------------------------------------------------------------------- *+ Conexión al Led RGB: *+------------------------------------------------------------------------------ *+ *+ Los leds se pueden conectar a cualquier pin que se declare como DigitalOut. *+ El dispositivo puede drenar hasta 20ma por todas sus salidas a un voltaje de *+ 3.3V, pero se recomienda no exceder de 1mA por salida. *+ Esto se logra poniendo una resistencia limitadora de mínimo 330 Ohms. *+ *+ *+ PIN (Digital Out) *+ *+ Led ROJO Led VERDE Led AZUL *+ *+ R GND G B *+ O O O O *+ | | | | *+ | | | | *+ / | / / *+ \ 1K | \ 2K \ 2.2K *+ / | / / *+ \ | \ \ UTILIZANDO LED RGB DE CÁTODO COMÚN *+ | | | | *+ | | | | *+ ___|___ | ___|___ ___|___ *+ \ / | \ / \ / *+ \ / | \ / \ / *+ \ / | \ / \ / *+ __\/__ | __\/__ __\/__ *+ | | | | ** | | | | *+ |________|_______|________| *+ *+ *+ *+ PIN (Digital Out) *+ *+ Led ROJO Led VERDE Led AZUL *+ *+ R VCC G B *+ O O O O *+ | | | | *+ | | | | *+ / | / / *+ \ 2K | \ 1K \ 1K *+ / | / / *+ \ | \ \ UTILIZANDO LED RGB DE ÁNODO COMÚN *+ | | | | *+ | | | | *+ ___|___ | ___|___ ___|___ *+ /\ | /\ /\ *+ / \ | / \ / \ *+ / \ | / \ / \ *+ /______\ | /______\ /______\ *+ | | | | ** | | | | *+ |________|_______|________| *+ *+ *+ *+------------------------------------------------------------------------------ *+ Descripción del Coexionado del Buzzer *+------------------------------------------------------------------------------ *+ *+ 150 *+ PWM Pin -----/\/\/\/-------| *+ | *+ | + *+ | *+ ( o ) BUZZER *+ | *+ | *+ | *+ | *+ ----- *+ --- *+ - *+ *+------------------------------------------------------------------------------ */ /* END documentation */ /* +-------------------------------------------------------------------------------- | EJERCICIO | | 1.- Este programa tambien acepta letras o caracteres? | 2.- Modificar este programa para: | a) Que solo acepte números | b) Agregar un contador de Número de Intentos | +-------------------------------------------------------------------------------- | | EXAMEN | | 1.- Modificar el programa para que despliegue el número de intentos para | adivinar el número secreto. | 2.- Modificar el programa para haga eco con la respuesta que le introducimos. | 3.- Bloquear el programa despues de cierto número de intentos | 4.- Modificar el programa para que el número secreto sea generado aleatoriamente. | a) Generar un Número Pseudo Aleatorio Mediante el Ticker | b) Utilizando la función RANDOMIZE | Suerte! +-------------------------------------------------------------------------------- | | T H E A N T U L I U S T E A M | Research, Development, Systems Equipment, Support & Spare Parts I n c. | (C) Copyright 1989-2014, All rigths Reserved | | This program is licensed under rules of | THE BEANERS TECHNOLOGIES PROYECT +------------------------------------------------------------------------------- */ /* END Mbed */