duckietownhsunina / Mbed 2 deprecated HelloWorld_IKS01A1_mod

Dependencies:   X_NUCLEO_IKS01A1 mbed

Fork of HelloWorld_IKS01A1 by ST

Committer:
divui
Date:
Tue Feb 14 23:33:47 2017 +0000
Revision:
10:5226b32ae4f8
Parent:
4:b1526d074d83
.

Who changed what in which revision?

UserRevisionLine numberNew 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 }