Part of the Pacemaker Project; this models the Pacemaker.
Dependencies: mbed TextLCD mbed-rtos
Diff: PacemakerController.cpp
- Revision:
- 24:81cd9ef5c4f6
- Parent:
- 20:dc272bfaa276
- Child:
- 27:2c5aefcf3000
diff -r 08456978fb78 -r 81cd9ef5c4f6 PacemakerController.cpp --- a/PacemakerController.cpp Mon Nov 30 21:47:20 2015 +0000 +++ b/PacemakerController.cpp Tue Dec 01 16:04:11 2015 +0000 @@ -47,8 +47,11 @@ DigitalOut apace(p22); DigitalOut vpace(p21); +bool vsense; +bool asense; + // hardware interrupt handler, adapted from code in piazza post by Dagaen - extern "C" void TIMER0_IRQHandler (void) +extern "C" void TIMER0_IRQHandler (void) { if((LPC_TIM0->IR & 0x01) == 0x01) { // if MR0 interrupt, proceed LPC_TIM0->IR |= 1 << 0; // Clear MR0 interrupt flag @@ -149,11 +152,12 @@ while(1) { if (timer_count >= VRP && vget == 1) { - // Valid_V state - + // Valid_V state + timer_count = 0; + vsense(); // do something with Vsense! - + } else if (timer_count < VRP && vget == 1) { // Invalid_V state } @@ -162,7 +166,7 @@ // Invalid_A state } else if (timer_count >= PVARP && aget == 1) { // Valid_A state - + asense(); // do something with Asense! } @@ -171,10 +175,10 @@ void pm_response() { - while(1) { + bool goInitalState = true; if (timer_count >= LRI-AVI) { - + goInitialState = false; // PM_A! sets the LED high led_apace = 1; @@ -183,26 +187,65 @@ apace(); // At Atrial Event State - while (avi_clk.read() < AVI); + while (avi_clk.read() < AVI) { + if (vsense == 1) { + goInitialState = true; + break; + } + } + if (!goInitialState) { + // Ventricular Event + timer_count = 0; - // Ventricular Event - timer_count = 0; - - // PM_V! sets the LED high - led_vpace = 1; + // PM_V! sets the LED high + led_vpace = 1; - timer_count = 0; - vpace(); + timer_count = 0; + vpace(); + } } else if (timer_count < LRI - AVI) { + // if Asense, move on to atrial event + if (asense == 1) { + goInitialState = false; + // avi_clk = 0 + + avi_clk.reset(); - // avi_clk = 0 - avi_clk.reset(); + // At Atrial Event State + while (avi_clk.read() < AVI) { + if (vsense == 1) { + goInitialState = true; + break; + } + } - // wait for Asense? naaah + // Ventricular Event + timer_count = 0; + + // PM_V! sets the LED high + led_vpace = 1; + + timer_count = 0; + vpace(); + } } } } +void asense() +{ + asense = 1; + Thread::wait(10); + asense = 0; +} + +void vpace() +{ + vsense = 1; + Thread::wait(10); + vsense = 0; +} + void apace() {