programa adivina para la tarjeta stm32f103c8 NUEVA VERSION

Dependencies:   mbed

Committer:
fcalzadas
Date:
Wed Sep 11 20:44:49 2019 +0000
Revision:
2:9c648e56a87e
Parent:
1:87e57a5439b8
NUEVA VERSION

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Antulius 0:9f7581d1af6f 1 /* ###########################################################################
Antulius 0:9f7581d1af6f 2 ** Archivo : main.c
fcalzadas 1:87e57a5439b8 3 ** Proyecto : STM32-F103C8_Adivina
Antulius 0:9f7581d1af6f 4 ** Procesador : STM32F103C8
Antulius 0:9f7581d1af6f 5 ** Herramienta : Mbed
Antulius 0:9f7581d1af6f 6 ** Version : Driver 01.01
Antulius 0:9f7581d1af6f 7 ** Compilador : GNU C Compiler
Antulius 0:9f7581d1af6f 8 ** Fecha/Hora : 14-07-2015, 11:48, # CodeGen: 0
Antulius 0:9f7581d1af6f 9 ** Descripción :
Antulius 0:9f7581d1af6f 10 ** Este proyecto hace...
Antulius 0:9f7581d1af6f 11 ** This module contains user's application code.
Antulius 0:9f7581d1af6f 12 ** Componentes : GPIO, Timer, etc .
Antulius 0:9f7581d1af6f 13 ** Configuraciones : Includes, Stacks y Drivers externos
Antulius 0:9f7581d1af6f 14 ** Autores :
Antulius 0:9f7581d1af6f 15 ** ATEAM Development Group:
Antulius 0:9f7581d1af6f 16 ** - Antulio Morgado Valle
Antulius 0:9f7581d1af6f 17 **
Antulius 0:9f7581d1af6f 18 ** Versión : Beta
Antulius 0:9f7581d1af6f 19 ** Revisión : A
Antulius 0:9f7581d1af6f 20 ** Release : 0
Antulius 0:9f7581d1af6f 21 ** Bugs & Fixes :
Antulius 0:9f7581d1af6f 22 ** Date : 20/10/2019
Antulius 0:9f7581d1af6f 23 ** Added support for Led_RGB
Antulius 0:9f7581d1af6f 24 ** 22/09/2018
Antulius 0:9f7581d1af6f 25 ** Added LCD Menu, Beta version (with bugs)
Antulius 0:9f7581d1af6f 26 **
Antulius 0:9f7581d1af6f 27 ** ###########################################################################*/
Antulius 0:9f7581d1af6f 28 /*
Antulius 0:9f7581d1af6f 29 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Antulius 0:9f7581d1af6f 30 : Includes
Antulius 0:9f7581d1af6f 31 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Antulius 0:9f7581d1af6f 32 */
Antulius 0:9f7581d1af6f 33 #include "mbed.h"
Antulius 0:9f7581d1af6f 34 #include "stm32f103c8t6.h"
Antulius 0:9f7581d1af6f 35 //#include "stm32f10x.h"
Antulius 0:9f7581d1af6f 36 #include "PinNames.h"
Antulius 0:9f7581d1af6f 37 //#include "SysClockConf.h"
Antulius 0:9f7581d1af6f 38 //#include "AnalogIn.h"
Antulius 0:9f7581d1af6f 39 //#include "Led_RGB.h"
fcalzadas 1:87e57a5439b8 40 #include "Serial.h"
fcalzadas 1:87e57a5439b8 41 #include "stdio.h"
Antulius 0:9f7581d1af6f 42
Antulius 0:9f7581d1af6f 43 /*
Antulius 0:9f7581d1af6f 44 :...............................................................................
Antulius 0:9f7581d1af6f 45 : Definiciones
Antulius 0:9f7581d1af6f 46 :...............................................................................
Antulius 0:9f7581d1af6f 47 */
Antulius 0:9f7581d1af6f 48 #define on 0 // Estado para boton presionado
Antulius 0:9f7581d1af6f 49 #define off 1 // Estado para boton sin presionar
Antulius 0:9f7581d1af6f 50 #define hold 2 // Estado para boton mantenido
Antulius 0:9f7581d1af6f 51 #define release 3 // Estado para boton liberado
fcalzadas 1:87e57a5439b8 52 #define FALSE 0
fcalzadas 1:87e57a5439b8 53 #define TRUE 1
fcalzadas 1:87e57a5439b8 54 //#define Ticker_Rate 1000 // Periodo de interrupción (us)
Antulius 0:9f7581d1af6f 55 /*
Antulius 0:9f7581d1af6f 56 +-------------------------------------------------------------------------------
Antulius 0:9f7581d1af6f 57 | Configuración de Puertos
Antulius 0:9f7581d1af6f 58 +-------------------------------------------------------------------------------
Antulius 0:9f7581d1af6f 59 */
Antulius 0:9f7581d1af6f 60 //confSysClock(); // Configure system clock (72MHz HSE clock, 48MHz USB clock)
fcalzadas 1:87e57a5439b8 61 //Ticker TimerInt; // Inicializa la Interrupción por Timer
fcalzadas 1:87e57a5439b8 62 DigitalOut verde (LED1); // Inicializa el LED Monitor
fcalzadas 1:87e57a5439b8 63 DigitalOut rojo (PB_1); // Inicializa el LED Testigo
Antulius 0:9f7581d1af6f 64 Serial terminal(PA_2, PA_3); // Inicializa la Comunicación Serial a la PC
fcalzadas 1:87e57a5439b8 65 //PwmOut servo(PA_7); // Inicializa el PWM
fcalzadas 1:87e57a5439b8 66 //AnalogIn sensor1 (PB_0); // Inicializa Canal Analógico para sensor 1
Antulius 0:9f7581d1af6f 67 /*
Antulius 0:9f7581d1af6f 68 +-------------------------------------------------------------------------------
Antulius 0:9f7581d1af6f 69 | Variables Globales de Usuario
Antulius 0:9f7581d1af6f 70 +-------------------------------------------------------------------------------
Antulius 0:9f7581d1af6f 71 */
fcalzadas 1:87e57a5439b8 72 //uint16_t Rate=Ticker_Rate/2; // Velocidad de barrido (500us = 0.5ms)
fcalzadas 1:87e57a5439b8 73 //uint16_t counter=250; // Cuenta inicial de 250us
Antulius 0:9f7581d1af6f 74 /* END variables */
Antulius 0:9f7581d1af6f 75
Antulius 0:9f7581d1af6f 76 /*
Antulius 0:9f7581d1af6f 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Antulius 0:9f7581d1af6f 78 | Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción
Antulius 0:9f7581d1af6f 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Antulius 0:9f7581d1af6f 80 */
Antulius 0:9f7581d1af6f 81 // Las Definiciones de Funciones Prototipo
Antulius 0:9f7581d1af6f 82 // y Apuntadores a Vectores de Interrupciones van aquí !
fcalzadas 1:87e57a5439b8 83 void Setup(void);
fcalzadas 1:87e57a5439b8 84 //void TimerInt_OnInterrupt(void);
fcalzadas 1:87e57a5439b8 85 //void Blinking_Led(void);
Antulius 0:9f7581d1af6f 86 /* END prototypes */
Antulius 0:9f7581d1af6f 87
Antulius 0:9f7581d1af6f 88 /* END definitions */
Antulius 0:9f7581d1af6f 89 /*
Antulius 0:9f7581d1af6f 90 #===============================================================================
Antulius 0:9f7581d1af6f 91 |
Antulius 0:9f7581d1af6f 92 | P R O G R A M A P R I N C I P A L
Antulius 0:9f7581d1af6f 93 |
Antulius 0:9f7581d1af6f 94 #===============================================================================
Antulius 0:9f7581d1af6f 95 */
Antulius 0:9f7581d1af6f 96 int main()
Antulius 0:9f7581d1af6f 97 { // Inicialización de variables, puertos e interrupciones
fcalzadas 1:87e57a5439b8 98 void confSysClock(); // Inicialización del Sistema, Configure system clock (72MHz HSE clock, 48MHz USB clock)
fcalzadas 1:87e57a5439b8 99 void Setup(void);
fcalzadas 1:87e57a5439b8 100 //TimerInt.attach_us(&TimerInt_OnInterrupt, Ticker_Rate); // Le asigna el periodo de interrupción de 1ms (Ticker_Rate=1000)
Antulius 0:9f7581d1af6f 101
fcalzadas 1:87e57a5439b8 102 //terminal.baud(115200); // Se configura la velocidad de transmisión e inicia la comunicación serial.
fcalzadas 1:87e57a5439b8 103 terminal.printf(" ADIVINA \n\r");
fcalzadas 1:87e57a5439b8 104 rojo = off;
fcalzadas 1:87e57a5439b8 105 verde = off;
Antulius 0:9f7581d1af6f 106
Antulius 0:9f7581d1af6f 107 while (true) // El Lazo del Programa principal está aquí !!!
Antulius 0:9f7581d1af6f 108 {
fcalzadas 1:87e57a5439b8 109 Inicio: terminal.printf("DIGITE UN NUMERO SECRETO DE 0 A 9 \r\n");
fcalzadas 1:87e57a5439b8 110 char secreto = terminal.getc();
fcalzadas 1:87e57a5439b8 111 rojo = on;
fcalzadas 1:87e57a5439b8 112 verde = on;
fcalzadas 1:87e57a5439b8 113 Intenta: terminal.printf("ADIVINA EL NUMERO \r\n");
fcalzadas 1:87e57a5439b8 114 char respuesta = terminal.getc();
fcalzadas 1:87e57a5439b8 115 if( secreto < respuesta )
fcalzadas 1:87e57a5439b8 116 {
fcalzadas 1:87e57a5439b8 117 terminal.printf("Es mas BAJO \r\n");
fcalzadas 1:87e57a5439b8 118 rojo = on;
fcalzadas 1:87e57a5439b8 119 verde = off;
fcalzadas 1:87e57a5439b8 120 goto Intenta;
fcalzadas 1:87e57a5439b8 121 }
fcalzadas 1:87e57a5439b8 122 if(secreto > respuesta )
fcalzadas 1:87e57a5439b8 123 {
fcalzadas 1:87e57a5439b8 124 terminal.printf("Es mas ALTO \r\n");
fcalzadas 1:87e57a5439b8 125 rojo = off;
fcalzadas 1:87e57a5439b8 126 verde = on;
fcalzadas 1:87e57a5439b8 127 goto Intenta;
fcalzadas 1:87e57a5439b8 128 }
fcalzadas 1:87e57a5439b8 129 if( secreto == respuesta )
fcalzadas 1:87e57a5439b8 130 {
fcalzadas 1:87e57a5439b8 131 terminal.printf("CORRECTO!, Es igual a: %c \r\n", secreto);
fcalzadas 1:87e57a5439b8 132 rojo = off;
fcalzadas 1:87e57a5439b8 133 verde = on;
fcalzadas 1:87e57a5439b8 134 wait(1.0);
fcalzadas 1:87e57a5439b8 135 rojo = off;
fcalzadas 1:87e57a5439b8 136 verde = off;
fcalzadas 1:87e57a5439b8 137 wait(1.0);
fcalzadas 1:87e57a5439b8 138 rojo = off;
fcalzadas 1:87e57a5439b8 139 verde = on;
fcalzadas 1:87e57a5439b8 140 wait(1.0);
fcalzadas 1:87e57a5439b8 141 terminal.printf("ERES UN GENIO !!! \r\n");
fcalzadas 1:87e57a5439b8 142 wait(1.0);
fcalzadas 1:87e57a5439b8 143 rojo = on;
fcalzadas 1:87e57a5439b8 144 verde = off;
fcalzadas 1:87e57a5439b8 145 wait(1.0);
fcalzadas 1:87e57a5439b8 146 rojo =off;
fcalzadas 1:87e57a5439b8 147 verde = on;
fcalzadas 1:87e57a5439b8 148 }
fcalzadas 1:87e57a5439b8 149 terminal.printf("Quieres intentarlo de nuevo? \r\n");
fcalzadas 1:87e57a5439b8 150 terminal.printf("0 = NO \r\n 1 = SI \r\n");
fcalzadas 1:87e57a5439b8 151 char opcion = terminal .getc();
fcalzadas 1:87e57a5439b8 152 if(opcion =='1') goto Inicio;
fcalzadas 1:87e57a5439b8 153 else if(opcion == '0')
fcalzadas 1:87e57a5439b8 154 {
fcalzadas 1:87e57a5439b8 155 terminal.printf("GAME OVER \r\n");
fcalzadas 1:87e57a5439b8 156 break;
fcalzadas 1:87e57a5439b8 157 }
fcalzadas 1:87e57a5439b8 158
Antulius 0:9f7581d1af6f 159 }
Antulius 0:9f7581d1af6f 160 }
Antulius 0:9f7581d1af6f 161 /* END main */
Antulius 0:9f7581d1af6f 162
Antulius 0:9f7581d1af6f 163 /*
Antulius 0:9f7581d1af6f 164 ................................................................................
Antulius 0:9f7581d1af6f 165 : Rutinas de los Vectores de Interrupción
Antulius 0:9f7581d1af6f 166 ................................................................................
Antulius 0:9f7581d1af6f 167 */
Antulius 0:9f7581d1af6f 168 // Las Rutinas de Atención a Interrupciones van aquí !
fcalzadas 1:87e57a5439b8 169 /*void TimerInt_OnInterrupt() // Rutina de Atención al Ticker
Antulius 0:9f7581d1af6f 170 {
Antulius 0:9f7581d1af6f 171 counter--; // Aquí va la Rutina de Servicio !
Antulius 0:9f7581d1af6f 172 if (!counter)
Antulius 0:9f7581d1af6f 173 {
Antulius 0:9f7581d1af6f 174 terminal.printf("Counter Finish! \r\n");
Antulius 0:9f7581d1af6f 175 led_monitor = !led_monitor; // Parapadeo del LED por Interrupción (LED Toggled)
Antulius 0:9f7581d1af6f 176 counter = Rate; // Restablece el contador, Le asigna el periodo de 0.5ms (Rate=500)
Antulius 0:9f7581d1af6f 177 }
fcalzadas 1:87e57a5439b8 178 }*/
Antulius 0:9f7581d1af6f 179 /* END Events */
Antulius 0:9f7581d1af6f 180 /*
Antulius 0:9f7581d1af6f 181 ________________________________________________________________________________
Antulius 0:9f7581d1af6f 182 |
Antulius 0:9f7581d1af6f 183 | Funciones Prototipo
Antulius 0:9f7581d1af6f 184 |_______________________________________________________________________________
Antulius 0:9f7581d1af6f 185 */
Antulius 0:9f7581d1af6f 186 // Las Funciones Prototipo van aquí !
fcalzadas 1:87e57a5439b8 187 void Setup() // Software Blinking routine for LED
Antulius 0:9f7581d1af6f 188 {
Antulius 0:9f7581d1af6f 189 // The on-board LED is connected, via a resistor, to +3.3V (not to GND).
Antulius 0:9f7581d1af6f 190 // So to turn the LED on or off we have to set it to 0 or 1 respectively
fcalzadas 1:87e57a5439b8 191 terminal.baud(9600);
fcalzadas 1:87e57a5439b8 192 terminal.printf("System is Wake Up!.\n\r");
fcalzadas 1:87e57a5439b8 193 //led_testigo = 1; // turn the LED on (using Positive Logic)
fcalzadas 1:87e57a5439b8 194 //wait_ms(200); // 200 millisecond
fcalzadas 1:87e57a5439b8 195 //led_testigo = 0; // turn the LED off (using Positive Logic)
fcalzadas 1:87e57a5439b8 196 //wait_ms(1000); // 1000 millisecond
Antulius 0:9f7581d1af6f 197 }
Antulius 0:9f7581d1af6f 198 /* END functions */
Antulius 0:9f7581d1af6f 199
Antulius 0:9f7581d1af6f 200 /* END program */
Antulius 0:9f7581d1af6f 201
Antulius 0:9f7581d1af6f 202 /*+-----------------------------------------------------------------------------
Antulius 0:9f7581d1af6f 203 *+ Conexión al Led Testigo:
Antulius 0:9f7581d1af6f 204 *+
Antulius 0:9f7581d1af6f 205 *+ Los leds se pueden conectar a cualquier pin que se declare como DigitalOut.
Antulius 0:9f7581d1af6f 206 *+ El dispositivo puede drenar hasta 20ma por todas sus salidas a un voltaje de
Antulius 0:9f7581d1af6f 207 *+ 3.3V, pero se recomienda no exceder de 1mA por salida.
Antulius 0:9f7581d1af6f 208 *+ Esto se logra poniendo una resistencia limitadora de mínimo 330 Ohms.
Antulius 0:9f7581d1af6f 209 *+
Antulius 0:9f7581d1af6f 210 *+ 3.3V o 5V
Antulius 0:9f7581d1af6f 211 *+ O
Antulius 0:9f7581d1af6f 212 *+ |
Antulius 0:9f7581d1af6f 213 *+ |
Antulius 0:9f7581d1af6f 214 *+ /
Antulius 0:9f7581d1af6f 215 *+ \ 1K
Antulius 0:9f7581d1af6f 216 *+ /
Antulius 0:9f7581d1af6f 217 *+ \ UTILIZANDO LÓGICA NEGATIVA
Antulius 0:9f7581d1af6f 218 *+ |
Antulius 0:9f7581d1af6f 219 *+ ___|___
Antulius 0:9f7581d1af6f 220 *+ \ /
Antulius 0:9f7581d1af6f 221 *+ \ /
Antulius 0:9f7581d1af6f 222 *+ \ /
Antulius 0:9f7581d1af6f 223 *+ __\/__
Antulius 0:9f7581d1af6f 224 *+ |
Antulius 0:9f7581d1af6f 225 *+ |__________________________ PIN (Digital Out)
Antulius 0:9f7581d1af6f 226 *+
Antulius 0:9f7581d1af6f 227 *+
Antulius 0:9f7581d1af6f 228 *+
Antulius 0:9f7581d1af6f 229 *+
Antulius 0:9f7581d1af6f 230 *+ 1K
Antulius 0:9f7581d1af6f 231 *+
Antulius 0:9f7581d1af6f 232 *+ _________/\ /\ /\ _____ PIN (Digital Out)
Antulius 0:9f7581d1af6f 233 *+ | \/ \/ \/
Antulius 0:9f7581d1af6f 234 *+ |
Antulius 0:9f7581d1af6f 235 *+ |
Antulius 0:9f7581d1af6f 236 *+ ___|___
Antulius 0:9f7581d1af6f 237 *+ \ /
Antulius 0:9f7581d1af6f 238 *+ \ /
Antulius 0:9f7581d1af6f 239 *+ \ / UTILIZANDO LÓGICA POSITIVA
Antulius 0:9f7581d1af6f 240 *+ __\/__
Antulius 0:9f7581d1af6f 241 *+ |
Antulius 0:9f7581d1af6f 242 *+ |
Antulius 0:9f7581d1af6f 243 *+ |
Antulius 0:9f7581d1af6f 244 *+ ___|___
Antulius 0:9f7581d1af6f 245 *+ _____
Antulius 0:9f7581d1af6f 246 *+ ___
Antulius 0:9f7581d1af6f 247 *+ _
Antulius 0:9f7581d1af6f 248 *+
Antulius 0:9f7581d1af6f 249 *+ GND
Antulius 0:9f7581d1af6f 250 *+
fcalzadas 2:9c648e56a87e 251 */
fcalzadas 2:9c648e56a87e 252 /*
fcalzadas 2:9c648e56a87e 253 +--------------------------------------------------------------------------------
fcalzadas 2:9c648e56a87e 254 | EJERCICIO
fcalzadas 2:9c648e56a87e 255 |
fcalzadas 2:9c648e56a87e 256 | 1.- Este programa tambien acepta letras o caracteres?
fcalzadas 2:9c648e56a87e 257 | 2.- Modificar este programa para:
fcalzadas 2:9c648e56a87e 258 | a) Que solo acepte números
fcalzadas 2:9c648e56a87e 259 | b) Agregar un contador de Número de Intentos
fcalzadas 2:9c648e56a87e 260 |
fcalzadas 2:9c648e56a87e 261 +--------------------------------------------------------------------------------
fcalzadas 2:9c648e56a87e 262 |
fcalzadas 2:9c648e56a87e 263 | EXAMEN
fcalzadas 2:9c648e56a87e 264 |
fcalzadas 2:9c648e56a87e 265 | 1.- Modificar el programa para que despliegue el número de intentos para adivinar
fcalzadas 2:9c648e56a87e 266 | el número secreto.
fcalzadas 2:9c648e56a87e 267 | 2.- Modificar el programa para haga eco con la respuesta que le introducimos.
fcalzadas 2:9c648e56a87e 268 |
fcalzadas 2:9c648e56a87e 269 | 3.- Modificar el programa para que el número secreto sea generado aleatoriamente.
fcalzadas 2:9c648e56a87e 270 | a) Generar un Número Pseudo Aleatorio Mediante el Ticker
fcalzadas 2:9c648e56a87e 271 | b) Utilizando la función RANDOMIZE
fcalzadas 2:9c648e56a87e 272 | Suerte!
fcalzadas 2:9c648e56a87e 273 +--------------------------------------------------------------------------------
Antulius 0:9f7581d1af6f 274
fcalzadas 2:9c648e56a87e 275 */
Antulius 0:9f7581d1af6f 276 /* END Mbed */