Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: TextLCD mbed-rtos mbed
Fork of 541-pacemaker by
Revision 4:f887d8169f83, committed 2016-12-09
- Comitter:
- ems316
- Date:
- Fri Dec 09 11:05:21 2016 +0000
- Parent:
- 3:77efff091ef1
- Commit message:
- hahahahah
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- 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);
