Adivina el Número Secreto desde la Terminal Serial

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
Antulius
Date:
Thu Sep 05 23:29:04 2019 +0000
Commit message:
Adivina

Changed in this revision

PinNames.h Show annotated file Show diff for this revision Revisions of this file
SysClockConf.cpp Show annotated file Show diff for this revision Revisions of this file
SysClockConf.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
stm32f103c8t6.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r f680c41c1640 PinNames.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PinNames.h	Thu Sep 05 23:29:04 2019 +0000
@@ -0,0 +1,155 @@
+/* mbed Microcontroller Library
+ *******************************************************************************
+ * Copyright (c) 2014, STMicroelectronics
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *******************************************************************************
+ 
+ */
+#ifndef MBED_PINNAMES_H
+#define MBED_PINNAMES_H
+
+#include "cmsis.h"
+#include "PinNamesTypes.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+    // Not connected
+    NC = (int)0xFFFFFFFF,
+
+    // Ports
+    PA_0  = 0x00,
+    PA_1  = 0x01,
+    PA_2  = 0x02,
+    PA_3  = 0x03,
+    PA_4  = 0x04,
+    PA_5  = 0x05,
+    PA_6  = 0x06,
+    PA_7  = 0x07,
+    PA_8  = 0x08,
+    PA_9  = 0x09,
+    PA_10 = 0x0A,
+    PA_11 = 0x0B,
+    PA_12 = 0x0C,
+    PA_13 = NC,
+    PA_14 = NC,
+    PA_15 = 0x0F,
+
+    PB_0  = 0x10,
+    PB_1  = 0x11,
+    PB_2  = NC,
+    PB_3  = 0x13,
+    PB_4  = 0x14,
+    PB_5  = 0x15,
+    PB_6  = 0x16,
+    PB_7  = 0x17,
+    PB_8  = 0x18,
+    PB_9  = 0x19,
+    PB_10 = 0x1A,
+    PB_11 = 0x1B,
+    PB_12 = 0x1C,
+    PB_13 = 0x1D,
+    PB_14 = 0x1E,
+    PB_15 = 0x1F,
+
+    PC_0  = NC,
+    PC_1  = NC,
+    PC_2  = NC,
+    PC_3  = NC,
+    PC_4  = NC,
+    PC_5  = NC,
+    PC_6  = NC,
+    PC_7  = NC,
+    PC_8  = NC,
+    PC_9  = NC,
+    PC_10 = NC,
+    PC_11 = NC,
+    PC_12 = NC,
+    PC_13 = 0x2D,
+    PC_14 = 0x2E,
+    PC_15 = 0x2F,
+
+    PD_2  = NC,
+
+    // ADC internal channels
+    ADC_TEMP = 0xF0,
+    ADC_VREF = 0xF1,
+
+    // Arduino connector namings
+    A0          = PA_0,
+    A1          = PA_1,
+    A2          = PA_4,
+    A3          = PB_0,
+    A4          = NC,
+    A5          = NC,
+    D0          = PA_3,
+    D1          = PA_2,
+    D2          = PA_10,
+    D3          = PB_3,
+    D4          = PB_5,
+    D5          = PB_4,
+    D6          = PB_10,
+    D7          = PA_8,
+    D8          = PA_9,
+    D9          = NC,
+    D10         = PB_6,
+    D11         = PA_7,
+    D12         = PA_6,
+    D13         = PA_5,
+    D14         = PB_9,
+    D15         = PB_8,
+
+    // Generic signals namings
+    Red_Led     = NC,
+    Green_Led   = PC_13,
+    Blue_Led    = NC,
+    LED1        = PC_13,
+    LED2        = NC,
+    LED3        = NC,
+    LED4        = NC,
+    USER_BUTTON = NC,
+    SERIAL_TX   = PA_2,
+    SERIAL_RX   = PA_3,
+    USBTX       = PA_2,
+    USBRX       = PB_3,
+    CANRX       = PB_8,    
+    CANTX       = PB_9,
+    I2C_SCL     = PB_8,
+    I2C_SDA     = PB_9,
+    SPI_MOSI    = PA_7,
+    SPI_MISO    = PA_6,
+    SPI_SCK     = PA_5,
+    SPI_CS      = PB_6,
+    PWM_OUT     = PB_3
+} PinName;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff -r 000000000000 -r f680c41c1640 SysClockConf.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SysClockConf.cpp	Thu Sep 05 23:29:04 2019 +0000
@@ -0,0 +1,56 @@
+/*
+  ******************************************************************************
+  * @file    SysClockConf.c
+  * @version 
+  * @date    05-July-2016
+  * @brief   System Clock configuration for STM32F103C8T6
+  *****************************************************************************
+  *
+  * All rights reserved.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  */
+
+#include "SysClockConf.h"
+#include "mbed.h"
+
+void HSE_SystemClock_Config(void) {
+    RCC_OscInitTypeDef        RCC_OscInitStruct;
+    RCC_ClkInitTypeDef        RCC_ClkInitStruct;
+    RCC_PeriphCLKInitTypeDef  PeriphClkInit;
+
+    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
+    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+    RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
+    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
+    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
+    HAL_RCC_OscConfig(&RCC_OscInitStruct);
+    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
+    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
+    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
+    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
+    HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
+    PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC|RCC_PERIPHCLK_USB;
+    PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
+    PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
+    HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);
+}
+
+void confSysClock(void) {
+    HAL_RCC_DeInit();
+    HSE_SystemClock_Config();
+    SystemCoreClockUpdate();
+}
\ No newline at end of file
diff -r 000000000000 -r f680c41c1640 SysClockConf.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SysClockConf.h	Thu Sep 05 23:29:04 2019 +0000
@@ -0,0 +1,2 @@
+#pragma once
+void confSysClock(void);
\ No newline at end of file
diff -r 000000000000 -r f680c41c1640 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Sep 05 23:29:04 2019 +0000
@@ -0,0 +1,204 @@
+/* ###########################################################################
+**    Archivo        : main.c
+**    Proyecto       : STM32-103C8_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 muestra la configuración y uso de la Terminal Serial
+**         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 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
+/*
++-------------------------------------------------------------------------------
+|  Configuración de Puertos 
++-------------------------------------------------------------------------------
+*/
+DigitalOut verde (LED1);    // PC_13    (Green_Led)
+DigitalOut rojo  (PB_1);    // NC       (Red_Led)
+
+// *****    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 
++-------------------------------------------------------------------------------
+*/
+//uint32_t Baud_Rate = 9600;                // Velocidad de Transmisión (Bauds)
+/*
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+|  Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+*/
+void Setup(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");
+    rojo  = off;
+    verde = off;
+
+    while(TRUE) 
+    {
+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(" 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 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");
+}              
+
+/* END routines */   
+ 
+/* END program */                
+
+/* 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.-   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 */ 
\ No newline at end of file
diff -r 000000000000 -r f680c41c1640 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Sep 05 23:29:04 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file
diff -r 000000000000 -r f680c41c1640 stm32f103c8t6.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stm32f103c8t6.h	Thu Sep 05 23:29:04 2019 +0000
@@ -0,0 +1,4 @@
+#pragma once
+#include "PinNames.h"
+#include "SysClockConf.h"
+