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

Dependencies:   MMA8451Q mbed

Files at this revision

API Documentation at this revision

Comitter:
DWeng
Date:
Tue Jul 18 18:35:27 2017 +0000
Commit message:
initial commit

Changed in this revision

MMA8451Q.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA8451Q.lib	Tue Jul 18 18:35:27 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/DWeng/code/MMA8451Q/#9c229882cd2b
--- /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]);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Jul 18 18:35:27 2017 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/b0220dba8be7
\ No newline at end of file