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.
Dependencies: mbed
Diff: main.cpp
- Revision:
- 1:d5005327bdc4
- Parent:
- 0:f680c41c1640
--- a/main.cpp Thu Sep 05 23:29:04 2019 +0000
+++ b/main.cpp Sun Jun 21 05:15:50 2020 +0000
@@ -2,12 +2,14 @@
** Archivo : main.c
** Proyecto : STM32-103C8_Adivina
** Procesador : STM32F103C8
+** Plataforma : Blue Pill
** Herramienta : Mbed
-** Version : Driver 01.01
-** Compilador : GNU C Compiler
-** Fecha/Hora : 14-07-2015, 11:48, # CodeGen: 0
+** 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
@@ -41,20 +43,39 @@
: Definiciones
:...............................................................................
*/
-#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 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 verde (LED1); // PC_13 (Green_Led)
-DigitalOut rojo (PB_1); // NC (Red_Led)
-
+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
@@ -64,13 +85,15 @@
| Variables Globales de Usuario
+-------------------------------------------------------------------------------
*/
-//uint32_t Baud_Rate = 9600; // Velocidad de Transmisión (Bauds)
+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 setup(void);
+void buzzer_test(void);
+void clear_screen(void);
/* END definitions */
/*
@@ -82,53 +105,77 @@
*/
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");
- rojo = off;
- verde = off;
-
- while(TRUE)
- {
-Inicio: terminal.printf(" DIGITE UN NUMERO SECRETO DE 0 A 9 \r\n");
+ 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();
- rojo = on;
- verde = on;
- Intenta: terminal.printf(" ADIVINA EL NUMERO: \r\n");
+ 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");
- rojo = on;
- verde = off;
+ led_rojo = led_on ;
+ led_verde = led_off;
+ led_azul = led_off;
goto Intenta;
}
if( secreto > respuesta )
{
terminal.printf(" Es mas Alto \r\n");
- rojo = off;
- verde = on;
+ 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);
- rojo = off;
- verde = on;
+ led_rojo = led_off;
+ led_verde = led_on ;
+ led_azul = led_off;
wait(1.0);
- rojo = off;
- verde = off;
+ led_rojo = led_off;
+ led_verde = led_off;
+ led_azul = led_off;
wait(1.0);
- rojo = off;
- verde = on;
+ 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);
- rojo = on;
- verde = off;
+ 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);
- rojo = off;
- verde = on;
+ 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");
@@ -136,6 +183,9 @@
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;
}
@@ -158,17 +208,124 @@
|_______________________________________________________________________________
*/
// Las Funciones Prototipo van aquí !
-void Setup()
+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
{
-// terminal.baud(Baud_Rate); // Se configura la velocidad de transmisión e inicia la comunicación serial.
- terminal.baud(115200); // Se configura la velocidad de transmisión e inicia la comunicación serial.
- terminal.printf(" System is Wake Up!.\n\r");
-}
+ /* 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 */
/*
+--------------------------------------------------------------------------------
@@ -183,13 +340,13 @@
|
| 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.- 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
+| 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!
+--------------------------------------------------------------------------------
|