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.
Diff: main.cpp
- Revision:
- 0:0b7bc4adc2a7
diff -r 000000000000 -r 0b7bc4adc2a7 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Mar 04 00:51:52 2020 +0000
@@ -0,0 +1,322 @@
+/* #############################################################################
+** Archivo : main.c
+** Proyecto : STM32F103C8_Caratula
+** Procesador : STM32F103C8T6
+** Plataforma : Blue Pill
+** Herramienta : Mbed Compiler
+** Version : Driver 01.01
+** Compilador : GNU C Compiler
+** Fecha/Hora : 17-02-2020, 22:53, # CodeGen: 0
+** Descripción :
+** Este proyecto hace una carátula para mostrar la presentación
+** This module contains user's application code.
+** Componentes : GPIO, Timer, etc .
+** Configuraciones : Includes, Stacks y Drivers externos
+** Autores :
+** ATEAM Development Group:
+** - Francisco Sarabia López, Antulio Morgado Valle(plantilla)
+**
+** Versión : Alpha
+** Revisión : A
+** Release : 0
+** Bugs & Fixes :
+** Date :
+**
+** ###########################################################################*/
+/*
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+: Includes
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+*/
+#include "stm32f103c8t6.h"
+#include "mbed.h"
+#include "Serial.h"
+//#include "LedRGB.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
+#define Ticker_Rate 1000 // Periodo de interrupción Ticker (us)
+#define Baud_Rate 115200 // Velocidad de Transmisión de la Terminal
+/*
++-------------------------------------------------------------------------------
+| Configuración de Puertos
++-------------------------------------------------------------------------------
+*/
+Ticker TimerInt; // Inicializa la Interrupción por Timer
+DigitalOut led_monitor(LED1); // Inicializa el LED Monitor
+DigitalOut led_testigo(PB_1); // Inicializa el LED Testigo
+PwmOut led_pwm(PA_7); // Inicializa el LED PWM
+AnalogIn sensor1(PB_0); // Inicializa Canal Analógico para sensor 1
+Serial terminal(PA_2, PA_3); // Inicializa la Comunicación Serial a la PC
+/*
++-------------------------------------------------------------------------------
+| 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 TimerInt_OnInterrupt(void);
+void Blinking_Led(void);
+void PideDatos(int *Dat, int *Ord,float Val[][10]);
+float Potencia(int n, float Num);
+void PreparaSistema(int Ord, int Dat, float Sist[][10], float Val[][10]);
+void ResuelveGauss(int Dim, float Sist[][10]);
+void ImprimeDatos(int Dim, float Sist[][10]);
+
+/* 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
+confSysClock(); // Inicialización del Sistema, Configure system clock (72MHz HSE clock, 48MHz USB clock)
+TimerInt.attach_us(&TimerInt_OnInterrupt, Ticker_Rate); // Le asigna el periodo de interrupción de 1ms (Ticker_Rate=1000)
+
+terminal.baud(Baud_Rate); // Se configura la velocidad de transmisión e inicia la comunicación serial.
+terminal.printf(" System is Wake Up!.\n\r");
+
+ while (true) // El Lazo del Programa principal está aquí !!!
+ {
+ Blinking_Led(); // Parapadeo del LED por Software
+ led_pwm = sensor1.read(); // El Led se encenderá de acuerdo al valor del sensor
+ terminal.printf("INSTITUTO POLITECNICO NACIONAL \r\n");
+ terminal.printf("\n EEEEEEE SSSS IIIIIII M M EEEEEEE \r\n");
+ terminal.printf( " E S I M M M M E \r\n");
+ terminal.printf( " EEEEEEE SSSS I M MM M EEEEEEE \r\n");
+ terminal.printf( " E S I M M E \r\n");
+ terminal.printf( " EEEEEEE SSSS IIIIIII M M EEEEEEE \r\n");
+ terminal.printf( "\n Francisco Sarabia Lopez\r\n");
+ terminal.printf( "\n Ingenieria en Comunicaciones y Electronica\r\n");
+
+ int Datos,Orden,i;
+ float Valores[2][10];
+ float Sistema[10][10];
+
+ PideDatos(&Datos,&Orden,Valores);
+
+ PreparaSistema(Orden,Datos,Sistema,Valores);
+ printf("\n\n El sistema a resolver es el siguiente:");
+ ImprimeDatos(Orden,Sistema);
+ ResuelveGauss(Orden,Sistema);
+ printf("\n\n El sistema resuelto:");
+ ImprimeDatos(Orden,Sistema);
+ printf("\n\n La Ecuacion del Polinomio ajustado por minimos Cuadrados\n\n:");
+ for(i=1;i<=Orden;i++)
+ {
+ printf(" + \t(%.2f)X^%d",Sistema[i][Orden+1],i-1);
+ }
+ return 0;
+ }
+}
+/* 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
+{
+
+}
+/* END Events */
+/*
+________________________________________________________________________________
+|
+| Funciones Prototipo
+|_______________________________________________________________________________
+*/
+ // Las Funciones Prototipo van aquí !
+void Blinking_Led() // 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
+ 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
+}
+
+void PideDatos(int *Dat, int *Ord,float Val[][10])
+{
+ int i,o;
+ printf("\n Introduce el numero de datos o puntos: ");
+ scanf("%d",&*Dat);
+ printf("\n\n Introce los valores de cada punto\n");
+ for(i=0;i<*Dat;i++)
+ {
+ printf(" -Valores del Punto %d:\n",i+1);
+ printf(" X%d: ",i+1);
+ scanf("%f",&Val[0][i+1]);
+ printf(" Y%d: ",i+1);
+ scanf("%f",&Val[1][i+1]);
+ }
+ printf("\n\n Introduce el orden del polinomio: ");
+ scanf("%d",&o);
+ *Ord=o+1;
+}
+
+float Potencia(int n, float Num)
+{
+ int i;
+ float res;
+
+ res=1;
+ for(i=1;i<=n;i++)
+ {
+ res=res*Num;
+ }
+ return res;
+}
+
+void PreparaSistema(int Ord, int Dat, float Sist[][10], float Val[][10])
+{
+ int i,j,k,Exp;
+ float suma,termino;
+
+ for(i=1;i<=Ord;i++)
+ {
+ for(j=1;j<=Ord;j++)
+ {
+ suma=0;
+ Exp=i+j-2;
+
+ for(k=1;k<=Dat;k++)
+ {
+ termino=Val[0][k];
+ suma=suma+Potencia(Exp,termino);
+ }
+ Sist[i][j]=suma;
+ }
+
+ }
+ for(i=1;i<=Ord;i++)
+ {
+ suma=0;
+ Exp=i-1;
+
+ for(k=1;k<=Dat;k++)
+ {
+ termino=Val[0][k];
+ suma=suma+Val[1][k]*Potencia(Exp,termino);
+ }
+ Sist[i][Ord+1]=suma;
+ }
+}
+
+void ResuelveGauss(int Dim, float Sist[][10])
+{
+ int NoCero,Col,C1,C2,A;
+ float Pivote,V1;
+
+ for(Col=1;Col<=Dim;Col++)
+ {
+ NoCero=0;A=Col;
+ while(NoCero==0)
+ {
+ if(Sist[A][Col]!=0)
+ {
+ NoCero=1;
+ }
+ else
+ {
+ A++;
+ }
+ Pivote=Sist[A][Col];
+ for(C1=1;C1<=(Dim+1);C1++)
+ {
+ V1=Sist[A][C1];
+ Sist[A][C1]=Sist[Col][C1];
+ Sist[Col][C1]=V1/Pivote;
+ }
+ for(C2=Col+1;C2<=Dim;C2++)
+ {
+ V1=Sist[C2][Col];
+ for(C1=Col;C1<=(Dim+1);C1++)
+ {
+ Sist[C2][C1]=Sist[C2][C1]-V1*Sist[Col][C1];
+ }
+ }
+ }
+ }
+ for(Col=Dim;Col>=1;Col--)
+ {
+ for(C1=(Col-1);C1>=1;C1--)
+ {
+ Sist[C1][Dim+1]=Sist[C1][Dim+1]-Sist[C1][Col]*Sist[Col][Dim+1];
+ Sist[C1][Col]=0;
+ }
+
+ }
+}
+
+void ImprimeDatos(int Dim, float Sist[][10])
+{
+ int i,j;
+
+ printf("\n\n");
+ for(i=1;i<=Dim;i++)
+ {
+ for(j=1;j<=(Dim+1);j++)
+ {
+ printf("\t%.2f",Sist[i][j]);
+ if(j==Dim)
+ {
+ printf(" |");
+ }
+ }
+ printf("\n");
+ }
+ printf("\n\n");
+}
+
+/* END functions */
+
+/* END program */
+
+/*+-----------------------------------------------------------------------------
+*+ La documentación va aquí!:
+*+-----------------------------------------------------------------------------
+*+
+*+
+*+----------------------------------------------------------------------------*
+*+
+*+ Powered by
+*+
+*+ T H E A N T U L I U ' S T E A M R&D Unltd
+*+
+*+ Research, Development, Systems, Equipment, Support & Spare Parts.
+*+ (C) Copyright 1989-2019, All Rights Reserved
+*+
+*+ Welcome to The Beaners Proyect Community!
+*+----------------------------------------------------------------------------*/
+
+/* END documentation */
+
+/* END Mbed */
\ No newline at end of file