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: X_NUCLEO_IKS01A1 mbed
Fork of HelloWorld_IKS01A1 by
main.cpp@10:5226b32ae4f8, 2017-02-14 (annotated)
- Committer:
- divui
- Date:
- Tue Feb 14 23:33:47 2017 +0000
- Revision:
- 10:5226b32ae4f8
- Parent:
- 4:b1526d074d83
.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| divui | 10:5226b32ae4f8 | 1 | /* |
| divui | 10:5226b32ae4f8 | 2 | Conversione dei dati grezzi del giroscopio su scheda IKS01A1 in gradi |
| divui | 10:5226b32ae4f8 | 3 | */ |
| Wolfgang Betz |
0:c71c9af137dd | 4 | |
| Wolfgang Betz |
0:c71c9af137dd | 5 | /* Includes */ |
| Wolfgang Betz |
0:c71c9af137dd | 6 | #include "mbed.h" |
| Wolfgang Betz |
0:c71c9af137dd | 7 | #include "x_nucleo_iks01a1.h" |
| Wolfgang Betz |
0:c71c9af137dd | 8 | |
| divui | 10:5226b32ae4f8 | 9 | #define sens 70 |
| divui | 10:5226b32ae4f8 | 10 | |
| divui | 10:5226b32ae4f8 | 11 | |
| Wolfgang Betz |
0:c71c9af137dd | 12 | /* Instantiate the expansion board */ |
| Wolfgang Betz |
4:b1526d074d83 | 13 | static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15); |
| Wolfgang Betz |
0:c71c9af137dd | 14 | |
| Wolfgang Betz |
0:c71c9af137dd | 15 | /* Retrieve the composing elements of the expansion board */ |
| Wolfgang Betz |
0:c71c9af137dd | 16 | static GyroSensor *gyroscope = mems_expansion_board->GetGyroscope(); |
| Wolfgang Betz |
0:c71c9af137dd | 17 | static MotionSensor *accelerometer = mems_expansion_board->GetAccelerometer(); |
| Wolfgang Betz |
0:c71c9af137dd | 18 | |
| Wolfgang Betz |
0:c71c9af137dd | 19 | |
| Wolfgang Betz |
0:c71c9af137dd | 20 | /* Simple main function */ |
| Wolfgang Betz |
0:c71c9af137dd | 21 | int main() { |
| Wolfgang Betz |
0:c71c9af137dd | 22 | uint8_t id; |
| Wolfgang Betz |
0:c71c9af137dd | 23 | int32_t axes[3]; |
| divui | 10:5226b32ae4f8 | 24 | int32_t off[3]; |
| divui | 10:5226b32ae4f8 | 25 | float parziale[3] = {0,0,0}; //inizializzazione vettore senza ciclo FOR |
| divui | 10:5226b32ae4f8 | 26 | float finale[3] = {0,0,0}; |
| divui | 10:5226b32ae4f8 | 27 | int32_t k=0; |
| Wolfgang Betz |
0:c71c9af137dd | 28 | |
| Wolfgang Betz |
0:c71c9af137dd | 29 | printf("\r\n--- Starting new run ---\r\n"); |
| Wolfgang Betz |
0:c71c9af137dd | 30 | gyroscope->ReadID(&id); |
| Wolfgang Betz |
0:c71c9af137dd | 31 | printf("LSM6DS0 accelerometer & gyroscope = 0x%X\r\n", id); |
| Wolfgang Betz |
0:c71c9af137dd | 32 | |
| divui | 10:5226b32ae4f8 | 33 | wait(1.5); |
| divui | 10:5226b32ae4f8 | 34 | |
| divui | 10:5226b32ae4f8 | 35 | //acquisizione offset |
| divui | 10:5226b32ae4f8 | 36 | accelerometer->Get_X_Axes(off); |
| divui | 10:5226b32ae4f8 | 37 | printf("off [gyro/mdps]: %6ld, %6ld, %6ld\r\n", off[0], off[1], off[2]); |
| divui | 10:5226b32ae4f8 | 38 | |
| Wolfgang Betz |
0:c71c9af137dd | 39 | |
| Wolfgang Betz |
0:c71c9af137dd | 40 | while(1) { |
| Wolfgang Betz |
0:c71c9af137dd | 41 | printf("\r\n"); |
| Wolfgang Betz |
0:c71c9af137dd | 42 | |
| Wolfgang Betz |
0:c71c9af137dd | 43 | accelerometer->Get_X_Axes(axes); |
| Wolfgang Betz |
0:c71c9af137dd | 44 | printf("LSM6DS0 [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
| Wolfgang Betz |
0:c71c9af137dd | 45 | |
| Wolfgang Betz |
0:c71c9af137dd | 46 | gyroscope->Get_G_Axes(axes); |
| divui | 10:5226b32ae4f8 | 47 | printf("LSM6DS0 RAW [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
| divui | 10:5226b32ae4f8 | 48 | |
| divui | 10:5226b32ae4f8 | 49 | for(int i=0;i<3;i++) |
| divui | 10:5226b32ae4f8 | 50 | axes[i]=axes[i]-off[i]; |
| divui | 10:5226b32ae4f8 | 51 | |
| divui | 10:5226b32ae4f8 | 52 | printf("LSM6DS0 FINE [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); |
| divui | 10:5226b32ae4f8 | 53 | |
| divui | 10:5226b32ae4f8 | 54 | |
| divui | 10:5226b32ae4f8 | 55 | k=k+1; |
| divui | 10:5226b32ae4f8 | 56 | wait_ms(1); //dt |
| Wolfgang Betz |
0:c71c9af137dd | 57 | |
| divui | 10:5226b32ae4f8 | 58 | // Ricavo il parziale della velocità angolare |
| divui | 10:5226b32ae4f8 | 59 | for(int i=0;i<3;i++) |
| divui | 10:5226b32ae4f8 | 60 | { |
| divui | 10:5226b32ae4f8 | 61 | parziale[i]=(axes[i]*sens)/1000;// passo da mdps a dpLSB |
| divui | 10:5226b32ae4f8 | 62 | |
| divui | 10:5226b32ae4f8 | 63 | finale[i]=(finale[i]-19)/2.84;// levo la correzione per poter sommare i dati parziali |
| divui | 10:5226b32ae4f8 | 64 | |
| divui | 10:5226b32ae4f8 | 65 | parziale[i]/= 1000;// moltiplico per il dt (1ms) |
| divui | 10:5226b32ae4f8 | 66 | |
| divui | 10:5226b32ae4f8 | 67 | if (axes[i]>150 ||axes[i]<-150) |
| divui | 10:5226b32ae4f8 | 68 | finale[i] += parziale[i]; // integro |
| divui | 10:5226b32ae4f8 | 69 | |
| divui | 10:5226b32ae4f8 | 70 | finale[i]=(finale[i]*2.84)+19;// correggo offset e guadagno che ho ricavato da una "taratura" grezza (ricavo la retta ) |
| divui | 10:5226b32ae4f8 | 71 | |
| divui | 10:5226b32ae4f8 | 72 | } |
| divui | 10:5226b32ae4f8 | 73 | printf("finale [gyro/d]: %6f, %6f, %6f\r\n", finale[0], finale[1], finale[2]);//angolo |
| divui | 10:5226b32ae4f8 | 74 | |
| Wolfgang Betz |
0:c71c9af137dd | 75 | } |
| divui | 10:5226b32ae4f8 | 76 | |
| Wolfgang Betz |
0:c71c9af137dd | 77 | } |
