Dependencies:   mbed

Revision:
0:a08977d798ae
Child:
1:649db63e7a69
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Nov 08 11:41:41 2019 +0000
@@ -0,0 +1,102 @@
+#include "mbed.h"
+#define bufferLength 500
+#define constante 5.035400390625e-5
+//struct eResultados {
+//    float Vrms;
+//    float Vmax;
+//    float Vmin;
+//};
+
+AnalogIn    adc_in(A0);
+AnalogOut   dac_out(A2);
+Ticker tMuestrea;
+//Ticker tVisualiza;
+
+void visualiza();
+void procesarDatos(uint16_t *entrada, uint16_t *salida, int longitud);
+
+int flag=0;
+int contador=0;
+
+struct buffers {
+    uint16_t A[bufferLength];
+    uint16_t B[bufferLength];
+};
+
+bool bufferActivo=0;
+void muestrea();
+
+buffers bufferEntrada;
+buffers bufferSalida;
+
+//eResultados resultados;
+
+int main()
+{
+
+    tMuestrea.attach_us(&muestrea, 100);
+//    tVisualiza.attach(&visualiza, 5);
+
+    while(1) {
+        if (flag) {
+            flag=0;
+            if(bufferActivo) {
+                procesarDatos(bufferSalida.B, bufferEntrada.A,bufferLength);
+            } else {
+                procesarDatos(bufferSalida.A,bufferEntrada.B,bufferLength);
+            }
+
+            wait_us(1);
+
+        }
+    }
+}
+void muestrea()
+{
+    uint16_t dato=adc_in.read_u16();
+    if (bufferActivo) {
+        bufferEntrada.A[contador]=dato;
+        dato=bufferSalida.B[contador];
+    } else {
+        bufferEntrada.B[contador]=dato;
+        dato=bufferSalida.A[contador];
+    }
+    dac_out.write_u16(dato);
+    contador++;
+    if (contador==bufferLength) {
+        bufferActivo=!bufferActivo;
+        contador=0;
+        flag=1;
+    }
+}
+
+
+void procesarDatos(uint16_t *salida, uint16_t *entrada, int longitud)
+{
+//    uint16_t max=0;
+//    uint16_t min=65535;
+    uint16_t dato;
+//    uint64_t sumatorio=0;
+    for(int i=0; i<longitud; i++) {
+        dato=entrada[i];
+//        sumatorio+= dato*dato;
+        salida[i]=dato;
+//        if(dato>max) {
+//            max=dato;
+//        }
+//        if(dato<min) {
+//            min=dato;
+//        }
+
+    }
+//    resultados.Vrms= constante*sqrt(((float)sumatorio)/longitud);
+//    resultados.Vmax=max*constante;
+//    resultados.Vmin=min*constante;
+}
+//void visualiza()
+//{
+//    printf ("El valor maxima es %f\n",resultados.Vmax);
+//    printf ("El valor minimo es %f\n",resultados.Vmin);
+//    printf ("El valor RMS es %f\n\n",resultados.Vrms);
+
+//}