Pacemaker code Implementation for SFWRENG 3K04
Dependencies: mbed Queue mbed-rtos FXOS8700Q
Fork of Pacemaker by
SWFRENG 3K04 Project to design, develop, and document a functional pacemaker.
The project uses the Freescale K64F Microcontroller and C++ mbed library.
motion.cpp
- Committer:
- trane3
- Date:
- 2016-11-24
- Revision:
- 19:d58e1e1a9a24
- Child:
- 21:fc6c33206152
File content as of revision 19:d58e1e1a9a24:
#include "rtos.h" #include "FXOS8700Q.h" #include "mbed.h" #include "hardware.h" #include "pulse.h" #include "chamberData.h" FXOS8700Q_acc acc(PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); DigitalOut red(LED_RED); /* Constants and Declares */ int numCount; chamberData* ventChamber; chamberData* atrChamber; 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(); } void motion_set_chamber(int i, chamberData* c){ if (i == 0) ventChamber = c; } 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) { ventChamber->chngPaceWidth(1.00); red = !red; // 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); } }