Programa para calcular la raíz de una función por el método de Bisección.

Dependencies:   mbed

Committer:
JavierMarcelo98
Date:
Wed Oct 23 04:10:29 2019 +0000
Revision:
4:e8498d695fc2
Parent:
3:7d496863c448
Child:
5:7bd28f4ca12b
Programa con Barrido y Secuencia de Buzzer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Antulius 0:f680c41c1640 1 /* ###########################################################################
Antulius 0:f680c41c1640 2 ** Archivo : main.c
ArturoRiosRamos 3:7d496863c448 3 ** Proyecto : STM32-103C8_Portada
Antulius 0:f680c41c1640 4 ** Procesador : STM32F103C8
Antulius 0:f680c41c1640 5 ** Herramienta : Mbed
Antulius 0:f680c41c1640 6 ** Version : Driver 01.01
Antulius 0:f680c41c1640 7 ** Compilador : GNU C Compiler
Antulius 0:f680c41c1640 8 ** Fecha/Hora : 14-07-2015, 11:48, # CodeGen: 0
Antulius 0:f680c41c1640 9 ** Descripción :
Antulius 0:f680c41c1640 10 ** Este proyecto muestra la configuración y uso de la Terminal Serial
Antulius 0:f680c41c1640 11 ** This module contains user's application code.
Antulius 0:f680c41c1640 12 ** Componentes : Timer, etc .
Antulius 0:f680c41c1640 13 ** Configuraciones : Se puede seleccionar entre diferentes velocodades de
Antulius 0:f680c41c1640 14 ** transmisión
Antulius 0:f680c41c1640 15 ** Autores :
Antulius 0:f680c41c1640 16 ** ATEAM Development Group:
Antulius 0:f680c41c1640 17 ** - Antulio Morgado Valle
JavierMarcelo98 4:e8498d695fc2 18 ** - Marcelo Padron Javier
Antulius 0:f680c41c1640 19 **
Antulius 0:f680c41c1640 20 ** Versión : Beta
Antulius 0:f680c41c1640 21 ** Revisión : A
Antulius 0:f680c41c1640 22 ** Release : 0
Antulius 0:f680c41c1640 23 ** Bugs & Fixes :
JavierMarcelo98 4:e8498d695fc2 24 ** Date : 22/10/2019
JavierMarcelo98 4:e8498d695fc2 25 **
ArturoRiosRamos 3:7d496863c448 26 **
Antulius 0:f680c41c1640 27 **
Antulius 0:f680c41c1640 28 **
Antulius 0:f680c41c1640 29 ** ###########################################################################*/
Antulius 0:f680c41c1640 30 /*
Antulius 0:f680c41c1640 31 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Antulius 0:f680c41c1640 32 : Includes
Antulius 0:f680c41c1640 33 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Antulius 0:f680c41c1640 34 */
Antulius 0:f680c41c1640 35
Antulius 0:f680c41c1640 36 #include "stm32f103c8t6.h"
Antulius 0:f680c41c1640 37 #include "mbed.h"
Antulius 0:f680c41c1640 38 #include "Serial.h"
Antulius 0:f680c41c1640 39 #include "stdio.h"
Antulius 0:f680c41c1640 40 /*
Antulius 0:f680c41c1640 41 :...............................................................................
Antulius 0:f680c41c1640 42 : Definiciones
Antulius 0:f680c41c1640 43 :...............................................................................
Antulius 0:f680c41c1640 44 */
Antulius 0:f680c41c1640 45 #define on 0 // Estado para boton presionado
Antulius 0:f680c41c1640 46 #define off 1 // Estado para boton sin presionar
Antulius 0:f680c41c1640 47 #define hold 2 // Estado para boton mantenido
Antulius 0:f680c41c1640 48 #define release 3 // Estado para boton liberado
Antulius 0:f680c41c1640 49 #define FALSE 0 // Estado FALSO
Antulius 0:f680c41c1640 50 #define TRUE 1 // Estado VERDADERO
JavierMarcelo98 4:e8498d695fc2 51 #define Ticker_Rate 1000 // Tiempo del Ticker
JavierMarcelo98 4:e8498d695fc2 52 ////////////////////////////////////////// Definimos las notas notas musicales y su frecuencia.
Antulius 0:f680c41c1640 53 /*
Antulius 0:f680c41c1640 54 +-------------------------------------------------------------------------------
Antulius 0:f680c41c1640 55 | Configuración de Puertos
Antulius 0:f680c41c1640 56 +-------------------------------------------------------------------------------
JavierMarcelo98 4:e8498d695fc2 57 */
JavierMarcelo98 4:e8498d695fc2 58 DigitalOut verde (LED1); // NC (Green_Led)
JavierMarcelo98 4:e8498d695fc2 59 BusOut Torreta(PB_4,PB_3,PA_15,PA_12,PA_11,PA_10,PA_9,PA_8); //
JavierMarcelo98 4:e8498d695fc2 60 DigitalOut Led_Monitor (PB_1); // Led monitor de la Tarjeta STM32F103C8
JavierMarcelo98 4:e8498d695fc2 61 Ticker Barrido;
JavierMarcelo98 4:e8498d695fc2 62 PwmOut Buzzer(PB_11);
JavierMarcelo98 4:e8498d695fc2 63 Serial terminal (PA_2, PA_3); // Inicializa la comunicación serial a la PC (Tx,Rx)
JavierMarcelo98 4:e8498d695fc2 64 //Serial terminal(USBTX, USBRX,115200);// Tx, Rx Baud Rate - Terminal Serial por USB @ 115,200 Bauds
Antulius 0:f680c41c1640 65
Antulius 0:f680c41c1640 66 /*
Antulius 0:f680c41c1640 67 +-------------------------------------------------------------------------------
JavierMarcelo98 4:e8498d695fc2 68 | Variables Globales de Usuario
JavierMarcelo98 4:e8498d695fc2 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Antulius 0:f680c41c1640 70 */
JavierMarcelo98 4:e8498d695fc2 71 uint8_t SecuenciaA[]={ //Secuencia de luces A
JavierMarcelo98 4:e8498d695fc2 72 0xC3,0x3C,0xC3,0x3C,0xC3,0x3C,0xC3,0x3C,
JavierMarcelo98 4:e8498d695fc2 73 0xC3,0xFF,0xC3,0xFF,0xC3,0xFF,0xC3,0xFF,
JavierMarcelo98 4:e8498d695fc2 74 0xC3,0xFF,0xC3,0xFF,0xC3,0xFF,0xC3,0xFF,
JavierMarcelo98 4:e8498d695fc2 75 };
JavierMarcelo98 4:e8498d695fc2 76 uint16_t No_SecuenciasA=24;
JavierMarcelo98 4:e8498d695fc2 77 uint16_t A=0;
JavierMarcelo98 4:e8498d695fc2 78 uint16_t delayA=100;
JavierMarcelo98 4:e8498d695fc2 79 uint16_t contadorA=0; // Velocidad de Transmisión (Bauds)
JavierMarcelo98 4:e8498d695fc2 80
Antulius 0:f680c41c1640 81 /*
Antulius 0:f680c41c1640 82 | Definición de Funciones Prototipo y Rutinas de los Vectores de Interrupción
Antulius 0:f680c41c1640 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Antulius 0:f680c41c1640 84 */
ArturoRiosRamos 3:7d496863c448 85 void Portada();
JavierMarcelo98 4:e8498d695fc2 86 void Seleccion();
Antulius 0:f680c41c1640 87 void Setup(void);
JavierMarcelo98 4:e8498d695fc2 88 void Barrido_OnInterrupt(void);
Antulius 0:f680c41c1640 89 /* END definitions */
Antulius 0:f680c41c1640 90
Antulius 0:f680c41c1640 91 /*
Antulius 0:f680c41c1640 92 #===============================================================================
Antulius 0:f680c41c1640 93 |
Antulius 0:f680c41c1640 94 | P R O G R A M A P R I N C I P A L
Antulius 0:f680c41c1640 95 |
Antulius 0:f680c41c1640 96 #===============================================================================
Antulius 0:f680c41c1640 97 */
Antulius 0:f680c41c1640 98 int main()
JavierMarcelo98 4:e8498d695fc2 99 { // Inicialización de variables, puertos e interrupciones // Configure system clock (72MHz HSE clock, 48MHz USB clock)
Antulius 0:f680c41c1640 100 Setup(); // Inicialización del sistema
Antulius 0:f680c41c1640 101
JavierMarcelo98 4:e8498d695fc2 102 Portada(); //Mandar a llamar a la funcion Portada.
JavierMarcelo98 4:e8498d695fc2 103 Seleccion(); //Mandar a llamar a la Seleccion.
ArturoRiosRamos 3:7d496863c448 104 }
Antulius 0:f680c41c1640 105 /* END main */
Antulius 0:f680c41c1640 106
Antulius 0:f680c41c1640 107 /*
Antulius 0:f680c41c1640 108 ................................................................................
Antulius 0:f680c41c1640 109 : Rutinas de los Vectores de Interrupción
Antulius 0:f680c41c1640 110 ................................................................................
Antulius 0:f680c41c1640 111 */
Antulius 0:f680c41c1640 112
Antulius 0:f680c41c1640 113 /* END Events */
Antulius 0:f680c41c1640 114 /*
Antulius 0:f680c41c1640 115 ________________________________________________________________________________
Antulius 0:f680c41c1640 116 |
Antulius 0:f680c41c1640 117 | Funciones Prototipo
Antulius 0:f680c41c1640 118 |_______________________________________________________________________________
Antulius 0:f680c41c1640 119 */
Antulius 0:f680c41c1640 120 // Las Funciones Prototipo van aquí !
Antulius 0:f680c41c1640 121 void Setup()
Antulius 0:f680c41c1640 122 {
Antulius 0:f680c41c1640 123 // terminal.baud(Baud_Rate); // Se configura la velocidad de transmisión e inicia la comunicación serial.
JavierMarcelo98 4:e8498d695fc2 124 terminal.baud(115200); // Se configura la velocidad de transmisión e inicia la comunicación serial.
JavierMarcelo98 4:e8498d695fc2 125 }
JavierMarcelo98 4:e8498d695fc2 126 void Portada()//Funcion Portada
JavierMarcelo98 4:e8498d695fc2 127 {
JavierMarcelo98 4:e8498d695fc2 128 terminal.printf("ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA");
JavierMarcelo98 4:e8498d695fc2 129 terminal.printf("\n\rIngenieria en comunicaciones y electronica");
JavierMarcelo98 4:e8498d695fc2 130 terminal.printf("\n\rAnalisis Numerico");
JavierMarcelo98 4:e8498d695fc2 131 terminal.printf("\n\rPrograma N. 5 ");
JavierMarcelo98 4:e8498d695fc2 132 terminal.printf("\n\rMarcelo Padron Javier");
JavierMarcelo98 4:e8498d695fc2 133 terminal.printf("\n\rGRUPO:4CV2");
JavierMarcelo98 4:e8498d695fc2 134 wait(3.0);//Retardo de 3 segundos
JavierMarcelo98 4:e8498d695fc2 135
JavierMarcelo98 4:e8498d695fc2 136 }
JavierMarcelo98 4:e8498d695fc2 137 void Seleccion()//Funcion Seleccion
JavierMarcelo98 4:e8498d695fc2 138 {
JavierMarcelo98 4:e8498d695fc2 139 Primero:
JavierMarcelo98 4:e8498d695fc2 140 terminal.printf("\n\n\rEste programa despliega una secuencia de luces,\n\runa secuencia de sonido o ambas al mismo tiempo.");
JavierMarcelo98 4:e8498d695fc2 141 terminal.printf("\n\rOprima 1 si: Desea que se despliegue la secuencia de luces.");
JavierMarcelo98 4:e8498d695fc2 142 terminal.printf("\n\rOprima 2 si: Desea que se despliegue una secuencia de sonido.");
JavierMarcelo98 4:e8498d695fc2 143 terminal.printf("\n\rOprima 3 si: Desea que se desplieguen ambas secuencias.\n\r");
JavierMarcelo98 4:e8498d695fc2 144 char valor = terminal.getc(); //Seleccion de opcion(No funciona!!)
JavierMarcelo98 4:e8498d695fc2 145 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 146 valor = '3';//Valor predefinido que lanza la secuencia de Luces y del Buzzer
JavierMarcelo98 4:e8498d695fc2 147 switch(valor) { //Menu de opciones
JavierMarcelo98 4:e8498d695fc2 148 case '1': terminal.printf("\n\rUsted a seleccionado la opcion 1\n\r");
JavierMarcelo98 4:e8498d695fc2 149 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 150 terminal.printf("\n\rDesplegando secuencia en....");
JavierMarcelo98 4:e8498d695fc2 151 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 152 terminal.printf("\n\r3....");
JavierMarcelo98 4:e8498d695fc2 153 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 154 terminal.printf("\n\r2....");
JavierMarcelo98 4:e8498d695fc2 155 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 156 terminal.printf("\n\r1....");
JavierMarcelo98 4:e8498d695fc2 157 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 158 Barrido.attach_us(&Barrido_OnInterrupt, Ticker_Rate);
JavierMarcelo98 4:e8498d695fc2 159 break;
JavierMarcelo98 4:e8498d695fc2 160 case '2': terminal.printf("\n\rUsted a seleccionado la opcion 2\n\r");
JavierMarcelo98 4:e8498d695fc2 161 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 162 terminal.printf("\n\rDesplegando secuencia en....");
JavierMarcelo98 4:e8498d695fc2 163 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 164 terminal.printf("\n\r3....");
JavierMarcelo98 4:e8498d695fc2 165 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 166 terminal.printf("\n\r2....");
JavierMarcelo98 4:e8498d695fc2 167 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 168 terminal.printf("\n\r1....");
JavierMarcelo98 4:e8498d695fc2 169 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 170 for(int x=0; x<40; x++)//Este for solamente repite la secuencia, puedes modificar x.
JavierMarcelo98 4:e8498d695fc2 171 {
JavierMarcelo98 4:e8498d695fc2 172 int i;
JavierMarcelo98 4:e8498d695fc2 173 for (i=0; i<26; i=i+2) { //For que se encarga de aumentar y disminuir frecuencias del Buzzer.
JavierMarcelo98 4:e8498d695fc2 174 Buzzer.period(1.0/969.0);
JavierMarcelo98 4:e8498d695fc2 175 Buzzer = float(i)/50.0;
JavierMarcelo98 4:e8498d695fc2 176 wait(.5);
JavierMarcelo98 4:e8498d695fc2 177 Buzzer.period(1.0/800.0);
JavierMarcelo98 4:e8498d695fc2 178 wait(.5);
JavierMarcelo98 4:e8498d695fc2 179 }
JavierMarcelo98 4:e8498d695fc2 180 for (i=25; i>=0; i=i-2) {
JavierMarcelo98 4:e8498d695fc2 181 Buzzer.period(1.0/969.0);
JavierMarcelo98 4:e8498d695fc2 182 Buzzer = float(i)/50.0;
JavierMarcelo98 4:e8498d695fc2 183 wait(.5);
JavierMarcelo98 4:e8498d695fc2 184 Buzzer.period(1.0/800.0);
JavierMarcelo98 4:e8498d695fc2 185 wait(.5);
JavierMarcelo98 4:e8498d695fc2 186 }
JavierMarcelo98 4:e8498d695fc2 187 Buzzer = 0.0;
JavierMarcelo98 4:e8498d695fc2 188 }
JavierMarcelo98 4:e8498d695fc2 189 break;
JavierMarcelo98 4:e8498d695fc2 190 case '3': terminal.printf("\n\rUsted a seleccionado la opcion 3\n\r");
JavierMarcelo98 4:e8498d695fc2 191 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 192 terminal.printf("\n\rDesplegando secuencia en....");
JavierMarcelo98 4:e8498d695fc2 193 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 194 terminal.printf("\n\r3....");
JavierMarcelo98 4:e8498d695fc2 195 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 196 terminal.printf("\n\r2....");
JavierMarcelo98 4:e8498d695fc2 197 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 198 terminal.printf("\n\r1....");
JavierMarcelo98 4:e8498d695fc2 199 wait(1.0);
JavierMarcelo98 4:e8498d695fc2 200 {
JavierMarcelo98 4:e8498d695fc2 201 Barrido.attach_us(&Barrido_OnInterrupt, Ticker_Rate);
JavierMarcelo98 4:e8498d695fc2 202 for(int x=0; x<40; x++)
JavierMarcelo98 4:e8498d695fc2 203 {
JavierMarcelo98 4:e8498d695fc2 204 int i;
JavierMarcelo98 4:e8498d695fc2 205 for (i=0; i<26; i=i+2) {
JavierMarcelo98 4:e8498d695fc2 206 Buzzer.period(1.0/969.0);
JavierMarcelo98 4:e8498d695fc2 207 Buzzer = float(i)/50.0;
JavierMarcelo98 4:e8498d695fc2 208 wait(.5);
JavierMarcelo98 4:e8498d695fc2 209 Buzzer.period(1.0/800.0);
JavierMarcelo98 4:e8498d695fc2 210 wait(.5);
JavierMarcelo98 4:e8498d695fc2 211 }
JavierMarcelo98 4:e8498d695fc2 212 for (i=25; i>=0; i=i-2) {
JavierMarcelo98 4:e8498d695fc2 213 Buzzer.period(1.0/969.0);
JavierMarcelo98 4:e8498d695fc2 214 Buzzer = float(i)/50.0;
JavierMarcelo98 4:e8498d695fc2 215 wait(.5);
JavierMarcelo98 4:e8498d695fc2 216 Buzzer.period(1.0/800.0);
JavierMarcelo98 4:e8498d695fc2 217 wait(.5);
JavierMarcelo98 4:e8498d695fc2 218 }
JavierMarcelo98 4:e8498d695fc2 219 Buzzer = 0.0;
JavierMarcelo98 4:e8498d695fc2 220 }
JavierMarcelo98 4:e8498d695fc2 221 }
JavierMarcelo98 4:e8498d695fc2 222 break;
JavierMarcelo98 4:e8498d695fc2 223 default: terminal.printf("\n\r\n\rUsted ha ingresado una opcion que no es valida!!)");
JavierMarcelo98 4:e8498d695fc2 224 terminal.printf("\n\rEn unos instantes lo regresaremos al menu!!\n\r");
JavierMarcelo98 4:e8498d695fc2 225 wait(4.0);
JavierMarcelo98 4:e8498d695fc2 226 goto Primero; // Regresa al usuario a la seleccion de opcion n veces hasta que seleccione una opcion valida
JavierMarcelo98 4:e8498d695fc2 227 }
JavierMarcelo98 4:e8498d695fc2 228 }
JavierMarcelo98 4:e8498d695fc2 229 void Barrido_OnInterrupt()
JavierMarcelo98 4:e8498d695fc2 230 {
JavierMarcelo98 4:e8498d695fc2 231 /* Rutina de Atención a la Interrupción */
JavierMarcelo98 4:e8498d695fc2 232 contadorA++; // Incremeta el contador de mili segundos
JavierMarcelo98 4:e8498d695fc2 233 if (contadorA == delayA) // Contador es igual al retardo programado?
JavierMarcelo98 4:e8498d695fc2 234 {
JavierMarcelo98 4:e8498d695fc2 235 Torreta=SecuenciaA[A]; // Escribe la secuencia
JavierMarcelo98 4:e8498d695fc2 236 A++; // Incrementa el índice
JavierMarcelo98 4:e8498d695fc2 237 if (A >= No_SecuenciasA) A=0; // Es la última secuencia?
JavierMarcelo98 4:e8498d695fc2 238 contadorA =0; // Reinicia contador de retardo
JavierMarcelo98 4:e8498d695fc2 239 Led_Monitor = !Led_Monitor; // Parpadeo del Led Monitor
JavierMarcelo98 4:e8498d695fc2 240 }
JavierMarcelo98 4:e8498d695fc2 241 }
Antulius 0:f680c41c1640 242 /* END routines */
Antulius 0:f680c41c1640 243
Antulius 0:f680c41c1640 244 /* END program */
Antulius 0:f680c41c1640 245
Antulius 0:f680c41c1640 246 /* END documentation */
Antulius 0:f680c41c1640 247 /*
ArturoRiosRamos 3:7d496863c448 248
Antulius 0:f680c41c1640 249 +--------------------------------------------------------------------------------
Antulius 0:f680c41c1640 250 |
Antulius 0:f680c41c1640 251 | T H E A N T U L I U S T E A M
Antulius 0:f680c41c1640 252 | Research, Development, Systems Equipment, Support & Spare Parts I n c.
Antulius 0:f680c41c1640 253 | (C) Copyright 1989-2014, All rigths Reserved
Antulius 0:f680c41c1640 254 |
Antulius 0:f680c41c1640 255 | This program is licensed under rules of
Antulius 0:f680c41c1640 256 | THE BEANERS TECHNOLOGIES PROYECT
Antulius 0:f680c41c1640 257 +-------------------------------------------------------------------------------
Antulius 0:f680c41c1640 258 */
Antulius 0:f680c41c1640 259 /* END Mbed */