codigo sin probar

Dependencies:   mbed CMSIS_DSP_5 TextLCD

Revision:
3:bf56d25e3fda
Parent:
2:f53019a5bd33
Child:
4:bf6448061982
--- a/main.cpp	Tue Dec 04 09:36:17 2018 +0000
+++ b/main.cpp	Tue Dec 04 11:40:42 2018 +0000
@@ -1,52 +1,57 @@
 #include "mbed.h"
+#include "arm_math.h"
+
+Ticker timerCapturaMuestreo;
+Ticker timerMostrar;
+
+#define longitud 360
+
+
 
 //BUFFERS DE VOLTAJE
-int16_t bufferA [360];
-int16_t bufferB [360];
+int16_t bufferA[longitud];
+int16_t bufferB[longitud];
 
 //BUFFERS DE INTENSIDAD
-int16_t bufferC [360];
-int16_t bufferD [360];
+int16_t bufferC [longitud];
+int16_t bufferD [longitud];
 
 //
 int contador=0 ;
-int nbuffer=0 ;
+int nbuffer=1 ;
 int bufferlleno ;
 int mostrarDato=1 ;
 float rms ;
 float Vpp ;
 
-//punteros 
+//punteros
 int32_t *pA ;
 int32_t *pB ;
 
-AnalogIn (A0); //ENTRADA DE VOLTAJE
-AnalogIn (A5); //ENTRADA DE INTENSIDAD
+AnalogIn voltaje (A0); //ENTRADA DE VOLTAJE
+AnalogIn intensidad (A5); //ENTRADA DE INTENSIDAD
 
 void muestreo () //hay que programar que se ejecute la funcion cada X tiempo (siendo X el tiempo de muestreo)
-{ 
-if (nbuffer==1) //si nbuffer=1 entonces se guardan los datos en el buffer A, else buffer B
 {
-    bufferA[contador]=AnalogRead (A0) ;
-    bufferC[contador]=AnalogRead (A5) ;
-    contador=contador+1 ;
-    if (contador==len(bufferA)) 
-    {
-        nbuffer=0 ; 
-        contador=0 ;
-    }
+    if (nbuffer==1) { //si nbuffer=1 entonces se guardan los datos en el buffer A, else buffer B
+        bufferA[contador]=voltaje.read () ;
+        bufferC[contador]=intensidad.read () ;
+        contador=contador+1 ;
+        if (contador==longitud) {
+            nbuffer=0 ;
+            contador=0 ;
+            bufferlleno=1;
+        }
+    } else {
+        bufferB[contador]=voltaje.read () ;
+        bufferD[contador]=intensidad.read () ;
+        contador=contador+1 ;
+        if (contador==longitud) {
+            nbuffer=1 ;
+            contador=0 ;
+            bufferlleno=1;
+        }
     }
-else
-{
-    bufferB(contador)=AnalogRead (A0) ;
-    bufferD(contador)=AnalogRead (A5) ;
-    contador=contador+1 ;
-    if (contador==len(bufferB)) 
-    {
-    nbuffer=1 ;
-    contador=0 ;
-    }
-}
 }
 
 
@@ -55,65 +60,94 @@
 
 //primero definimos como digitales las entradas en las que estarán los pulsadores
 
-digitalIn (D1);
-digitalIn (D2);
+InterruptIn pulsador1(PC_13);
+InterruptIn pulsador2 (D2);
 
-void boton ()
+void botonUP ()
 {
- if  (digitalRead(D1)==1)
- mostrarDato=+1;
-    {
-    if (mostrarDato==9)
-    mostrarDato=1;
-    }
- else
-    {
-     if   (digitalRead(D2)==1)
-       mostrarDato=-1;
-        {
-        if (mostrarDato==0)
-        mostrarDato=8;
-        }
-    }
+        mostrarDato+=1;
+        if (mostrarDato==9) {
+            mostrarDato=1;
+        } 
 }
 
+void botonDOWN ()
+{
+            mostrarDato-=1;
+            if (mostrarDato==0) {
+                mostrarDato=8;
+            }
+}
 
 void mostrar ()
 {
-    if (mostrarDato==1)
-    lcd.printf("voltaje:\n")  
-    else
+    if (mostrarDato==1) {
+        printf("voltaje:\n");
+    } else if (mostrarDato==2) {
+        printf("intensidad:\n");
+    } else if  (mostrarDato==3) {
+        printf("potencia activa:\n");
+    } else if (mostrarDato==4) {
+        printf("potencia reactiva:\n");
+    } else if (mostrarDato==5) {
+        printf("potencia aparente:\n");
+    } else if (mostrarDato==6) {
+        printf("energia activa:\n");
+    } else if (mostrarDato==7) {
+        printf("energia reactiva:\n");
+    } else if (mostrarDato==8) {
+        printf("factor de potencia:\n");
+    }
+
+
+}
+
+
+float calcularRMS(int16_t *datos, int N); //definicion del tipo de variable que devuelve la funcion
+float calcularRMS(int16_t *datos, int N)   // definicion de los estamentos de la funcion
+{
+    float32_t k=7.629394531250000e-05;
+    int64_t producto=0;
+
+    for (int n=0; n<N; n++) {
+        producto+=datos[n]*datos[n];
+    }
+    return sqrt((float(producto)/N))*k;
+
+}
+
+float calcular_potencia_activa(int16_t *datos1,int16_t *datos2, int N);
+float calcular_potencia_activa(int16_t *datos1,int16_t *datos2, int N)
+{
+    int32_t sumatorio=0;
+    for (int16_t n=0; n<N; n++)
     {
-        if (mostrarDato==2)
-        lcd.printf("intensidad:\n")
-        else 
-        {
-            if  (mostrarDato==3)
-            lcd.printf("potencia activa:\n")
-            else
-            {
-                if (mostrarDato==4)
-                lcd.printf("potencia reactiva:\n")
-                else
-                {
-                    if (mostrarDato==5)
-                    lcd.printf("potencia aparente:\n")
-                    else
-                    {
-                        if (mostrarDato==6)
-                        lcd.printf("energía activa:\n")
-                        else
-                        {
-                            if (mostrarDato==7)
-                            lcd.printf("energía reactiva:\n")
-                            else
-                            {
-                            if (mostrarDato==8)
-                            lcd.printf("factor de potencia:\n")
-                            }
-                        }
-                    }
-                }
+        sumatorio+=sumatorio+datos1[N]*datos2[N];
+    }
+    return datos1[N]*datos2[N]/N;
+}
+    
+float calcular_potencia_reactiva(int16_t *datos1,int16_t *datos2, int N);
+float calcular_potencia_reactiva(int16_t *datos1,int16_t *datos2, int N)
+{
+    return;
+}
+
+
+
+int main()
+{
+    pulsador1.rise(&botonUP);
+    pulsador2.rise(&botonDOWN);
+    timerCapturaMuestreo.attach_us(&muestreo,20);
+    timerMostrar.attach(&mostrar,1.0);
+    while(1) {
+        if (bufferlleno==1) {
+            bufferlleno=0;
+            if (nbuffer==0) {
+                float Vrms=calcularRMS(bufferA,longitud);
+            } else {
+                float Vrms=calcularRMS(bufferB,longitud);
             }
         }
     }