programa adivina para la tarjeta stm32f103c8 NUEVA VERSION

Dependencies:   mbed

main.cpp

Committer:
fcalzadas
Date:
2019-09-11
Revision:
2:9c648e56a87e
Parent:
1:87e57a5439b8

File content as of revision 2:9c648e56a87e:

/* ###########################################################################
**    Archivo        : main.c
**    Proyecto       : STM32-F103C8_Adivina
**    Procesador     : STM32F103C8
**    Herramienta    : Mbed
**    Version        : Driver 01.01
**    Compilador     : GNU C Compiler
**    Fecha/Hora     : 14-07-2015, 11:48, # CodeGen: 0
**    Descripción    :
**         Este proyecto hace...
**         This module contains user's application code.
**   Componentes     : GPIO, Timer, etc .
**   Configuraciones : Includes, Stacks y Drivers externos
**   Autores         :
**         ATEAM Development Group:
**          - Antulio Morgado Valle
**
**   Versión        : Beta
**   Revisión       : A
**   Release        : 0
**   Bugs & Fixes   :
**   Date           : 20/10/2019
**                    Added support for Led_RGB
**                    22/09/2018 
**                    Added LCD Menu, Beta version (with bugs)
**
** ###########################################################################*/
/*
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:  Includes
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*/
#include "mbed.h"
#include "stm32f103c8t6.h"
//#include "stm32f10x.h"
#include "PinNames.h"
//#include "SysClockConf.h"
//#include "AnalogIn.h"
//#include "Led_RGB.h"
#include "Serial.h"
#include "stdio.h"

/*
:...............................................................................
:  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
#define TRUE            1
//#define Ticker_Rate     1000            // Periodo de interrupción (us)
/*
+-------------------------------------------------------------------------------
|  Configuración de Puertos 
+-------------------------------------------------------------------------------
*/
//confSysClock();     // Configure system clock (72MHz HSE clock, 48MHz USB clock)
//Ticker      TimerInt;               // Inicializa la Interrupción por Timer
DigitalOut  verde   (LED1);      // Inicializa el LED Monitor
DigitalOut  rojo    (PB_1);      // Inicializa el LED Testigo
Serial      terminal(PA_2, PA_3);   // Inicializa la Comunicación Serial a la PC
//PwmOut      servo(PA_7);            // Inicializa el PWM
//AnalogIn    sensor1 (PB_0);         // Inicializa Canal Analógico para sensor 1
/*
+-------------------------------------------------------------------------------
|  Variables Globales de Usuario 
+-------------------------------------------------------------------------------
*/
//uint16_t Rate=Ticker_Rate/2;        // Velocidad de barrido (500us = 0.5ms)
//uint16_t counter=250;               // Cuenta inicial de 250us
/* END variables */

/*
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|  Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
        // Las Definiciones de Funciones Prototipo 
        // y Apuntadores a Vectores de Interrupciones van aquí !
void Setup(void);
//void TimerInt_OnInterrupt(void);  
//void Blinking_Led(void);
/* END prototypes */

/* 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
void confSysClock();             // Inicialización del Sistema, Configure system clock (72MHz HSE clock, 48MHz USB clock)
void Setup(void);
//TimerInt.attach_us(&TimerInt_OnInterrupt, Ticker_Rate);   // Le asigna el periodo de interrupción de 1ms (Ticker_Rate=1000)

//terminal.baud(115200);      // Se configura la velocidad de transmisión e inicia la comunicación serial.    
terminal.printf(" ADIVINA \n\r"); 
rojo = off;
verde = off;

    while (true)                // El Lazo del Programa principal está aquí !!!
    {
        Inicio:     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");
                    char respuesta = terminal.getc();
                    if( secreto < respuesta )
                    {
                            terminal.printf("Es mas BAJO \r\n");
                            rojo = on;
                            verde = off;
                            goto Intenta;
                    }
                    if(secreto > respuesta )
                    {
                            terminal.printf("Es mas ALTO \r\n");
                            rojo = off;
                            verde = on;
                            goto Intenta;
                    }
                    if( secreto == respuesta )
                    {
                        terminal.printf("CORRECTO!, Es igual a: %c \r\n", secreto);
                        rojo = off;
                        verde = on;
                        wait(1.0);
                        rojo = off;
                        verde = off;
                        wait(1.0);
                        rojo = off;
                        verde = on;
                        wait(1.0);
                        terminal.printf("ERES UN GENIO !!! \r\n");
                        wait(1.0);
                        rojo = on;
                        verde = off;
                        wait(1.0);
                        rojo =off;
                        verde = 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')
                {
                    terminal.printf("GAME OVER  \r\n");
                    break;
                } 
                            
    }
}
/* END main */

/*
................................................................................
:  Rutinas de los Vectores de Interrupción
................................................................................
*/
                // Las Rutinas de Atención a Interrupciones van aquí !
/*void TimerInt_OnInterrupt()          // Rutina de Atención al Ticker
{
    counter--;                      // Aquí va la Rutina de Servicio !
    if (!counter)
    {
        terminal.printf("Counter Finish! \r\n");
        led_monitor = !led_monitor; // Parapadeo del LED por Interrupción (LED Toggled)
        counter = Rate;           // Restablece el contador, Le asigna el periodo de 0.5ms (Rate=500)
    } 
}*/
/* END Events */   
/*
________________________________________________________________________________
|
|  Funciones Prototipo
|_______________________________________________________________________________
*/
                // Las Funciones Prototipo van aquí !
void Setup()             // Software Blinking routine for LED 
{
        // The on-board LED is connected, via a resistor, to +3.3V (not to GND). 
        // So to turn the LED on or off we have to set it to 0 or 1 respectively
        terminal.baud(9600);
        terminal.printf("System is Wake Up!.\n\r");
    //led_testigo = 1;        // turn the LED on (using Positive Logic)
    //wait_ms(200);           // 200 millisecond
    //led_testigo = 0;        // turn the LED off (using Positive Logic)
    //wait_ms(1000);          // 1000 millisecond
}
/* END functions */    
                
/* END program */

/*+-----------------------------------------------------------------------------       
*+  Conexión al Led Testigo:
*+ 
*+  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.
*+  
*+    3.3V o 5V
*+       O
*+       |
*+       |
*+       /
*+       \   1K
*+       /
*+       \                         UTILIZANDO LÓGICA NEGATIVA
*+       |
*+    ___|___
*+    \      /
*+     \    /
*+      \  /
*+     __\/__
*+       |
*+       |__________________________  PIN (Digital Out)
*+
*+      
*+      
*+       
*+                    1K
*+                   
*+        _________/\  /\  /\  _____    PIN (Digital Out)
*+       |           \/  \/  \/
*+       |      
*+       |
*+    ___|___
*+    \      /
*+     \    /
*+      \  /                       UTILIZANDO LÓGICA POSITIVA
*+     __\/__
*+       |
*+       |
*+       |
*+    ___|___
*+     _____
*+      ___
*+       _
*+
*+      GND
*+
*/
/*
+--------------------------------------------------------------------------------
|                               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.-   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!
+--------------------------------------------------------------------------------

*/
/* END Mbed */