Test for On-Board accelerometer and magnetometer
Dependencies: FXOS8700CQ mbed
main.cpp
- Committer:
- joshwilkins2013
- Date:
- 2015-03-31
- Revision:
- 0:50827c2b52fb
File content as of revision 0:50827c2b52fb:
#include "mbed.h" #include "FXOS8700CQ.h" Serial pc(USBTX, USBRX); // Primary output to demonstrate library FXOS8700CQ fxos(PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); // SDA, SCL, (addr << 1) DigitalOut green(LED_GREEN); // waiting light DigitalOut blue(LED_BLUE); // collection-in-progress light DigitalOut red(LED_RED); // completed/error ligt Timer t; // Microsecond timer, 32 bit int, maximum count of ~30 minutes InterruptIn fxos_int2(PTC13); // should just be the Data-Ready interrupt bool fxos_int2_triggered = false; // Interrupt status flags and data SRAWDATA accel_data; // Storage for the data from the sensor SRAWDATA magn_data; void trigger_fxos_int2(void){ fxos_int2_triggered = true; } void print_reading(){ pc.printf("A X:%5d,Y:%5d,Z:%5d M X:%5d,Y:%5d,Z:%5d\r\n", accel_data.x, accel_data.y, accel_data.z, magn_data.x, magn_data.y, magn_data.z); } int main(void){ t.reset(); pc.baud(115200); // 200Hz x line of output data! green.write(1); red.write(1); blue.write(1); printf("\r\n\nFXOS8700Q Who Am I= %X\r\n", fxos.get_whoami()); fxos_int2.fall(&trigger_fxos_int2); // Iterrupt for active-low interrupt line from FXOS fxos.enable(); green.write(0); // ready-green on // Example data printing fxos.get_data(&accel_data, &magn_data); print_reading(); pc.printf("Started data collection. Accelerometer at max %dg.\r\n", fxos.get_accel_scale()); fxos.get_data(&accel_data, &magn_data); // clear interrupt from device fxos_int2_triggered = false; // un-trigger t.start(); // start timer and enter collection loop while(1){ if(fxos_int2_triggered) { fxos_int2_triggered = false; // un-trigger fxos.get_data(&accel_data, &magn_data); print_reading(); // outpouring of data !! } // Continuous polling of interrupt status is not efficient, but... wait_us(500); // 1/10th the period of the 200Hz sample rate } }