
here it is
Dependencies: TextLCD mbed-rtos mbed
Fork of 541-pacemaker by
Diff: main.cpp
- Revision:
- 4:f887d8169f83
- Parent:
- 3:77efff091ef1
--- a/main.cpp Fri Dec 09 06:50:30 2016 +0000 +++ b/main.cpp Fri Dec 09 11:05:21 2016 +0000 @@ -36,7 +36,7 @@ double URI = 700; double VRP = 200; // V noise interval double ARP = 50; // A noise interval -double AVI = 500; // A-V max interval +double AVI = 150; // A-V max interval double PVARP = 300; // V-A max interval double ratio; int wait_period = 10; // 3a requirement @@ -175,27 +175,23 @@ void a_pace(void const*) { Apace = 1; + Thread::wait(1); aClock.reset(); -// apace_timer->stop(); + arpClock.reset(); Apace = 0; osSignalSet(signalTid, 0x3); - toggleLed(3); } // Timer-driven function to pace the ventrical void v_pace(void const*) { - Vpace = 1; - - vClock.reset(); -// vpace_timer->start(LRI); -// apace_timer->start(LRI-AVI); - Vpace = 0; - hr_mutex.lock(); osSignalSet(signalTid, 0x4); heart_beats++; + vClock.reset(); + aClock.reset(); + arpClock.reset(); hr_mutex.unlock(); toggleLed(4); @@ -210,66 +206,57 @@ vClock.start(); aClock.start(); arpClock.start(); -// if(!mm_flag) { -// vpace_timer->start(LRI); -// apace_timer->start(LRI-AVI); -// } -// vpace_timer2->start(AVI); + while(1) { while (!pFlag1) { osEvent ext_signal = osSignalWait(0, osWaitForever); int evt = ext_signal.value.signals; - //lcd.printf("%d",evt); // 4(Vpace), 3(Apace), 2(Vsignal), 1(Asignal) - if (evt == 0x1 && vClock.read_ms() >= PVARP) { //aSense osSignalSet(senseTid, 0x1); aClock.reset(); arpClock.reset(); pFlag1 = 1; - } else if(evt == 0x2 && vClock.read_ms() >= VRP) { //vSignal + } else if(evt == 0x2 && vClock.read_ms() >= VRP) { //vSense + pc.printf("%d VSense\n", vClock.read_ms()); + hr_mutex.lock(); osSignalSet(senseTid, 0x2); + heart_beats++; vClock.reset(); -// if(!mm_flag) { -// vpace_timer->start(LRI); -// apace_timer->start(LRI-AVI); -// } + aClock.reset(); + arpClock.reset(); + hr_mutex.unlock(); + pFlag1 = 1; + } else if (evt == 0x3) { //aPace pFlag1 = 1; } } pFlag1 = 0; - lcd.cls(); - lcd.printf("PS1"); while(!pFlag2) { osEvent ext_signal = osSignalWait(0, osWaitForever); int evt = ext_signal.value.signals; - //lcd.printf("%d",evt); - - if (evt == 0x1 && arpClock.read_ms() >= ARP) { //aSignal + if (evt == 0x1 && arpClock.read_ms() >= ARP) { //aSense osSignalSet(senseTid, 0x1); arpClock.reset(); -// aClock.reset(); + } else if(evt == 0x2) { //vSense hr_mutex.lock(); osSignalSet(senseTid, 0x2); heart_beats++; vClock.reset(); + aClock.reset(); + arpClock.reset(); hr_mutex.unlock(); -// if(!mm_flag) { -// vpace_timer->start(LRI); -// apace_timer->start(LRI-AVI); -// } pFlag2 = 1; } else if (evt == 0x4) { //vPace + pc.printf("%d VPace\n", vClock.read_ms()); pFlag2 = 1; } } pFlag2 = 0; - lcd.cls(); - lcd.printf("PS2"); } } @@ -279,72 +266,88 @@ int interval; int pFlag1 = 0; int pFlag2 = 0; + int time_sub = 0; + int evt = 0; while(1) { while (!pFlag1) { - osEvent ext_signal = osSignalWait(0, (LRI-AVI)); - int evt = ext_signal.value.signals; + + time_sub = LRI-AVI - vClock.read_ms(); - //lcd.printf("%d",evt); - if (evt == 0x3) { //aPace 0x0 + if (time_sub > 0 && !mm_flag) { + osEvent ext_signal = osSignalWait(0, time_sub); + evt = ext_signal.value.signals; + } else if(mm_flag) { + osEvent ext_signal = osSignalWait(0, osWaitForever); + evt = ext_signal.value.signals; + } else { + evt = 0x0; + } + + if (evt == 0x0) { //aPace 0x0 + aClock.reset(); + arpClock.reset(); Apace = 1; Thread::wait(1); Apace = 0; osSignalSet(signalTid, 0x3); - aClock.reset(); - arpClock.reset(); - + toggleLed(3); + interval = AVI; pFlag1 = 1; - } - if (evt == 0x1) { //aSense + } else if (evt == 0x1) { //aSense if(!mm_flag) { -// vpace_timer->stop(); - interval = (vClock.read_ms() + AVI >= URI) ? AVI : URI - vClock.read_ms(); + interval = (vClock.read_ms() + AVI >= URI) ? AVI : URI; + time_sub = interval; } -// if(mm_flag) - toggleLed(evt); + toggleLed(1); pFlag1 = 1; } else if(evt == 0x2) { //vSense - toggleLed(evt); + toggleLed(2); + } else if(evt == 0x3) { //apace + pFlag1 = 1; } -// } else if (evt == 0x3) { //aPace -// aClock.reset(); -// arpClock.reset(); -// pFlag1 = 1; -// } } pFlag1 = 0; - lcd.cls(); - lcd.printf("PS3"); + while(!pFlag2) { - lcd.printf("%d", interval); - osEvent ext_signal = osSignalWait(0, interval); - - int evt = ext_signal.value.signals; - - //lcd.printf("%d",evt); // 4096, 256, 16, 1 - if (evt == 0x4) { //vPace 0x0 + time_sub = (interval == AVI) ? AVI - aClock.read_ms() : URI - vClock.read_ms(); + + if (time_sub > 0 && !mm_flag) { + osEvent ext_signal = osSignalWait(0, time_sub); + evt = ext_signal.value.signals; + } else if(mm_flag) { + osEvent ext_signal = osSignalWait(0, osWaitForever); + evt = ext_signal.value.signals; + } else { + evt = 0x0; + } + + if (evt == 0x0) { //vPace 0x0 + hr_mutex.lock(); + heart_beats++; + vClock.reset(); + aClock.reset(); + arpClock.reset(); Vpace = 1; - vClock.reset(); Thread::wait(1); Vpace = 0; osSignalSet(signalTid, 0x4); - heart_beats++; hr_mutex.unlock(); toggleLed(4); pFlag2 = 1; + } else if (evt == 0x1) { //aSense - toggleLed(evt); + toggleLed(1); } else if(evt == 0x2) { //vSense - toggleLed(evt); + toggleLed(2); + pFlag2 = 1; + } else if (evt == 0x4) { //vpace pFlag2 = 1; } } pFlag2 = 0; - lcd.cls(); - lcd.printf("PS4"); } } @@ -411,25 +414,29 @@ void m_vpace() { vClock.reset(); + aClock.reset(); + arpClock.reset(); Vpace = 1; Thread::wait(1); Vpace = 0; osSignalSet(signalTid, 0x4); + osSignalSet(senseTid, 0x4); hr_mutex.lock(); heart_beats++; hr_mutex.unlock(); - + toggleLed(4); } void m_apace() { aClock.reset(); + arpClock.reset(); Apace = 1; Thread::wait(1); Apace = 0; + osSignalSet(senseTid, 0x3); osSignalSet(signalTid, 0x3); - toggleLed(3); } @@ -502,7 +509,7 @@ displayTid = osThreadCreate(osThread(displayThread), NULL); // pacemodeTid = osThreadCreate(osThread(normalmode), NULL); normalmode(NULL); - + vsignal.rise(&vsignal_irq); //rising edge of timer asignal.rise(&asignal_irq); @@ -521,6 +528,7 @@ switch((char)evt.value.p) { case('n'): mm_flag = 0; + osSignalSet(senseTid, 0x5); lcd.printf("paceN"); osThreadTerminate (pacemodeTid); osThreadTerminate (displayTid); @@ -531,6 +539,7 @@ break; case('s'): mm_flag = 0; + osSignalSet(senseTid, 0x5); lcd.printf("paceS"); osThreadTerminate (pacemodeTid); osThreadTerminate (displayTid); @@ -540,6 +549,7 @@ break; case('e'): mm_flag = 0; + osSignalSet(senseTid, 0x5); lcd.printf("paceE"); osThreadTerminate (pacemodeTid); osThreadTerminate (displayTid);