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:
Mon Jun 02 19:05:04 2014 +0000
Revision:
1:d3ecb4ecdfda
Parent:
0:e5337522df6f
Modified to use updated FXOS8700 & MAG3100 libraries

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JimCarver 1:d3ecb4ecdfda 1 /* Copyright (c) 2010-2011 mbed.org, MIT License
JimCarver 1:d3ecb4ecdfda 2 *
JimCarver 1:d3ecb4ecdfda 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
JimCarver 1:d3ecb4ecdfda 4 * and associated documentation files (the "Software"), to deal in the Software without
JimCarver 1:d3ecb4ecdfda 5 * restriction, including without limitation the rights to use, copy, modify, merge, publish,
JimCarver 1:d3ecb4ecdfda 6 * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
JimCarver 1:d3ecb4ecdfda 7 * Software is furnished to do so, subject to the following conditions:
JimCarver 1:d3ecb4ecdfda 8 *
JimCarver 1:d3ecb4ecdfda 9 * The above copyright notice and this permission notice shall be included in all copies or
JimCarver 1:d3ecb4ecdfda 10 * substantial portions of the Software.
JimCarver 1:d3ecb4ecdfda 11 *
JimCarver 1:d3ecb4ecdfda 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
JimCarver 1:d3ecb4ecdfda 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
JimCarver 1:d3ecb4ecdfda 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
JimCarver 1:d3ecb4ecdfda 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
JimCarver 1:d3ecb4ecdfda 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
JimCarver 1:d3ecb4ecdfda 17 */
JimCarver 1:d3ecb4ecdfda 18
JimCarver 0:e5337522df6f 19 #include "mbed.h"
JimCarver 0:e5337522df6f 20 #include "MAG3110.h"
JimCarver 1:d3ecb4ecdfda 21 #include "MPL3115A2.h" // May only be used on a Freescale platform, comment out for others
JimCarver 0:e5337522df6f 22 #include "FXOS8700Q.h"
JimCarver 0:e5337522df6f 23 #include "MMA8652.h"
JimCarver 0:e5337522df6f 24 #include "FXLS8471Q.h"
JimCarver 0:e5337522df6f 25 #include "FXAS21000.h"
JimCarver 0:e5337522df6f 26
JimCarver 0:e5337522df6f 27 #define MPL3115A2_I2C_ADDRESS (0x60<<1)
JimCarver 0:e5337522df6f 28
JimCarver 0:e5337522df6f 29
JimCarver 1:d3ecb4ecdfda 30 DigitalOut red(LED1);
JimCarver 0:e5337522df6f 31
JimCarver 0:e5337522df6f 32 FXLS8471Q acc1(D11, D12, D13, D10);
JimCarver 1:d3ecb4ecdfda 33 MMA8652 acc2(A4, A5);
JimCarver 1:d3ecb4ecdfda 34 FXOS8700Q_acc combo_acc(A4, A5, FXOS8700CQ_SLAVE_ADDR0);
JimCarver 1:d3ecb4ecdfda 35 FXOS8700Q_mag combo_mag(A4, A5, FXOS8700CQ_SLAVE_ADDR0);
JimCarver 1:d3ecb4ecdfda 36 MAG3110 mag2(A4, A5);
JimCarver 1:d3ecb4ecdfda 37 FXAS21000 gyro(A4, A5);
JimCarver 1:d3ecb4ecdfda 38 MPL3115A2 alt(A4, A5, MPL3115A2_I2C_ADDRESS); // May only be used on a Freescale platform, comment out for others
JimCarver 0:e5337522df6f 39
JimCarver 0:e5337522df6f 40 Serial pc(USBTX, USBRX);
JimCarver 0:e5337522df6f 41
JimCarver 0:e5337522df6f 42
JimCarver 0:e5337522df6f 43
JimCarver 0:e5337522df6f 44 float print_AltimiterValue( unsigned char *dt)
JimCarver 0:e5337522df6f 45 {
JimCarver 0:e5337522df6f 46 unsigned short altm;
JimCarver 0:e5337522df6f 47 float faltm;
JimCarver 0:e5337522df6f 48
JimCarver 0:e5337522df6f 49 /*
JimCarver 0:e5337522df6f 50 * dt[0] = Bits 12-19 of 20-bit real-time Altitude sample. (b7-b0)
JimCarver 0:e5337522df6f 51 * dt[1] = Bits 4-11 of 20-bit real-time Altitude sample. (b7-b0)
JimCarver 0:e5337522df6f 52 * dt[2] = Bits 0-3 of 20-bit real-time Altitude sample (b7-b4)
JimCarver 1:d3ecb4ecdfda 53 */
JimCarver 0:e5337522df6f 54 altm = (dt[0]<<8) | dt[1];
JimCarver 0:e5337522df6f 55 //
JimCarver 0:e5337522df6f 56 if ( dt[0] > 0x7F) {
JimCarver 0:e5337522df6f 57 altm = ~altm + 1;
JimCarver 0:e5337522df6f 58 faltm = (float)altm * -1.0f;
JimCarver 0:e5337522df6f 59 } else {
JimCarver 0:e5337522df6f 60 faltm = (float)altm * 1.0f;
JimCarver 0:e5337522df6f 61 }
JimCarver 0:e5337522df6f 62 //
JimCarver 0:e5337522df6f 63 faltm = faltm+((float)(dt[2]>>4) * 0.0625f);
JimCarver 0:e5337522df6f 64 return faltm;
JimCarver 0:e5337522df6f 65 }
JimCarver 0:e5337522df6f 66
JimCarver 0:e5337522df6f 67 float print_TemperatureValue( unsigned char *dt)
JimCarver 0:e5337522df6f 68 {
JimCarver 0:e5337522df6f 69 unsigned short temp;
JimCarver 0:e5337522df6f 70 float ftemp;
JimCarver 1:d3ecb4ecdfda 71
JimCarver 0:e5337522df6f 72 /*
JimCarver 0:e5337522df6f 73 * dt[0] = Bits 4-11 of 16-bit real-time temperature sample. (b7-b0)
JimCarver 0:e5337522df6f 74 * dt[1] = Bits 0-3 of 16-bit real-time temperature sample. (b7-b4)
JimCarver 0:e5337522df6f 75 */
JimCarver 0:e5337522df6f 76 temp = dt[0];
JimCarver 0:e5337522df6f 77 //
JimCarver 0:e5337522df6f 78 if ( dt[0] > 0x7F) {
JimCarver 0:e5337522df6f 79 temp = ~temp + 1;
JimCarver 0:e5337522df6f 80 ftemp = (float)temp * -1.0f;
JimCarver 0:e5337522df6f 81 } else {
JimCarver 0:e5337522df6f 82 ftemp = (float)temp * 1.0f;
JimCarver 0:e5337522df6f 83 }
JimCarver 0:e5337522df6f 84 //
JimCarver 0:e5337522df6f 85 ftemp = ftemp+((float)(dt[1]>>4) * 0.0625f);
JimCarver 0:e5337522df6f 86 return ftemp;
JimCarver 0:e5337522df6f 87
JimCarver 0:e5337522df6f 88 }
JimCarver 0:e5337522df6f 89
JimCarver 0:e5337522df6f 90
JimCarver 1:d3ecb4ecdfda 91 int main()
JimCarver 1:d3ecb4ecdfda 92 {
JimCarver 0:e5337522df6f 93 float acc_data[3], mag_data[3], gyro_data[3];
JimCarver 1:d3ecb4ecdfda 94 MotionSensorDataUnits adata;
JimCarver 1:d3ecb4ecdfda 95 MotionSensorDataUnits mdata;
JimCarver 0:e5337522df6f 96 int16_t acc_raw[3];
JimCarver 0:e5337522df6f 97 unsigned char raw_data[8];
JimCarver 1:d3ecb4ecdfda 98
JimCarver 1:d3ecb4ecdfda 99 printf("\r\nStarting\r\n\r\n");
JimCarver 1:d3ecb4ecdfda 100
JimCarver 0:e5337522df6f 101 red = 1;
JimCarver 1:d3ecb4ecdfda 102 combo_acc.enable();
JimCarver 1:d3ecb4ecdfda 103 combo_mag.enable();
JimCarver 1:d3ecb4ecdfda 104 mag2.enable();
JimCarver 0:e5337522df6f 105 alt.Altimeter_Mode();
JimCarver 1:d3ecb4ecdfda 106 printf("FXLS8471 Acc = %X\r\n", acc1.getWhoAmI());
JimCarver 1:d3ecb4ecdfda 107 printf("MMA8652 Acc = %X\r\n", acc2.getWhoAmI());
JimCarver 1:d3ecb4ecdfda 108 printf("FXOS8700 Combo = %X\r\n", combo_acc.whoAmI());
JimCarver 1:d3ecb4ecdfda 109 printf("MAG3110 Mag = %X\r\n", mag2.whoAmI());
JimCarver 1:d3ecb4ecdfda 110 printf("FXAS21000 Gyro = %X\r\n", gyro.getWhoAmI());
JimCarver 1:d3ecb4ecdfda 111 printf("MPL3115A2 Alt = %X\r\n", alt.getDeviceID()); // May only be used on a Freescale platform, comment out for others
JimCarver 1:d3ecb4ecdfda 112 wait(3);
JimCarver 1:d3ecb4ecdfda 113
JimCarver 0:e5337522df6f 114 while(1) {
JimCarver 1:d3ecb4ecdfda 115 acc1.ReadXYZ(acc_data);
JimCarver 1:d3ecb4ecdfda 116 acc1.ReadXYZraw(acc_raw);
JimCarver 1:d3ecb4ecdfda 117 printf("FXLS8471 Acc: X:%1.3f Y:%1.3f Z:%1.3f (Raw X:%3d Y:%3d Z:%3d)\r\n", acc_data[0], acc_data[1], acc_data[2], acc_raw[0], acc_raw[1], acc_raw[2]);
JimCarver 0:e5337522df6f 118
JimCarver 0:e5337522df6f 119 acc2.ReadXYZ(acc_data);
JimCarver 1:d3ecb4ecdfda 120 acc2.ReadXYZraw(acc_raw);
JimCarver 1:d3ecb4ecdfda 121 printf("MMA8652 Acc: X:%1.3f Y:%1.3f Z:%1.3f (Raw X:%3d Y:%3d Z:%3d)\r\n", acc_data[0], acc_data[1], acc_data[2], acc_raw[0], acc_raw[1], acc_raw[2]);
JimCarver 1:d3ecb4ecdfda 122
JimCarver 1:d3ecb4ecdfda 123 combo_acc.getAxis(adata);
JimCarver 1:d3ecb4ecdfda 124 combo_mag.getAxis(mdata);
JimCarver 1:d3ecb4ecdfda 125 printf("FXOS8700 Acc: X:%1.3f Y:%1.3f Z:%1.3f (Mag X:%4.1f Y:%4.1f Z:%4.1f)\r\n", adata.x, adata.y, adata.z, mdata.x, mdata.y, mdata.z);
JimCarver 1:d3ecb4ecdfda 126
JimCarver 0:e5337522df6f 127 gyro.ReadXYZ(gyro_data);
JimCarver 1:d3ecb4ecdfda 128 printf("FXAS21000 Gyro: X:%4.2f Y:%4.2f Z:%4.1f\r\n", gyro_data[0], gyro_data[1], gyro_data[2]);
JimCarver 1:d3ecb4ecdfda 129
JimCarver 1:d3ecb4ecdfda 130 mag2.getAxis(mdata);
JimCarver 1:d3ecb4ecdfda 131 printf("MAG3110 Mag: X:%4.1f Y:%4.1f Z:%4.1f\r\n", mdata.x, mdata.y, mdata.z);
JimCarver 1:d3ecb4ecdfda 132
JimCarver 1:d3ecb4ecdfda 133 alt.getAllDataRaw(&raw_data[0]); // May only be used on a Freescale platform, comment out for others
JimCarver 1:d3ecb4ecdfda 134 printf("MPL3115A2 Alt: %5.1f\r\n", print_AltimiterValue(&raw_data[0])); // May only be used on a Freescale platform, comment out for others
JimCarver 1:d3ecb4ecdfda 135 printf("MPL3115A2 Temp: %3.1f\r\n", print_TemperatureValue(&raw_data[3])); // May only be used on a Freescale platform, comment out for others
JimCarver 1:d3ecb4ecdfda 136
JimCarver 1:d3ecb4ecdfda 137 printf("\r\n");
JimCarver 1:d3ecb4ecdfda 138
JimCarver 0:e5337522df6f 139 red = 1;
JimCarver 0:e5337522df6f 140 wait(0.5);
JimCarver 0:e5337522df6f 141 red = 0;
JimCarver 0:e5337522df6f 142 wait(0.5);
JimCarver 1:d3ecb4ecdfda 143 }
JimCarver 0:e5337522df6f 144 }