Pacemaker code Implementation for SFWRENG 3K04

Dependencies:   mbed Queue mbed-rtos FXOS8700Q

Fork of Pacemaker by Eric dollar

SWFRENG 3K04 Project to design, develop, and document a functional pacemaker.

The project uses the Freescale K64F Microcontroller and C++ mbed library.

Files at this revision

API Documentation at this revision

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

VVI.cpp Show annotated file Show diff for this revision Revisions of this file
VVI.h Show annotated file Show diff for this revision Revisions of this file
chamberData.cpp Show annotated file Show diff for this revision Revisions of this file
interface.cpp 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
pulse.cpp Show annotated file Show diff for this revision Revisions of this file
sense.cpp Show annotated file Show diff for this revision Revisions of this file
sense.h Show annotated file Show diff for this revision Revisions of this file
--- 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