Test for On-Board accelerometer and magnetometer
Dependencies: FXOS8700CQ mbed
main.cpp@0:50827c2b52fb, 2015-03-31 (annotated)
- Committer:
- joshwilkins2013
- Date:
- Tue Mar 31 22:37:21 2015 +0000
- Revision:
- 0:50827c2b52fb
Who changed what in which revision?
User | Revision | Line number | New 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 | } |