Rodrigo Miguez / Mbed 2 deprecated i2c_acelerometro

Dependencies:   BLE_API mbed nRF51822 circular_buffer

Revision:
11:27f2850b9388
Parent:
9:3708b94b2312
Child:
12:172acb80fcab
--- a/main.cpp	Tue Mar 08 16:38:49 2016 +0000
+++ b/main.cpp	Thu Mar 10 09:56:59 2016 +0000
@@ -5,6 +5,7 @@
 #include "mbed.h"
 #include "Acelerometro.h"
 #include "AccelService.h"
+#include "circular_buffer.h"
 
 Serial pc(p9, p11);
 
@@ -12,13 +13,42 @@
    
     Acelerometro acc;
     AccelService acc_service;
+    circular_buffer<Vector> buffer(10);
    
     while(1) {
         
         pc.printf("-----------------------------------------\n");
-        Vector v = acc.leer();
-        acc_service.updateAccelState(v);
-        pc.printf(" X: %i\n Y: %i\n Z: %i\n", v.x, v.y, v.z);      
+        
+        // Hacer un buffer circular para ir leyendo lo que tienes
+        // Problema?: ahora los datos cambian un poco lento, por ejemplo para 
+        // pasar de -1g a 1g tarda un par de segundos aunque el cambio haya sido rapido 
+        buffer.push_back(acc.leer());
+        
+        // TODO Hacer esto en un hilo
+        int x = 0, y = 0, z = 0;
+        for (int i = 0; i < buffer.get_size(); i++){
+            
+            Vector v = buffer[i];
+            
+            x += v.x;
+            y += v.y;
+            z += v.z;
+            
+        }
+        
+        Vector media;
+        
+        media.x = x / buffer.get_size();
+        media.y = y / buffer.get_size();
+        media.z = z / buffer.get_size();
+        
+       /* if (media.x <= 1000 && media.x >= -1000) media.x = 0;
+        if (media.y <= 1000 && media.y >= -1000) media.y = 0;
+        if (media.z <= 1000 && media.z >= -1000) media.z = 0;*/
+        
+        acc_service.updateAccelState(media);
+        
+        pc.printf(" X: %i\n Y: %i\n Z: %i\n", media.x, media.y, media.z);      
         
     }
 }
\ No newline at end of file