yay!
Dependencies: TextLCD mbed-rtos mbed
Fork of 541_Pacermaker by
Revision 6:a1a3e73d90f3, committed 2015-12-02
- Comitter:
- sanjeet25
- Date:
- Wed Dec 02 09:42:45 2015 +0000
- Parent:
- 5:f21d7c8ef5bc
- Commit message:
- pacemaker_dynamicAVI
Changed in this revision
PacemakerLibrary.h | 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 |
diff -r f21d7c8ef5bc -r a1a3e73d90f3 PacemakerLibrary.h --- a/PacemakerLibrary.h Wed Dec 02 06:26:32 2015 +0000 +++ b/PacemakerLibrary.h Wed Dec 02 09:42:45 2015 +0000 @@ -23,6 +23,7 @@ DigitalOut vPace(p24); InterruptIn ASignal(p25); InterruptIn VSignal(p26); +DigitalOut Dynamic_AVI(p27); Serial pc(USBTX, USBRX); int32_t signal1 = 0x01; @@ -78,6 +79,9 @@ int URI; int PVAB; +int AVI_MAX=70; +int AVISTEP=1; + Mutex displayMutex; Mutex AMutex; Mutex VMutex;
diff -r f21d7c8ef5bc -r a1a3e73d90f3 main.cpp --- a/main.cpp Wed Dec 02 06:26:32 2015 +0000 +++ b/main.cpp Wed Dec 02 09:42:45 2015 +0000 @@ -3,72 +3,76 @@ TextLCD lcd(p15,p16,p17,p18,p19,p20); -void incrementHeartRate() { +int i=0; + +void incrementHeartRate() +{ heartRateMutex.lock(); heartRate++; heartRateMutex.unlock(); } -void setVSignal(bool state) { - VMutex.lock(); +void setVSignal(bool state) +{ + VMutex.lock(); waitVSignal = state; VMutex.unlock(); } -void setASignal(bool state) { - AMutex.lock(); +void setASignal(bool state) +{ + AMutex.lock(); waitASignal = state; - AMutex.unlock(); + AMutex.unlock(); } -void setTimeConstraint(int i) { +void setTimeConstraint(int i) +{ timeConstraintMutex.lock(); timeConstraint = i; - timeConstraintMutex.unlock(); + timeConstraintMutex.unlock(); } -void printToLCD() { +void printToLCD() +{ displayMutex.lock(); // pc.printf("%04d\r\n", avgHeartRate); // pc.printf("%02d\r\n", pacemakerIntervalInMs/1000); // pc.printf("%04d\r\n", (heartRateHeart*(60/sec))); - lcd.cls(); + lcd.cls(); lcd.locate(0,0); lcd.printf("Rate: %.2f BPM", avgHeartRate); lcd.locate(0,1); - switch(pacemakerMode) - { + switch(pacemakerMode) { default: - case NORMAL: - { + case NORMAL: { lcd.printf("NORMAL"); break; } - case EXERCISE: - { + case EXERCISE: { lcd.printf("EXERCISE"); break; } - case SLEEP: - { + case SLEEP: { lcd.printf("SLEEP (ZZZ)"); break; } - case MANUAL: - { + case MANUAL: { lcd.printf("MANUAL"); break; } - } + } displayMutex.unlock(); } -void println(const char *c) { +void println(const char *c) +{ pc.printf(c); pc.printf("\r\n"); } -void switchToNormal() { +void switchToNormal() +{ LRI = normalModeLRI; AVI = normalModeAVI; PVARP = normalModePVARP; @@ -77,7 +81,8 @@ PVAB = normalModePVAB; } -void switchToExercise() { +void switchToExercise() +{ LRI = exerciseModeLRI; AVI = exerciseModeAVI; PVARP = exerciseModePVARP; @@ -86,7 +91,8 @@ PVAB = exerciseModePVAB; } -void switchToSleep() { +void switchToSleep() +{ LRI = sleepModeLRI; AVI = sleepModeAVI; PVARP = sleepModePVARP; @@ -97,71 +103,60 @@ void changeMode() { - switch(pacemakerMode) - { + switch(pacemakerMode) { default: - case NORMAL: - { + case NORMAL: { switchToNormal(); break; } - case EXERCISE: - { + case EXERCISE: { switchToExercise(); break; } - case SLEEP: - { + case SLEEP: { switchToSleep(); break; } - case MANUAL: - { + case MANUAL: { break; } - } + } changePacemakerMode=false; } void pacemakerModeSwitch(const void *args) { - while(1) - { + while(1) { Thread::signal_wait(signal3); - if(changePacemakerMode) - { + if(changePacemakerMode) { changeMode(); } } } - + void aSense() { - if(waitASignal) - { + if(waitASignal) { asenseLED=1; wait(0.001); // pc.printf("ASense Received at %d ms\r\n", globalTimer.read_ms()); - asenseLED=0; - if(changePacemakerMode) - { + asenseLED=0; + if(changePacemakerMode) { (*P_PacemakerModeSwitch).signal_set(signal3); } ASenseReceived=true; (*P_PacemakerReceive).signal_set(signal4); - } + } } void vSense() { - if(waitVSignal) - { + if(waitVSignal) { vsenseLED=1; // pc.printf("VSense Received at %d ms\r\n", globalTimer.read_ms()); wait(0.001); vsenseLED=0; - if(changePacemakerMode) - { + if(changePacemakerMode) { (*P_PacemakerModeSwitch).signal_set(signal3); } waitVPace=false; @@ -172,42 +167,42 @@ void timeConstraintTimeout(const void *args) { - if(timeConstraint==AVI_const) - { + if(timeConstraint==AVI_const) { //trigger vpace - if(waitVPace) - { + if(waitVPace) { + APace=false; (*P_PacemakerSend).signal_set(signal1); - } - else - { + AVI+=AVISTEP; + Dynamic_AVI=1; + Thread::wait(1); + Dynamic_AVI=0; + + if(AVI==AVI_MAX) { + + AVI=60; + + } + pc.printf("AVI : %u",AVI); + } else { waitVPace=true; } - } - else if(timeConstraint==PVAB_const) - { + } else if(timeConstraint==PVAB_const) { setVSignal(true); setTimeConstraint(AVI_const); TimeConstTimerOn=true; TimeConstTimer->start(AVI-PVAB); - } - else if(timeConstraint==VRP_const) - { + } else if(timeConstraint==VRP_const) { setVSignal(true); setTimeConstraint(PVARP_const);; TimeConstTimerOn=true; TimeConstTimer->start(PVARP-VRP); - } - else if(timeConstraint==PVARP_const) - { + } else if(timeConstraint==PVARP_const) { setASignal(true); setTimeConstraint(LRI_const); TimeConstTimerOn=true; TimeConstTimer->start(LRI-PVARP-AVI); - } - else if(timeConstraint==LRI_const) - { + } else if(timeConstraint==LRI_const) { //trigger apace APace=true; (*P_PacemakerSend).signal_set(signal1); @@ -216,38 +211,30 @@ void atrialEventTimeout(const void *args) { - if(VPaceNotReceived || waitVPace) - { + if(VPaceNotReceived || waitVPace) { APace=false; VPaceNotReceived=false; (*P_PacemakerSend).signal_set(signal1); - } - else - { + } else { waitVPace=true; } -} +} void pacemakerReceive(const void *args) { - while(1) - { + while(1) { Thread::signal_wait(signal4); - if(TimeConstTimerOn) - { + if(TimeConstTimerOn) { TimeConstTimer->stop(); TimeConstTimerOn=false; } - if(ASenseReceived) - { + if(ASenseReceived) { setASignal(false); setVSignal(true); TimeConstTimerOn=true; setTimeConstraint(AVI_const); TimeConstTimer->start(AVI); - } - else - { + } else { incrementHeartRate(); setVSignal(false); setASignal(false); @@ -259,22 +246,19 @@ } } } - + void pacemakerSend(const void *args) { - while(1) - { + while(1) { Thread::signal_wait(signal1); - if(APace) - { + if(APace) { pc.printf("APace Sent at %d ms\r\n", globalTimer.read_ms()); apaceLED=1; aPace=1; Thread::wait(1); aPace=0; apaceLED=0; - if(changePacemakerMode) - { + if(changePacemakerMode) { changeMode(); } @@ -285,17 +269,14 @@ TimeConstTimerOn=true; TimeConstTimer->start(PVAB); } - } - else - { + } else { pc.printf("VPace Sent at %d ms\r\n", globalTimer.read_ms()); vpaceLED=1; vPace=1; Thread::wait(1); vPace=0; vpaceLED=0; - if(changePacemakerMode) - { + if(changePacemakerMode) { changeMode(); } @@ -314,14 +295,15 @@ } } -void readInt() { +void readInt() +{ char c = pc.getc(); int input = c-48; c = pc.getc(); while (c != '\r') { input *= 10; input += c-48; - c = pc.getc(); + c = pc.getc(); } if (input >= 10 && input <= 90) { @@ -331,113 +313,90 @@ heartRateMutex.lock(); heartRate=0; heartRateMutex.unlock(); - pc.printf("Obs Int Changed: %d\r\n", pacemakerInterval); + pc.printf("Obs Int Changed: %d\r\n", pacemakerInterval); } else { - pc.printf("Bad Obs Int: %d\r\n", input); + pc.printf("Bad Obs Int: %d\r\n", input); } } void pacemakerKeyboard(const void *args) { - while(1) - { + while(1) { Thread::signal_wait(signal2); - if (char_read == 'a' && pacemakerMode == MANUAL) - { + if (char_read == 'a' && pacemakerMode == MANUAL) { APace=true; (*P_PacemakerSend).signal_set(signal1); - } - else if (char_read == 'v' && pacemakerMode == MANUAL) - { - if(waitVPace) - { + } else if (char_read == 'v' && pacemakerMode == MANUAL) { + if(waitVPace) { APace=false; VPaceNotReceived=false; (*P_PacemakerSend).signal_set(signal1); - } - else - { + } else { VPaceNotReceived=true; } - } - else if (char_read == 'n' && pacemakerMode != NORMAL && !changePacemakerMode) - { + } else if (char_read == 'n' && pacemakerMode != NORMAL && !changePacemakerMode) { if (pacemakerMode == MANUAL) { // restart A/V timers TimeConstTimerOn=true; - TimeConstTimer->start(VRP); + TimeConstTimer->start(VRP); } pacemakerMode=NORMAL; changePacemakerMode=true; - } - else if (char_read == 'e' && pacemakerMode != EXERCISE && !changePacemakerMode) - { + } else if (char_read == 'e' && pacemakerMode != EXERCISE && !changePacemakerMode) { if (pacemakerMode == MANUAL) { // restart A/V timers - TimeConstTimer->start(VRP); + TimeConstTimer->start(VRP); } pacemakerMode=EXERCISE; changePacemakerMode=true; - } - else if (char_read == 's' && pacemakerMode != SLEEP && !changePacemakerMode) - { + } else if (char_read == 's' && pacemakerMode != SLEEP && !changePacemakerMode) { if (pacemakerMode == MANUAL) { // restart A/V timers - TimeConstTimer->start(VRP); + TimeConstTimer->start(VRP); } pacemakerMode=SLEEP; changePacemakerMode=true; - } - else if (char_read == 'm' && pacemakerMode != MANUAL && !changePacemakerMode) - { + } else if (char_read == 'm' && pacemakerMode != MANUAL && !changePacemakerMode) { pacemakerMode=MANUAL; changePacemakerMode=true; - } - else if (char_read == 'o' && !changePacemakerMode) - { + } else if (char_read == 'o' && !changePacemakerMode) { // blocks, reading characters, until "return" is pressed observationMutex.lock(); readInt(); observationMutex.unlock(); - } + } } } void pacemakerAlarm(const void *args) { - while(1) - { + while(1) { Thread::signal_wait(signal5); - while(avgHeartRate > (60000/URI)) - { + while(avgHeartRate > (60000/URI)) { buzzer=1; Thread::wait(5); buzzer=0; Thread::wait(5); - if(!alarmPrinted) - { + if(!alarmPrinted) { displayMutex.lock(); println("!!!***Alarm High***!!!"); displayMutex.unlock(); alarmPrinted=true; } } - while(avgHeartRate < (60000/LRI)) - { + while(avgHeartRate < (60000/LRI)) { buzzer=1; Thread::wait(10); buzzer=0; Thread::wait(10); - if(!alarmPrinted) - { + if(!alarmPrinted) { displayMutex.lock(); println("!!!***Alarm Low***!!!"); displayMutex.unlock(); alarmPrinted=true; } } - if(alarmPrinted) - { + if(alarmPrinted) { alarmPrinted=false; // resetDisplay(); } @@ -447,9 +406,8 @@ void display(const void *args) { displayTimer.start(); - - while(1) - { + + while(1) { observationMutex.lock(); if (displayTimer.read_ms() >= pacemakerIntervalInMs) { displayTimer.reset(); @@ -464,53 +422,52 @@ printToLCD(); observationMutex.unlock(); Thread::wait(100); - } + } } } -int main() -{ +int main() +{ setVSignal(true); setVSignal(true); switchToNormal(); - + ASignal.rise(&aSense); VSignal.rise(&vSense); - + TimeConstTimer = new RtosTimer(timeConstraintTimeout, osTimerOnce, (void*)0); AtrialEventTimer = new RtosTimer(atrialEventTimeout, osTimerOnce, (void *)0); - + Thread PacemakerSend(pacemakerSend); P_PacemakerSend=&PacemakerSend; PacemakerSend.set_priority(osPriorityHigh); - + Thread PacemakerReceive(pacemakerReceive); P_PacemakerReceive=&PacemakerReceive; PacemakerReceive.set_priority(osPriorityAboveNormal); - + Thread PacemakerModeSwitch(pacemakerModeSwitch); P_PacemakerModeSwitch=&PacemakerModeSwitch; PacemakerModeSwitch.set_priority(osPriorityAboveNormal); - + Thread PacemakerKeyboard(pacemakerKeyboard); P_PacemakerKeyboard=&PacemakerKeyboard; PacemakerKeyboard.set_priority(osPriorityRealtime); - + Thread Display(display); Display.set_priority(osPriorityAboveNormal); - + Thread PacemakerAlarm(pacemakerAlarm); P_PacemakerAlarm = &PacemakerAlarm; PacemakerAlarm.set_priority(osPriorityAboveNormal); - + setTimeConstraint(VRP_const); TimeConstTimer->start(VRP); - + globalTimer.start(); - + while(1) { - if(pc.readable()) - { + if(pc.readable()) { char_read = pc.getc(); (*P_PacemakerKeyboard).signal_set(signal2); }