El_clan_zoncillo / Mbed 2 deprecated Proyecto_final

Dependencies:   mbed TextLCD

Revision:
5:c638ff4bd841
Parent:
4:c9f7e9a96324
diff -r c9f7e9a96324 -r c638ff4bd841 plantilla_copy.cpp
--- a/plantilla_copy.cpp	Tue Dec 18 08:18:40 2018 +0000
+++ b/plantilla_copy.cpp	Thu Dec 20 11:44:36 2018 +0000
@@ -1,38 +1,39 @@
 #include "mbed.h"
 #include "math.h"
+#include "TextLCD.h"
+
+#define datoTension 725.331071
+#define datoIntensidad 29.4943123
 #define constanteTension 1.4709e-06
 #define constanteIntensidad 1.423595702690060e-09
 #define vectormuestras 100
+#define offsetTension 0.50369472
+#define offsetIntensidad 0.5040785
+#define eps 2.220446049250313e-016
 
+TextLCD lcd(D8, D9, D2, D3, D4, D5, TextLCD::LCD16x2); // rs, e, d4-d7
 Serial pc(USBTX, USBRX); // tx, rx
 
 InterruptIn button(PC_13); 
-AnalogIn (A0); 
-AnalogIn (A1); 
-AnalogIn (A5);
+AnalogIn tension(A0);
+AnalogIn intensidad(A1);
 
-//datos para la simulación
-uint16_t SimulaADCTension[vectormuestras]={60202,60330,58625,59923,58998,57466,57255,57119,57170,56327,53777,54359,53219,51091,50453,47815,46978,46509,44763,43549,41361,38513,38484,36990,34806,33279,31567,29193,28053,25447,24892,21968,20909,18951,17602,17651,16065,14052,14118,11186,10956, 9896, 9801, 9096, 7219, 7250, 6692, 6723, 6585, 6516, 5513, 6368, 6477, 5763, 6043, 7267, 8753, 8192, 9443, 9583,11577,11624,13236,14810,16455,17921,18496,19134,20656,22417,25159,25612,28368,28898,31937,32470,33848,35633,38022,39382,40758,43294,44352,45782,47961,48101,50367,51624,52074,53559,53615,54518,56322,57580,58557,57530,58872,59042,58397,59201};
-uint16_t SimulaADCIntensidad[vectormuestras]={50233,51231,50075,49752,48077,47954,47431,47039,45074,43363,42265,42317,41528,40167,38300,38291,36222,35848,32856,31874,31756,30792,29301,27121,25643,25859,24596,22473,21324,20488,20525,19587,18219,17412,16095,16230,15805,14552,14084,13718,13018,13552,13830,13742,13402,12494,13483,12590,12865,13365,13717,15102,14670,16809,17329,18512,18492,19710,21125,21425,21959,24420,23675,25403,27867,27863,28974,29835,32658,32356,33992,36355,36794,38237,39365,40761,40570,42662,42741,45341,45347,47276,46952,48428,49884,48802,49433,49915,51705,51945,51311,52919,52741,51751,51769,51843,53002,51405,51402,51047};
 
-//datos para la simulación
-uint16_t SimulaADCMedio[muestras]={33393,33574,32027,33589,33031,31969,32328,32861,33677,33691,32088,33703,33676,32739,33364,32057,32613,33594,33348,33681,33077,31846,33461,33630,33123,33280,33251,32554,33077,32115,33177,31838,32325,31867,31968,33410,33155,32405,33662,31843,32646,32533,33295,33354,32146,32748,32660,33059,33184,33274,32323,33125,33076,32098,32011,32765,33681,32451,32937,32220,33267,32282,32780,33163,33544,33680,32862,32050,32072,32286,33445,32280,33392,32259,33620,32470,32165,32274,32998,32715,32473,33425,32937,32867,33597,32343,33279,33272,32531,32903,31926,31882,32829,33322,33630,32033,32905,32707,31799,32445};
+struct Vectores{
+    float  vTensionA[vectormuestras];
+    float  vTensionB[vectormuestras];
+    
+    float  iIntensidadA[vectormuestras];
+    float  iIntensidadB[vectormuestras];
+}
 
-int16_t  vTensionA[vectormuestras];
-int16_t  vTensionB[vectormuestras];
-
-int16_t  iIntensidadA[vectormuestras];
-int16_t  iIntensidadB[vectormuestras];
+struct Medidas{
+    float medidaTension;
+    float medidaIntensidad;
+}
 
 int contador=0;
-
 int pulsador=0;
-
-int16_t medidaTension;
-int16_t medidaIntensidad;
-int16_t medidaOffset;
-int16_t medidaTensionSinOffset;
-int16_t medidaIntensidadSinOffset;
 int bufferActivo=0;
 int flag=0;
 int16_t measV=0;
@@ -51,39 +52,22 @@
 float Consumo_Preact=0;
 float FP=0;
 
-
-//Para la simulacion
-uint16_t adcTension()
-{
-    return SimulaADCTension[contador];
-}
-
-uint16_t adcIntensidad()
-{
-    return SimulaADCIntensidad[contador];
-}
-
-//Para la simulacion
-uint16_t adcMedio()
-{
-    return SimulaADCMedio[contador];
-}
-
 //Captura de valores mediante muestreo
 void captura() //función muestreo
 {
-    medidaTension=(int16_t)(adcTension()^0x8000);
-    medidaIntensidad=(int16_t)(adcIntensidad()^0x8000);
-    medidaOffset=(int16_t)(adcMedio()^0x8000);
-    medidaTensionSinOffset=medidaTension-medidaOffset;
-    medidaIntensidadSinOffset=medidaIntensidad-medidaOffset;
-
-    if(bufferActivo) {
-        vTensionA[contador] = medidaTensionSinOffset;
-        vIntensidadA[contador] = medidaIntensidadSinOffset;
+    float medidaTension=tension.read();
+    medidaTension=medidaTension-offsetTension*datoTension;
+    
+    float medidaIntensidad=intensidad.read();
+    medidaIntensidad=medidaIntensidad-offsetIntensidad*datoIntensidad;
+    
+    if(bufferActivo==1) {
+        vTensionA[contador] = medidaTension;
+        vIntensidadA[contador] = medidaIntensidad;
+        
     } else {
-        vTensionB[contador] = medidaTensionSinOffset;
-        vIntensidadB[contador] = medidaIntensidadSinOffset;
+        vTensionB[contador] = medidaTension;
+        vIntensidadB[contador] = medidaIntensidad;
     }
     
     contador++;
@@ -109,10 +93,10 @@
             for (int b=0; b<muestras; b++) {//VRMS
                 if (!bufferActivo) {
                     measV=vTensionA[b];
-                    measI=iIntensidadA[b];
+                    measI=vIntensidadA[b];
                 } else {
                     measV=vTensionB[b];
-                    measI=iIntensidadB[b];
+                    measI=vIntensidadB[b];
                 }
                 producto=measV*measV;
                 sumatorioV+=producto;//calcula el valor VPP
@@ -121,74 +105,53 @@
                 producto=measV*measI;
                 sumatorioPA+=producto;
             }
-            
-            if(pulsador==0){
-                VRMS=sqrt(constanteTension*sumatorioV);        
-            }
-                    
-            else if (pulsador ==1) {
-                IRMS=sqrt(constanteIntensidad*sumatorioI);
-            }
-                
-            else if (pulsador ==2) {
-                P_activa=sqrt(constanteTension*constanteIntensidad)*sumatorioPA;
-            }
-            
-            else if (pulsador ==3) {
-                P_aparente=VRMS*IRMS;
-            }
-            
-            else if (pulsador ==4) {
-                P_reactiva=sqrt(P_aparente*P_aparente)-(P_aparente*P_aparente);
-            }
-            
-            else if (pulsador ==5) {
-                Consumo_Pact=Consumo_Pact+P_activa*20e-3/(3600*1000);
-            }
-            
-            else if (pulsador ==6) {
-                Consumo_Preact=Consumo_Preact+P_reactiva*20e-3/(3600*1000);
-            }
-            
-            else if (pulsador ==7) {
-                FP=P_activa/P_aparente;
-            }
+
+            VRMS=sqrt(constanteTension*sumatorioV);        
+            IRMS=sqrt(constanteIntensidad*sumatorioI);
+            P_activa=sqrt(constanteTension*constanteIntensidad)*sumatorioPA;
+            P_aparente=VRMS*IRMS;
+            P_reactiva=sqrt(P_aparente*P_aparente)-(P_aparente*P_aparente);
+            Consumo_Pact=Consumo_Pact+P_activa*20e-3/(3600*1000);
+            Consumo_Preact=Consumo_Preact+P_reactiva*20e-3/(3600*1000);
+            FP=P_activa/(P_aparente+eps);
+        }
     }          
 }
 
 //Visualización por pantalla
 void visualizacion()//función mostrar
 {
+    lcd.cls();
     if(pulsador==0){
-        printf("VRMS: %3.4f\n\r", VRMS);
+        lcd.printf("VRMS:\n %3.4f", VRMS);
     }
     
     else if pulsador ==1 {
-        printf("IRMS: %3.4f\n\r", IRMS);
+        lcd.printf("IRMS:\n %3.4f", IRMS);
     }
         
     else if pulsador ==2 {
-        printf("Pot. activa: %3.4f\n\r", P_activa);
+        lcd.printf("Pot. activa:\n %3.4f", P_activa);
     }
     
     else if pulsador ==3 {
-        printf("Pot. reactiva: %3.4f\n\r", P_reactiva);
+        lcd.printf("Pot. reactiva:\n %3.4f", P_reactiva);
     }
     
     else if pulsador ==4 {
-        printf("Pot. aparente: %3.4f\n\r", P_aparente);
+        lcd.printf("Pot. aparente:\n %3.4f", P_aparente);
     }
     
     else if pulsador ==5 {
-        printf("Consumo Pot. A: %3.4f\n\r", Consumo_Pact);
+        lcd.printf("Consumo Pot. A:\n %3.4f", Consumo_Pact);
     }
     
     else if pulsador ==6 {
-        printf("Consumo Pot. R: %3.4f\n\r", Consumo_Preact);
+        lcd.printf("Consumo Pot. R:\n %3.4f", Consumo_Preact);
     }
     
     else if pulsador ==7 {
-        printf("Factor de potencia: %3.4f\n\r", FP);
+        lcd.printf("Factor de potencia:\n\r %3.4f", FP);
     }
     
 }
@@ -205,12 +168,11 @@
 int main()
 {
     Ticker timerCaptura;
+    pc.printf("comienzo\n\r");
+    calculos();//Llamar a la función de cálculos ¿Llamar antes de visualizar?
     Ticker timerVisualizacion;
     timerCaptura.attach_us(&captura,200);//Hace que la función muestreo se ejecute cada 200us
-    //Hace que la función boton se ejecute cada vez que se pulse el botón
     timerVisualizacion.attach(&visualizacion,1.0);//Hace que la función mostrar se ejecute cada segundo
-    //Llamar a la función de cálculos
-    //Llama la función mostrar por pantalla medida (visualiza)
-    button.rise(&cambio_boton); //Llama al funcion cambio de menú (cambio botón)
-    
+    button.rise(&cambio_boton);//Hace que la función boton se ejecute cada vez que se pulse el botón
+       
 }
\ No newline at end of file