![](/media/cache/profiles/4b602c3f2f6b86b43ad406fd438e09a8.jpg.50x50_q85.jpg)
Final
Dependencies: TextLCD UPennEMBS keypad mbed-rtos mbed
Revision 0:de6d31e19fa5, committed 2014-12-04
- Comitter:
- jatinsha
- Date:
- Thu Dec 04 10:46:07 2014 +0000
- Commit message:
- Final
Changed in this revision
diff -r 000000000000 -r de6d31e19fa5 TextLCD.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Thu Dec 04 10:46:07 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/TextLCD/#308d188a2d3a
diff -r 000000000000 -r de6d31e19fa5 UPennEMBS.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UPennEMBS.lib Thu Dec 04 10:46:07 2014 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/teams/Samarth-Shah/code/UPennEMBS/#763945466b4e
diff -r 000000000000 -r de6d31e19fa5 keypad.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/keypad.lib Thu Dec 04 10:46:07 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/yoonghm/code/keypad/#da060f8c03e8
diff -r 000000000000 -r de6d31e19fa5 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Dec 04 10:46:07 2014 +0000 @@ -0,0 +1,294 @@ +/* + CIS541: Embedded Systems for Life Critical Applications + Project: Pacemaker modelling +*/ + +/* Header files */ +#include "mbed.h" +#include "rtos.h" +#include "CardiacPacemaker.h" +#include <ctype.h> +#include <string.h> +#include <stdlib.h> + +/* Global variables */ + +// Mode-Threads pointers +Thread *threadListening; +Thread *threadLogicTiming; +Thread *threadPacing; +Thread *threadKeyboard; + +Timer timerPrimary; +Timer timerSecondary; +// keypad state +// Define your own keypad values + + +void ThreadListeningPace(void const *args) +{ + while(1) + { + SenseMutex.lock(); + if(Asense==1) + { + ReceivedASense(); + flagA = 1; + threadLogicTiming->signal_set(0x1); + } + if(Vsense==1) + { + ReceivedVSense(); + flagV = 1; + threadLogicTiming->signal_set(0x1); + } + SenseMutex.unlock(); + } +} + +void ThreadLogicTiming(void const *args) +{ + while(1) + { + //flagV==0 && timerPrimary.read_ms() >= LRI + while(timerPrimary.read_ms() < PVARP) + { + // Post Ventricular Atrium Refractory Period + // Ignore Asense or Vsense here + //pc.puts("|==----(PVARP)|-----------------------------(LRI-AVI)|\n"); + //pc.puts("PVAB period\n"); + + if(flagA == 1) + { + pc.puts("Early: Reject\n"); + flagA = 0; + } + + } + while(timerPrimary.read_ms() >= PVARP && timerPrimary.read_ms() < (LRI-AVI)) + { + // Normal Asense period + //pc.puts("|======(PVARP)|=====----------(tAs+AVI)|----(LRI-AVI)|\n"); + //pc.puts("Normal Asense period\n"); + if(flagA == 1) + { + // Acknowledge reception of Asense + pc.puts("Normal:Asense\n"); + SendAPace(); + flag1 = 1; + flagA = 0; + //pc.puts("|======(PVARP)|=====(As)=-------(tAs+AVI)|----(LRI-AVI)\n"); + break; + } + } + if(timerPrimary.read_ms() > (LRI-AVI) ) + { + // Asense period exhausted pacemaker needs to Apace the heart + if(flag1==0) + { + SendAPace(); //Forced Atrium Pulse reffering to the below if loop + } + else + { + flag1 = 0; + } + if(flagA == 1) + { + pc.puts("Late: Rejected\n"); + flagA = 0; //just to cleanup for next cycle + } + //pc.puts("|======(PVARP)|================================(Ap)(LRI-AVI)|\n"); + // look for Vsense + while(timerPrimary.read_ms() < (LRI-AVI)+PVAB) + { + // This is Post Atrium Ventricular Blanking period + // No Vsense should be here + // Ignore any V here + } + while(timerPrimary.read_ms() >= (LRI-AVI)+PVAB && timerPrimary.read_ms() < (LRI-AVI)+VSP) + { + // This is Ventricular _______ period + // Vsense here would be prematuare and needs to be sent at the end of the period as mature + // Receive and matuare any V here + if(flagV == 1) + { + pc.puts("Unmatured:Converted into matuared\n"); + //ReceivedVSense(); //pre-mature + while(timerPrimary.read_ms() < (LRI-AVI)+VSP); //maturing it + flagV = 0; + SendVPace(); //matuared + //LEDTest = 0; + //pc.puts("|======(PVARP)|================================(Ap)(LRI-AVI)|===(Vsp)===(Vpm)(tVSP)\n"); + } + } + while(timerPrimary.read_ms() >= (LRI-AVI)+VSP && timerPrimary.read_ms() < LRI) + { + // This is normal period for Vsense + // Vsense here would be matuare + if(flagV == 1) + { + pc.puts("Matuared:\n"); + ReceivedVSense(); //mature + SendVPace(); + flagV = 0; + flag2=1; + //pc.puts("|======(PVARP)|================================(Ap)(LRI-AVI)|============(Vsm)(tVSP)\n"); + break; + } + } + if(timerPrimary.read_ms() > LRI) + { + // Waiting time for Vsense exhausted + // Pacemaker needs to generate Vpace now + // send Vpace and reset timers + if(flag2==0) + { + SendVPace(); //Forced ventricle Pulse reffering to the below if loop + } + else + { + flag2 = 0; + } + //pc.puts("|======(PVARP)|================================(Ap)(LRI-AVI)|=======================(Vp)(LRI)\n"); + timerPrimary.reset(); // reset for next beat interval + + } + else if(timerPrimary.read_ms() >= (LRI-AVI)+VSP && timerPrimary.read_ms() < LRI) + { + // matuare Vsense was received + // inhibit sending any Vpace + // Reset timers + + timerPrimary.reset(); // reset for next beat interval + } + + } + else if(timerPrimary.read_ms() < (LRI-AVI) ) + { + // Asense observed within the normal period pacemaker does nothing + + // now look for VSense witin next AVI + timerSecondary.start(); + while(timerSecondary.read_ms() < AVI) + { + if(flagV == 1) + { + pc.puts("Natural Asense, Natural Vsense:\n"); + ReceivedVSense(); + SendVPace(); + flag2=1; + flagV = 0; + //pc.puts("|======(PVARP)|=====(As)==(Vs)|---(tAs+AVI)|----(LRI-AVI)\n"); + break; + } + } + if(timerSecondary.read_ms() >= AVI) + { + while(timerPrimary.read_ms() < URI); // wait till URI to send Vpace + if(flag2==0) + { + SendVPace(); //Forced Atrium Pulse reffering to the below if loop + } + else + { + flag2 = 0; + } + //pc.puts("|======(PVARP)|=====(As)==================(Vp)(URI)|----(LRI-AVI)\n"); + } + else if(timerSecondary.read_ms() < AVI) //still less than AVI + { + // This means Vsense is already observed + // both A and V have been managed successfully + // Reset timers before reinitiating the process + timerPrimary.reset(); + timerSecondary.stop(); + timerSecondary.reset(); + } + + } + + }//while(1) ends here +} + + + +void SetSleepMode() +{ + VRP = 200; + AVI = 200; + PVARP = 500; + VSP = 100; + PVAB = 100; + LRI = 2000; + URI = 1000; + pc.puts("\nSleep Mode."); +} + +void SetExerciseMode() +{ + VRP = 200; + AVI = 200; + PVARP = 500; + VSP = 100; + PVAB = 100; + LRI = 600; + URI = 343; + pc.puts("\nExercise Mode."); +} + +void SetNormalMode() +{ + VRP = 200; + AVI = 200; + PVARP = 500; + VSP = 100; + PVAB = 100; + LRI = 1500; + URI = 600; + pc.puts("\nNormal Mode."); +} + +void SetObservationMode() +{ + pc.puts("\nEnter new observation Time (in sec): "); + pc.puts("\nPress 1 for 10 sec "); + pc.puts("\nPress 2 for 20 sec "); + pc.puts("\nPress 3 for 30 sec "); + +} + +void ThreadKeyboard(void const *args) +{ + char key; + while(1) + { + if(pc.readable()) + { + key = pc.getc(); + pc.putc(key); + + switch(key){ + case 's': SetSleepMode(); break; + case 'x': SetExerciseMode(); break; + case 'n': SetNormalMode(); break; + case 'o': SetObservationMode(); break; + case '1': obsPeriod=10000; pc.puts("\nObsPeriod set to 10sec"); break; + case '2': obsPeriod=20000; pc.puts("\nObsPeriod set to 20sec"); break; + case '3': obsPeriod=30000; pc.puts("\nObsPeriod set to 30sec"); break; + + } + } + } +} + + +int main(void) +{ + setbuf(stdout,NULL); + threadListening = new Thread(ThreadListeningPace); + threadLogicTiming = new Thread(ThreadLogicTiming); + threadKeyboard = new Thread(ThreadKeyboard); + + timerPrimary.start(); +} + \ No newline at end of file
diff -r 000000000000 -r de6d31e19fa5 mbed-rtos.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Thu Dec 04 10:46:07 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#631c0f1008c3
diff -r 000000000000 -r de6d31e19fa5 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Dec 04 10:46:07 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/4fc01daae5a5 \ No newline at end of file