This is an example program for the Freescale multi-sensor shield, part number FRDM-FXS-MULTI

Dependencies:   FXAS21000 FXLS8471Q FXOS8700Q MAG3110 MMA8652 MPL3115A2 mbed

Committer:
JimCarver
Date:
Sat Apr 19 01:30:29 2014 +0000
Revision:
0:e5337522df6f
Child:
1:d3ecb4ecdfda
This is an example program for the Freescale Multi sensor shield using the provided sensors: FXAS21000, FXLA8471, FXOS8700, MAG3110, MMA8652 and MPL3115;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JimCarver 0:e5337522df6f 1 #include "mbed.h"
JimCarver 0:e5337522df6f 2 #include "MAG3110.h"
JimCarver 0:e5337522df6f 3 #include "MPL3115A2.h"
JimCarver 0:e5337522df6f 4 #include "FXOS8700Q.h"
JimCarver 0:e5337522df6f 5 #include "MMA8652.h"
JimCarver 0:e5337522df6f 6 #include "FXLS8471Q.h"
JimCarver 0:e5337522df6f 7 #include "FXAS21000.h"
JimCarver 0:e5337522df6f 8
JimCarver 0:e5337522df6f 9 #define MPL3115A2_I2C_ADDRESS (0x60<<1)
JimCarver 0:e5337522df6f 10
JimCarver 0:e5337522df6f 11
JimCarver 0:e5337522df6f 12 DigitalOut red(LED_RED);
JimCarver 0:e5337522df6f 13
JimCarver 0:e5337522df6f 14 MAG3110 mag1(A4, A5);
JimCarver 0:e5337522df6f 15 MAG3110 mag2(PTE25, PTE24); // Magnetometer on KL46 board
JimCarver 0:e5337522df6f 16
JimCarver 0:e5337522df6f 17 FXLS8471Q acc1(D11, D12, D13, D10);
JimCarver 0:e5337522df6f 18 MMA8652 acc2( A4, A5);
JimCarver 0:e5337522df6f 19 MPL3115A2 alt( A4, A5, MPL3115A2_I2C_ADDRESS);
JimCarver 0:e5337522df6f 20 FXOS8700Q combo( A4, A5, FXOS8700CQ_SLAVE_ADDR0);
JimCarver 0:e5337522df6f 21 FXAS21000 gyro( A4, A5);
JimCarver 0:e5337522df6f 22
JimCarver 0:e5337522df6f 23 Serial pc(USBTX, USBRX);
JimCarver 0:e5337522df6f 24
JimCarver 0:e5337522df6f 25
JimCarver 0:e5337522df6f 26
JimCarver 0:e5337522df6f 27 float print_AltimiterValue( unsigned char *dt)
JimCarver 0:e5337522df6f 28 {
JimCarver 0:e5337522df6f 29 unsigned short altm;
JimCarver 0:e5337522df6f 30 float faltm;
JimCarver 0:e5337522df6f 31
JimCarver 0:e5337522df6f 32 /*
JimCarver 0:e5337522df6f 33 * dt[0] = Bits 12-19 of 20-bit real-time Altitude sample. (b7-b0)
JimCarver 0:e5337522df6f 34 * dt[1] = Bits 4-11 of 20-bit real-time Altitude sample. (b7-b0)
JimCarver 0:e5337522df6f 35 * dt[2] = Bits 0-3 of 20-bit real-time Altitude sample (b7-b4)
JimCarver 0:e5337522df6f 36 */
JimCarver 0:e5337522df6f 37 altm = (dt[0]<<8) | dt[1];
JimCarver 0:e5337522df6f 38 //
JimCarver 0:e5337522df6f 39 if ( dt[0] > 0x7F) {
JimCarver 0:e5337522df6f 40 altm = ~altm + 1;
JimCarver 0:e5337522df6f 41 faltm = (float)altm * -1.0f;
JimCarver 0:e5337522df6f 42 } else {
JimCarver 0:e5337522df6f 43 faltm = (float)altm * 1.0f;
JimCarver 0:e5337522df6f 44 }
JimCarver 0:e5337522df6f 45 //
JimCarver 0:e5337522df6f 46 faltm = faltm+((float)(dt[2]>>4) * 0.0625f);
JimCarver 0:e5337522df6f 47 return faltm;
JimCarver 0:e5337522df6f 48 }
JimCarver 0:e5337522df6f 49
JimCarver 0:e5337522df6f 50 float print_TemperatureValue( unsigned char *dt)
JimCarver 0:e5337522df6f 51 {
JimCarver 0:e5337522df6f 52 unsigned short temp;
JimCarver 0:e5337522df6f 53 float ftemp;
JimCarver 0:e5337522df6f 54
JimCarver 0:e5337522df6f 55 /*
JimCarver 0:e5337522df6f 56 * dt[0] = Bits 4-11 of 16-bit real-time temperature sample. (b7-b0)
JimCarver 0:e5337522df6f 57 * dt[1] = Bits 0-3 of 16-bit real-time temperature sample. (b7-b4)
JimCarver 0:e5337522df6f 58 */
JimCarver 0:e5337522df6f 59 temp = dt[0];
JimCarver 0:e5337522df6f 60 //
JimCarver 0:e5337522df6f 61 if ( dt[0] > 0x7F) {
JimCarver 0:e5337522df6f 62 temp = ~temp + 1;
JimCarver 0:e5337522df6f 63 ftemp = (float)temp * -1.0f;
JimCarver 0:e5337522df6f 64 } else {
JimCarver 0:e5337522df6f 65 ftemp = (float)temp * 1.0f;
JimCarver 0:e5337522df6f 66 }
JimCarver 0:e5337522df6f 67 //
JimCarver 0:e5337522df6f 68 ftemp = ftemp+((float)(dt[1]>>4) * 0.0625f);
JimCarver 0:e5337522df6f 69 return ftemp;
JimCarver 0:e5337522df6f 70
JimCarver 0:e5337522df6f 71 }
JimCarver 0:e5337522df6f 72
JimCarver 0:e5337522df6f 73
JimCarver 0:e5337522df6f 74 int main() {
JimCarver 0:e5337522df6f 75 //int who;
JimCarver 0:e5337522df6f 76 float acc_data[3], mag_data[3], gyro_data[3];
JimCarver 0:e5337522df6f 77 int16_t acc_raw[3];
JimCarver 0:e5337522df6f 78 unsigned char raw_data[8];
JimCarver 0:e5337522df6f 79 pc.baud(115200);
JimCarver 0:e5337522df6f 80 red = 1;
JimCarver 0:e5337522df6f 81 printf("\r\n\r\n\r\n");
JimCarver 0:e5337522df6f 82 alt.Altimeter_Mode();
JimCarver 0:e5337522df6f 83 printf("MMA8652 Who Am I= %X\r\n", acc2.getWhoAmI());
JimCarver 0:e5337522df6f 84 printf("FXOS8700 Who Am I= %X\r\n", combo.getWhoAmI());
JimCarver 0:e5337522df6f 85 printf("FXLS8471 Who Am I= %X\r\n", acc1.getWhoAmI());
JimCarver 0:e5337522df6f 86 printf("FXAS21000 Who Am I= %X\r\n", gyro.getWhoAmI());
JimCarver 0:e5337522df6f 87 wait(5.0);
JimCarver 0:e5337522df6f 88 while(1) {
JimCarver 0:e5337522df6f 89
JimCarver 0:e5337522df6f 90 acc1.ReadXYZ(acc_data);
JimCarver 0:e5337522df6f 91 printf("FXLS8471 X=%1.5f Y=%1.5f Z=%1.5f\r\n", acc_data[0], acc_data[1], acc_data[2]);
JimCarver 0:e5337522df6f 92 acc2.ReadXYZ(acc_data);
JimCarver 0:e5337522df6f 93 printf("MMA8652 X=%1.5f Y=%1.5f Z=%1.5f\r\n", acc_data[0], acc_data[1], acc_data[2]);
JimCarver 0:e5337522df6f 94 combo.getAccAllAxis( acc_data);
JimCarver 0:e5337522df6f 95 combo.getMagAllAxis( mag_data);
JimCarver 0:e5337522df6f 96 printf("FXOS8700 Acc: X=%1.5f Y=%1.5f Z=%1.5f", acc_data[0], acc_data[1], acc_data[2]);
JimCarver 0:e5337522df6f 97 printf(" Mag: X=%4.1f Y=%4.1f Z=%4.1f\r\n", mag_data[0], mag_data[1], mag_data[2]);
JimCarver 0:e5337522df6f 98 mag1.ReadXYZ(mag_data);
JimCarver 0:e5337522df6f 99 printf(" ");
JimCarver 0:e5337522df6f 100 printf(" Mag1: X=%4.1f Y=%4.1f Z=%4.1f\r\n", mag_data[0], mag_data[1], mag_data[2]);
JimCarver 0:e5337522df6f 101 mag2.ReadXYZ(mag_data);
JimCarver 0:e5337522df6f 102 printf(" ");
JimCarver 0:e5337522df6f 103 printf(" Mag2: X=%4.1f Y=%4.1f Z=%4.1f\r\n", mag_data[0], mag_data[1], mag_data[2]);
JimCarver 0:e5337522df6f 104 alt.getAllDataRaw( &raw_data[0]);
JimCarver 0:e5337522df6f 105 printf("\r\nAlt: %5.1f\tT: %3.1f\r\n", print_AltimiterValue( &raw_data[0]), print_TemperatureValue( &raw_data[3]));
JimCarver 0:e5337522df6f 106 gyro.ReadXYZ(gyro_data);
JimCarver 0:e5337522df6f 107 printf("FXAS21000 X=%4.2f Y=%4.2f Z=%4.1f\r\n", gyro_data[0], gyro_data[1], gyro_data[2]);
JimCarver 0:e5337522df6f 108 acc1.ReadXYZraw(acc_raw);
JimCarver 0:e5337522df6f 109 printf("FXLS8471: X= %d Y= %d Z= %d\r\n\n\n", acc_raw[0], acc_raw[1], acc_raw[2]);
JimCarver 0:e5337522df6f 110 acc2.ReadXYZraw(acc_raw);
JimCarver 0:e5337522df6f 111 printf("MMA8652: X= %d Y= %d Z= %d\r\n\n\n", acc_raw[0], acc_raw[1], acc_raw[2]);
JimCarver 0:e5337522df6f 112 red = 1;
JimCarver 0:e5337522df6f 113 wait(0.5);
JimCarver 0:e5337522df6f 114 red = 0;
JimCarver 0:e5337522df6f 115 wait(0.5);
JimCarver 0:e5337522df6f 116 }
JimCarver 0:e5337522df6f 117 }