Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: motion.cpp
- Revision:
- 0:00669618559e
- Child:
- 1:8f545f45d899
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/motion.cpp Thu Nov 24 16:37:00 2016 +0000
@@ -0,0 +1,62 @@
+#include "rtos.h"
+#include "pinmap.h"
+#include "FXOS8700Q.h"
+
+
+FXOS8700Q_acc acc(PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1);
+
+/* Constants and Declares */
+int numCount;
+int const MAX_NUM_COUNTS = 3;
+int const TIMING_PERIOD = 20; // Sensor polling interval
+
+uint8_t motion_exceeded_threshold = 0;
+
+void initialize_motion () {
+ acc.enable();
+}
+
+bool isMotionThresholdExceeded () {
+ return motion_exceeded_threshold;
+}
+
+void resetMotionDetection () {
+ motion_exceeded_threshold = 0;
+}
+
+/**** Function: a_count
+ * return: void
+ * parameters: none
+ * A function called if motion detection interrupt flag is set. Maintains
+ * a global counter and sets a timer to keep track of number of flags within
+ * timing limit.
+ */
+void a_count(void) {
+ /* step 1 increment the counter */
+ numCount++;
+
+
+ if (numCount >= MAX_NUM_COUNTS) {
+ rled = !rled; // toggle LEDs to show acceleration threshold reached
+ gled = !gled; // toggle LEDS to show acceleration threshold reached
+
+ motion_exceeded_threshold = 1;
+ }
+}
+
+void motion_thread () {
+ while(true) {
+
+ float xAcc, yAcc, zAcc;
+ acc.getX(&xAcc);
+ acc.getY(&yAcc);
+ acc.getZ(&zAcc);
+ float magtd = xAcc*xAcc + yAcc*yAcc + zAcc*zAcc;
+
+ if (magtd > 3.0f) { // Greater than (1.5G of Accel.)^2
+ a_count(); // increment acceleration event counter
+ }
+
+ Thread::wait(TIMING_PERIOD);
+ }
+}
\ No newline at end of file