Francisco Sarabia / Mbed 2 deprecated STM32F103C8T6_MinimosCuadrados

Dependencies:   mbed

Revision:
0:0b7bc4adc2a7
--- /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