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.
motion.cpp
- Committer:
- kieftea
- Date:
- 2016-11-25
- Revision:
- 1:8f545f45d899
- Parent:
- 0:00669618559e
- Child:
- 2:4fb5a8d15f9c
File content as of revision 1:8f545f45d899:
#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;
}
float getAcceleration(){
float xAcc, yAcc, zAcc;
acc.getX(&xAcc);
acc.getY(&yAcc);
acc.getZ(&zAcc);
float magtd = xAcc*xAcc + yAcc*yAcc + zAcc*zAcc;
return magtd;
}
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);
}
}