
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.
Revision 34:701503855d52, committed 2016-12-13
- Comitter:
- noahzwiep
- Date:
- Tue Dec 13 03:46:34 2016 +0000
- Parent:
- 33:686a1a0c690f
- Child:
- 35:fa164704f0ca
- Commit message:
- Added sense module, only thing left is figuring out pins
Changed in this revision
--- a/VVI.cpp Mon Dec 12 03:31:55 2016 +0000 +++ b/VVI.cpp Tue Dec 13 03:46:34 2016 +0000 @@ -5,21 +5,29 @@ #include "chamberData.h" #include "pulse.h" #include "VVI.h" +#include "sense.h" DigitalOut green(LED_GREEN); -pulse* myChamber; +pulse* chamberPulse; +chamberData* myChamber; +sense* mySense; -void vvi_set_chamber(pulse* c){ - myChamber = c; +void vvi_set_chamber(pulse* c, chamberData* d, sense* e){ + chamberPulse = c; + myChamber = d; + mySense = e; } void start_VVI(){ while(true){ green = !green; - myChamber->startPulse(); - Thread::wait(200); + bool sensed = mySense->returnedSense(); + if(!sensed){ + chamberPulse->startPulse(); + } + Thread::wait(myChamber->getRP()); } }
--- a/VVI.h Mon Dec 12 03:31:55 2016 +0000 +++ b/VVI.h Tue Dec 13 03:46:34 2016 +0000 @@ -1,7 +1,10 @@ #pragma once #include "mbed.h" +#include "sense.h" +#include "pulse.h" +#include "chamberData.h" -void vvi_set_chamber(pulse* c); +void vvi_set_chamber(pulse* c,chamberData* d, sense* e); void start_VVI(); \ No newline at end of file
--- a/chamberData.cpp Mon Dec 12 03:31:55 2016 +0000 +++ b/chamberData.cpp Tue Dec 13 03:46:34 2016 +0000 @@ -6,12 +6,19 @@ } chamberData::chamberData(char chamberType){ - p_PaceAmp = 3.75; //decimal value between 0 and 1 which is a factor applied to 3.3V output. ie. 0.5 will give 0.5(3.3) V of output - p_PaceWidth = 0.4; - p_RP = 0; - p_Sensitivity = 0; mychamber = chamberType; - + if(mychamber == 'v'){ + p_PaceAmp = 3.75; //decimal value between 0 and 1 which is a factor applied to 3.3V output. ie. 0.5 will give 0.5(3.3) V of output + p_PaceWidth = 0.4; + p_RP = 320; + p_Sensitivity = 2.5; + } + else{ + p_PaceAmp = 0.5; + p_PaceWidth = 0.05; + p_RP = 250; + p_Sensitivity = 0.75; + } } char chamberData::getChamberType(){ return mychamber; @@ -85,7 +92,7 @@ int chamberData::chngSensitivity(double sensitivity){ if(mychamber == 'a'){ - if(sensitivity!=0.05 || sensitivity!= 0.25 || sensitivity!=0.75){ + if(sensitivity <0.05 || sensitivity > 0.75){ return 0; }else{ p_Sensitivity = sensitivity;
--- a/interface.cpp Mon Dec 12 03:31:55 2016 +0000 +++ b/interface.cpp Tue Dec 13 03:46:34 2016 +0000 @@ -96,6 +96,10 @@ case 0xA:{ value = getInput(); atrData->chngSensitivity(atof(value)/100); + double pw = atrData->getSensitivity(); + if(pw < 0.5){ + rled = !rled; + } break; } case 0xB:{ @@ -140,7 +144,7 @@ } double myInt = (myDataStruct->getData()); pc->printf("%f\n", myInt); - rled = !rled; + //rled = !rled; Thread::wait(4); } break;
--- a/main.cpp Mon Dec 12 03:31:55 2016 +0000 +++ b/main.cpp Tue Dec 13 03:46:34 2016 +0000 @@ -17,6 +17,7 @@ chamberData* ventricle = new chamberData('v'); pulse* ventPulse = new pulse(ventricle,io); pulse* atrPulse = new pulse(atrium,io); + sense* isSense = new sense(generalData); // Thread motionThread(osPriorityNormal); // initialize_motion (); @@ -24,7 +25,7 @@ // motionThread.start(motion_thread); Thread vviThread(osPriorityNormal); - vvi_set_chamber(atrPulse); + vvi_set_chamber(atrPulse,atrium,isSense); vviThread.start(start_VVI); // Thread egramThread(osPriorityNormal); @@ -38,6 +39,8 @@ delete ventricle; //code never reaches here, since we're stuck in the while loops of the pacing, user interface, etc. delete atrium; delete ventPulse; + delete atrPulse; + delete isSense; delete io; return 0;
--- a/pulse.cpp Mon Dec 12 03:31:55 2016 +0000 +++ b/pulse.cpp Tue Dec 13 03:46:34 2016 +0000 @@ -113,7 +113,7 @@ wait_ms(10); /* Stage 4: Ground OFF */ - atr_grnd_ctrl .write(0); + atr_grnd_ctrl.write(0); vent_grnd_ctrl.write(0); } @@ -156,7 +156,7 @@ vent_pace_ctrl.write(1); // Pace Duration - Thread::wait(pulse_width_us); + wait(pulse_width_us); // Shut off Pace vent_pace_ctrl.write(0); @@ -168,10 +168,10 @@ atr_pace_prime(); // Begin Pace Event Output - atr_pace_ctrl.write(myChamber->getPaceAmp()); + atr_pace_ctrl.write(1); // Pace Duration - Thread::wait(pulse_width_us); + wait(pulse_width_us); // Shut off Pace atr_pace_ctrl.write(0); @@ -184,7 +184,7 @@ pulse::pace_charge_shutdown(); char a = myChamber->getChamberType(); if(a == 'a'){ - pulse::pace_vent(myChamber->getPaceWidth()); + pulse::pace_atr(myChamber->getPaceWidth()); } else{ pulse::pace_vent(myChamber->getPaceWidth());
--- a/sense.cpp Mon Dec 12 03:31:55 2016 +0000 +++ b/sense.cpp Tue Dec 13 03:46:34 2016 +0000 @@ -1,8 +1,39 @@ #pragma once #include "mbed.h" #include "sense.h" +#include "VVI.h" -sense::sense(){ +sense::sense(genData* a){ + myGenData = a; + isSensed = false; } -sense::~sense(){}; \ No newline at end of file +sense::~sense(){}; + +bool sense::returnedSense(){ + timeout = false; + mbed::Timer t; + t.start(); + while(!timeout){ + //Here we check if we should still be sensing or if we should give up + if(myGenData->getHyst()){ //This is the case where hysteresis is enabled, we wait the lrl plus hysteresis + if(t.read_ms() >= (myGenData->getLRL()+myGenData->getHystRL())){ + timeout = true; + } + } + else{ //Here hysteresis isn't enabled, so its just waiting the LRL. + if(t.read_ms() >= myGenData->getLRL()){ + timeout = true; + } + } + //Here we have to check the pin and see if it is above threshold. +/* if(PINNAME.read() == 1){ + isSensed = true; + timeout = true; + }*/ + } + t.stop(); + return isSensed; +} + + \ No newline at end of file
--- a/sense.h Mon Dec 12 03:31:55 2016 +0000 +++ b/sense.h Tue Dec 13 03:46:34 2016 +0000 @@ -1,14 +1,17 @@ #pragma once #include "mbed.h" +#include "genData.h" class sense{ public: - sense(); + sense(genData*); ~sense(); void checkHrt(); void getPulse(); + bool returnedSense(); private: - bool isSensed(); - int chamber; + bool isSensed; + bool timeout; + genData* myGenData; }; \ No newline at end of file