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
- Committer:
- JimCarver
- Date:
- 2014-04-19
- Revision:
- 0:e5337522df6f
- Child:
- 1:d3ecb4ecdfda
File content as of revision 0:e5337522df6f:
#include "mbed.h" #include "MAG3110.h" #include "MPL3115A2.h" #include "FXOS8700Q.h" #include "MMA8652.h" #include "FXLS8471Q.h" #include "FXAS21000.h" #define MPL3115A2_I2C_ADDRESS (0x60<<1) DigitalOut red(LED_RED); MAG3110 mag1(A4, A5); MAG3110 mag2(PTE25, PTE24); // Magnetometer on KL46 board FXLS8471Q acc1(D11, D12, D13, D10); MMA8652 acc2( A4, A5); MPL3115A2 alt( A4, A5, MPL3115A2_I2C_ADDRESS); FXOS8700Q combo( A4, A5, FXOS8700CQ_SLAVE_ADDR0); FXAS21000 gyro( A4, A5); Serial pc(USBTX, USBRX); float print_AltimiterValue( unsigned char *dt) { unsigned short altm; float faltm; /* * dt[0] = Bits 12-19 of 20-bit real-time Altitude sample. (b7-b0) * dt[1] = Bits 4-11 of 20-bit real-time Altitude sample. (b7-b0) * dt[2] = Bits 0-3 of 20-bit real-time Altitude sample (b7-b4) */ altm = (dt[0]<<8) | dt[1]; // if ( dt[0] > 0x7F) { altm = ~altm + 1; faltm = (float)altm * -1.0f; } else { faltm = (float)altm * 1.0f; } // faltm = faltm+((float)(dt[2]>>4) * 0.0625f); return faltm; } float print_TemperatureValue( unsigned char *dt) { unsigned short temp; float ftemp; /* * dt[0] = Bits 4-11 of 16-bit real-time temperature sample. (b7-b0) * dt[1] = Bits 0-3 of 16-bit real-time temperature sample. (b7-b4) */ temp = dt[0]; // if ( dt[0] > 0x7F) { temp = ~temp + 1; ftemp = (float)temp * -1.0f; } else { ftemp = (float)temp * 1.0f; } // ftemp = ftemp+((float)(dt[1]>>4) * 0.0625f); return ftemp; } int main() { //int who; float acc_data[3], mag_data[3], gyro_data[3]; int16_t acc_raw[3]; unsigned char raw_data[8]; pc.baud(115200); red = 1; printf("\r\n\r\n\r\n"); alt.Altimeter_Mode(); printf("MMA8652 Who Am I= %X\r\n", acc2.getWhoAmI()); printf("FXOS8700 Who Am I= %X\r\n", combo.getWhoAmI()); printf("FXLS8471 Who Am I= %X\r\n", acc1.getWhoAmI()); printf("FXAS21000 Who Am I= %X\r\n", gyro.getWhoAmI()); wait(5.0); while(1) { acc1.ReadXYZ(acc_data); printf("FXLS8471 X=%1.5f Y=%1.5f Z=%1.5f\r\n", acc_data[0], acc_data[1], acc_data[2]); acc2.ReadXYZ(acc_data); printf("MMA8652 X=%1.5f Y=%1.5f Z=%1.5f\r\n", acc_data[0], acc_data[1], acc_data[2]); combo.getAccAllAxis( acc_data); combo.getMagAllAxis( mag_data); printf("FXOS8700 Acc: X=%1.5f Y=%1.5f Z=%1.5f", acc_data[0], acc_data[1], acc_data[2]); printf(" Mag: X=%4.1f Y=%4.1f Z=%4.1f\r\n", mag_data[0], mag_data[1], mag_data[2]); mag1.ReadXYZ(mag_data); printf(" "); printf(" Mag1: X=%4.1f Y=%4.1f Z=%4.1f\r\n", mag_data[0], mag_data[1], mag_data[2]); mag2.ReadXYZ(mag_data); printf(" "); printf(" Mag2: X=%4.1f Y=%4.1f Z=%4.1f\r\n", mag_data[0], mag_data[1], mag_data[2]); alt.getAllDataRaw( &raw_data[0]); printf("\r\nAlt: %5.1f\tT: %3.1f\r\n", print_AltimiterValue( &raw_data[0]), print_TemperatureValue( &raw_data[3])); gyro.ReadXYZ(gyro_data); printf("FXAS21000 X=%4.2f Y=%4.2f Z=%4.1f\r\n", gyro_data[0], gyro_data[1], gyro_data[2]); acc1.ReadXYZraw(acc_raw); printf("FXLS8471: X= %d Y= %d Z= %d\r\n\n\n", acc_raw[0], acc_raw[1], acc_raw[2]); acc2.ReadXYZraw(acc_raw); printf("MMA8652: X= %d Y= %d Z= %d\r\n\n\n", acc_raw[0], acc_raw[1], acc_raw[2]); red = 1; wait(0.5); red = 0; wait(0.5); } }