Test for On-Board accelerometer and magnetometer

Dependencies:   FXOS8700CQ mbed

Committer:
joshwilkins2013
Date:
Tue Mar 31 22:37:21 2015 +0000
Revision:
0:50827c2b52fb

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joshwilkins2013 0:50827c2b52fb 1 #include "mbed.h"
joshwilkins2013 0:50827c2b52fb 2 #include "FXOS8700CQ.h"
joshwilkins2013 0:50827c2b52fb 3
joshwilkins2013 0:50827c2b52fb 4 Serial pc(USBTX, USBRX); // Primary output to demonstrate library
joshwilkins2013 0:50827c2b52fb 5
joshwilkins2013 0:50827c2b52fb 6 FXOS8700CQ fxos(PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); // SDA, SCL, (addr << 1)
joshwilkins2013 0:50827c2b52fb 7
joshwilkins2013 0:50827c2b52fb 8 DigitalOut green(LED_GREEN); // waiting light
joshwilkins2013 0:50827c2b52fb 9 DigitalOut blue(LED_BLUE); // collection-in-progress light
joshwilkins2013 0:50827c2b52fb 10 DigitalOut red(LED_RED); // completed/error ligt
joshwilkins2013 0:50827c2b52fb 11
joshwilkins2013 0:50827c2b52fb 12 Timer t; // Microsecond timer, 32 bit int, maximum count of ~30 minutes
joshwilkins2013 0:50827c2b52fb 13 InterruptIn fxos_int2(PTC13); // should just be the Data-Ready interrupt
joshwilkins2013 0:50827c2b52fb 14 bool fxos_int2_triggered = false; // Interrupt status flags and data
joshwilkins2013 0:50827c2b52fb 15
joshwilkins2013 0:50827c2b52fb 16 SRAWDATA accel_data; // Storage for the data from the sensor
joshwilkins2013 0:50827c2b52fb 17 SRAWDATA magn_data;
joshwilkins2013 0:50827c2b52fb 18
joshwilkins2013 0:50827c2b52fb 19 void trigger_fxos_int2(void){
joshwilkins2013 0:50827c2b52fb 20 fxos_int2_triggered = true;
joshwilkins2013 0:50827c2b52fb 21 }
joshwilkins2013 0:50827c2b52fb 22
joshwilkins2013 0:50827c2b52fb 23 void print_reading(){
joshwilkins2013 0:50827c2b52fb 24 pc.printf("A X:%5d,Y:%5d,Z:%5d M X:%5d,Y:%5d,Z:%5d\r\n",
joshwilkins2013 0:50827c2b52fb 25 accel_data.x, accel_data.y, accel_data.z,
joshwilkins2013 0:50827c2b52fb 26 magn_data.x, magn_data.y, magn_data.z);
joshwilkins2013 0:50827c2b52fb 27 }
joshwilkins2013 0:50827c2b52fb 28
joshwilkins2013 0:50827c2b52fb 29 int main(void){
joshwilkins2013 0:50827c2b52fb 30 t.reset();
joshwilkins2013 0:50827c2b52fb 31 pc.baud(115200); // 200Hz x line of output data!
joshwilkins2013 0:50827c2b52fb 32
joshwilkins2013 0:50827c2b52fb 33 green.write(1);
joshwilkins2013 0:50827c2b52fb 34 red.write(1);
joshwilkins2013 0:50827c2b52fb 35 blue.write(1);
joshwilkins2013 0:50827c2b52fb 36
joshwilkins2013 0:50827c2b52fb 37 printf("\r\n\nFXOS8700Q Who Am I= %X\r\n", fxos.get_whoami());
joshwilkins2013 0:50827c2b52fb 38
joshwilkins2013 0:50827c2b52fb 39 fxos_int2.fall(&trigger_fxos_int2); // Iterrupt for active-low interrupt line from FXOS
joshwilkins2013 0:50827c2b52fb 40 fxos.enable();
joshwilkins2013 0:50827c2b52fb 41
joshwilkins2013 0:50827c2b52fb 42 green.write(0); // ready-green on
joshwilkins2013 0:50827c2b52fb 43
joshwilkins2013 0:50827c2b52fb 44 // Example data printing
joshwilkins2013 0:50827c2b52fb 45 fxos.get_data(&accel_data, &magn_data);
joshwilkins2013 0:50827c2b52fb 46 print_reading();
joshwilkins2013 0:50827c2b52fb 47
joshwilkins2013 0:50827c2b52fb 48 pc.printf("Started data collection. Accelerometer at max %dg.\r\n",
joshwilkins2013 0:50827c2b52fb 49 fxos.get_accel_scale());
joshwilkins2013 0:50827c2b52fb 50
joshwilkins2013 0:50827c2b52fb 51 fxos.get_data(&accel_data, &magn_data); // clear interrupt from device
joshwilkins2013 0:50827c2b52fb 52 fxos_int2_triggered = false; // un-trigger
joshwilkins2013 0:50827c2b52fb 53
joshwilkins2013 0:50827c2b52fb 54 t.start(); // start timer and enter collection loop
joshwilkins2013 0:50827c2b52fb 55 while(1){
joshwilkins2013 0:50827c2b52fb 56 if(fxos_int2_triggered) {
joshwilkins2013 0:50827c2b52fb 57 fxos_int2_triggered = false; // un-trigger
joshwilkins2013 0:50827c2b52fb 58 fxos.get_data(&accel_data, &magn_data);
joshwilkins2013 0:50827c2b52fb 59 print_reading(); // outpouring of data !!
joshwilkins2013 0:50827c2b52fb 60 }
joshwilkins2013 0:50827c2b52fb 61
joshwilkins2013 0:50827c2b52fb 62 // Continuous polling of interrupt status is not efficient, but...
joshwilkins2013 0:50827c2b52fb 63 wait_us(500); // 1/10th the period of the 200Hz sample rate
joshwilkins2013 0:50827c2b52fb 64 }
joshwilkins2013 0:50827c2b52fb 65 }