Output onboard accelerometer data of FRDM-KL25Z board on serial.

Dependencies:   MMA8451Q mbed

Revision:
0:effa4c81f363
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Jul 18 18:35:27 2017 +0000
@@ -0,0 +1,84 @@
+/**
+ * +----------------------+
+ * | Accelerometer Output |
+ * +----------------------+
+ *
+ * Sample accelerometer at x Hz and output data onto serial port. Used for 
+ * UC Merced data acquisition and filtering project.
+ *
+ * Leverages Antonio Quevedo's MMA8451Q library for interfacing with the 
+ * accelerometer over I2C, with slight modification to configuration.
+ *
+ * Acceleration should be sampled no faster than 800Hz, but we will output at
+ * 100Hz. -- ADD ODR MODIFIER
+ *
+ * Output Data Packet:
+ * [ start_byte, acc_xH, acc_xL, acc_yH, acc_yL, acc_zH, acc_zL, checksum1, checksum2, end_byte ]
+ *
+ * Output all axes, but really only interested in y and z axes. 
+ *
+ * Darrel Weng
+ *
+ */
+ 
+#include "mbed.h"
+#include "MMA8451Q.h"
+
+#include <string.h>
+
+int period     = 8; // data reads before output; set at 50Sps
+int acc_flag   = 0; // flag to super loop to read data
+int flag_count = 0; // counter for how many times data has been read
+
+void
+mma8451q_int()
+{
+    acc_flag = 1;   
+}
+
+int main() 
+{
+    /* objects */
+    DigitalOut  laser(PTE2);
+    Serial      pc(USBTX, USBRX);
+    //Timer       timer;
+    MMA8451Q    acc(PTE25, PTE24);
+    InterruptIn accINT1(PTA14);
+    
+    /* init */
+    laser = 0;       // turn laser on; pin is active sinking
+    pc.baud(115200); // high baudrate for lower latency comm
+    accINT1.fall(&mma8451q_int);
+    
+    /* local variables */
+    int16_t  acc_data[4]; // 4th entry contains checksum
+    uint8_t  output[10]; 
+    
+    /* Start and Stop delimiting Bytes */
+    output[0] = 0xBE;
+    output[9] = 0xEF;
+    
+    while(1) 
+    {
+        // if data ready, read data
+        if (acc_flag)
+        {
+            acc_flag = 0;
+            acc.getAccAllAxis(acc_data);
+            for (int i=0;i<3;i++)
+                acc_data[i] /= 4;
+            flag_count++;
+        }
+        // if time to output
+        if (flag_count >= period)
+        {
+            flag_count = 0;
+            //pc.printf("%d %d %d \r\n", acc_data[0], acc_data[1], acc_data[2]);
+            // Build packet
+            acc_data[3] = acc_data[0] + acc_data[1] - acc_data[2];
+            memcpy(output+1, acc_data, 8);
+            for (int i=0; i<10; i++)
+                pc.putc(output[i]);
+        }
+    }
+}