This is an example program for the Freescale multi-sensor shield, part number FRDM-FXS-MULTI
Dependencies: FXAS21000 FXLS8471Q FXOS8700Q MAG3110 MMA8652 MPL3115A2 mbed
main.cpp@0:e5337522df6f, 2014-04-19 (annotated)
- 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?
User | Revision | Line number | New 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 | } |