Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BLE_API mbed nRF51822 circular_buffer
main.cpp@13:e4c3b3e00e3d, 2016-05-25 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |
