Rodrigo Miguez / Mbed 2 deprecated i2c_acelerometro

Dependencies:   BLE_API mbed nRF51822 circular_buffer

Committer:
agufal
Date:
Wed May 25 13:35:41 2016 +0000
Revision:
13:e4c3b3e00e3d
Parent:
12:172acb80fcab
implementado bucle principal con un sleep

Who changed what in which revision?

UserRevisionLine numberNew contents of line
agufal 6:fa74a43cae81 1 /*
agufal 6:fa74a43cae81 2 * Esto es para la placa Xtrinsic-Sense Board de element14, mas
agufal 6:fa74a43cae81 3 * concretamente para el acelerometro MMA8491Q
agufal 6:fa74a43cae81 4 */
agufal 0:c123bc196680 5 #include "mbed.h"
agufal 8:e7cafda76315 6 #include "Acelerometro.h"
agufal 9:3708b94b2312 7 #include "AccelService.h"
agufal 11:27f2850b9388 8 #include "circular_buffer.h"
agufal 0:c123bc196680 9
agufal 12:172acb80fcab 10 #define MUESTRAS 10
agufal 12:172acb80fcab 11
agufal 12:172acb80fcab 12 //Serial pc(p9, p11);
agufal 12:172acb80fcab 13
agufal 12:172acb80fcab 14 bool expired = false;
agufal 12:172acb80fcab 15 Timeout timeout; // Hay un LowPowerTimeout, pero no me deja usarlo por algun motivo
agufal 12:172acb80fcab 16
agufal 12:172acb80fcab 17 /*****************************************************************************
agufal 12:172acb80fcab 18 Por lo visto hay que tener cuidado con las funciones de i2c.read y i2c.write,
agufal 12:172acb80fcab 19 porque la funcion sleep desactiva el reloj cuando empieza, y lo reactiva al
agufal 12:172acb80fcab 20 final del todo cuando hay una interrupcion. Dice que se podria reactivar
agufal 12:172acb80fcab 21 manualmente el reloj...
agufal 12:172acb80fcab 22
agufal 12:172acb80fcab 23 En teoria el solito determina que tipo de sleep utilizar "dinamicamente"
agufal 12:172acb80fcab 24
agufal 12:172acb80fcab 25 Fuente:
agufal 12:172acb80fcab 26 https://developer.mbed.org/teams/SiliconLabs/wiki/Using-the-improved-mbed-sleep-API
agufal 12:172acb80fcab 27 ******************************************************************************/
agufal 12:172acb80fcab 28
agufal 12:172acb80fcab 29 void activar(void){
agufal 12:172acb80fcab 30
agufal 12:172acb80fcab 31 expired = true;
agufal 12:172acb80fcab 32
agufal 12:172acb80fcab 33 }
agufal 4:a743917cd04c 34
agufal 9:3708b94b2312 35 int main() {
agufal 8:e7cafda76315 36
agufal 9:3708b94b2312 37 Acelerometro acc;
agufal 9:3708b94b2312 38 AccelService acc_service;
agufal 12:172acb80fcab 39 circular_buffer<Vector> buffer(MUESTRAS);
agufal 12:172acb80fcab 40
agufal 12:172acb80fcab 41 wait(0.01);
agufal 12:172acb80fcab 42
agufal 12:172acb80fcab 43 // Pesos para la media ponderada, para darle mas valor a los ultimos datos
agufal 12:172acb80fcab 44 int pesos[] = { 10, 10, 10, 10, 20, 30, 40, 50, 80, 90 };
Alexisfdi 3:80ceedd5ffac 45
agufal 9:3708b94b2312 46 while(1) {
Alexisfdi 3:80ceedd5ffac 47
agufal 13:e4c3b3e00e3d 48 Vector ultimo = acc.leer();
agufal 12:172acb80fcab 49 buffer.push_back(ultimo);
agufal 11:27f2850b9388 50
agufal 11:27f2850b9388 51 // TODO Hacer esto en un hilo
agufal 12:172acb80fcab 52 // TODO Hacer otro buffer mas chiquitito para la luz de freno
agufal 11:27f2850b9388 53 int x = 0, y = 0, z = 0;
agufal 12:172acb80fcab 54 int sumaPesos = 0;
agufal 12:172acb80fcab 55
agufal 11:27f2850b9388 56 for (int i = 0; i < buffer.get_size(); i++){
agufal 11:27f2850b9388 57
agufal 11:27f2850b9388 58 Vector v = buffer[i];
agufal 11:27f2850b9388 59
agufal 12:172acb80fcab 60 x += v.x * pesos[i];
agufal 12:172acb80fcab 61 y += v.y * pesos[i];
agufal 12:172acb80fcab 62 z += v.z * pesos[i];
agufal 12:172acb80fcab 63
agufal 12:172acb80fcab 64 sumaPesos += pesos[i];
agufal 11:27f2850b9388 65
agufal 11:27f2850b9388 66 }
agufal 11:27f2850b9388 67
agufal 11:27f2850b9388 68 Vector media;
agufal 11:27f2850b9388 69
agufal 12:172acb80fcab 70 media.x = x / sumaPesos; //buffer.get_size();
agufal 12:172acb80fcab 71 media.y = y / sumaPesos; //buffer.get_size();
agufal 12:172acb80fcab 72 media.z = z / sumaPesos; //buffer.get_size();
agufal 11:27f2850b9388 73
agufal 11:27f2850b9388 74 acc_service.updateAccelState(media);
agufal 11:27f2850b9388 75
agufal 12:172acb80fcab 76 //wait(1);
agufal 12:172acb80fcab 77 expired = false;
agufal 12:172acb80fcab 78 timeout.attach(activar, 1);
agufal 12:172acb80fcab 79
agufal 12:172acb80fcab 80 // Esto es porque sale del sleep con cualquier interrupcion,
agufal 12:172acb80fcab 81 // asi que hay que decirle que si no es la nuestra, se vuelva a dormir
agufal 12:172acb80fcab 82 while(!expired) sleep();
agufal 12:172acb80fcab 83
agufal 12:172acb80fcab 84 //pc.printf("media - X: %i\n Y: %i\n Z: %i\n", media.x, media.y, media.z);
agufal 12:172acb80fcab 85 //pc.printf("valor - X: %i\n Y: %i\n Z: %i\n", ultimo.x, ultimo.y, ultimo.z);
agufal 5:d5dba5370918 86
Alexisfdi 3:80ceedd5ffac 87 }
agufal 0:c123bc196680 88 }