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
Pacemaker.cpp@2:c38a47cdb0db, 2015-11-30 (annotated)
- Committer:
- sanjeet25
- Date:
- Mon Nov 30 22:54:14 2015 +0000
- Revision:
- 2:c38a47cdb0db
- Parent:
- 1:d965ae2443b9
a
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| sanjeet25 | 0:894a7ad8ea79 | 1 | #include "mbed.h" |
| sanjeet25 | 0:894a7ad8ea79 | 2 | #include "TextLCD.h" |
| sanjeet25 | 0:894a7ad8ea79 | 3 | #include "rtos.h" |
| sanjeet25 | 0:894a7ad8ea79 | 4 | |
| sanjeet25 | 0:894a7ad8ea79 | 5 | TextLCD lcd(p15, p16, p17, p18, p19, p20); |
| sanjeet25 | 0:894a7ad8ea79 | 6 | Serial pc(USBTX, USBRX); |
| sanjeet25 | 0:894a7ad8ea79 | 7 | |
| sanjeet25 | 0:894a7ad8ea79 | 8 | int pacemakerRate=0; |
| sanjeet25 | 0:894a7ad8ea79 | 9 | InterruptIn ASignal(p25); |
| sanjeet25 | 0:894a7ad8ea79 | 10 | InterruptIn VSignal(p26); |
| sanjeet25 | 0:894a7ad8ea79 | 11 | int AVI = 65; |
| sanjeet25 | 0:894a7ad8ea79 | 12 | int ASense=0; |
| sanjeet25 | 0:894a7ad8ea79 | 13 | int VSense=0; |
| sanjeet25 | 0:894a7ad8ea79 | 14 | int modeset; |
| sanjeet25 | 0:894a7ad8ea79 | 15 | bool aPace; |
| sanjeet25 | 0:894a7ad8ea79 | 16 | DigitalOut APace(p23); |
| sanjeet25 | 0:894a7ad8ea79 | 17 | DigitalOut VPace(p24); |
| sanjeet25 | 0:894a7ad8ea79 | 18 | |
| sanjeet25 | 0:894a7ad8ea79 | 19 | DigitalOut APace1(LED1); |
| sanjeet25 | 0:894a7ad8ea79 | 20 | DigitalOut VPace1(LED2); |
| sanjeet25 | 0:894a7ad8ea79 | 21 | |
| sanjeet25 | 0:894a7ad8ea79 | 22 | DigitalOut HighAl(LED3); |
| sanjeet25 | 0:894a7ad8ea79 | 23 | DigitalOut LowAl(LED4); |
| sanjeet25 | 0:894a7ad8ea79 | 24 | |
| sanjeet25 | 0:894a7ad8ea79 | 25 | InterruptIn ASig(p25); |
| sanjeet25 | 0:894a7ad8ea79 | 26 | InterruptIn VSig(p26); |
| sanjeet25 | 0:894a7ad8ea79 | 27 | |
| sanjeet25 | 0:894a7ad8ea79 | 28 | int pacemakerInterval=10; |
| sanjeet25 | 0:894a7ad8ea79 | 29 | const int minwait_A=50; |
| sanjeet25 | 0:894a7ad8ea79 | 30 | const int minwait_V=50; |
| sanjeet25 | 0:894a7ad8ea79 | 31 | int modeSwitchTimeInterval = 1500; |
| sanjeet25 | 0:894a7ad8ea79 | 32 | volatile int time_count=0; |
| sanjeet25 | 0:894a7ad8ea79 | 33 | int m=0; |
| sanjeet25 | 0:894a7ad8ea79 | 34 | int s=0; |
| sanjeet25 | 0:894a7ad8ea79 | 35 | int ms=0; |
| sanjeet25 | 0:894a7ad8ea79 | 36 | int PVARP=150; |
| sanjeet25 | 0:894a7ad8ea79 | 37 | |
| sanjeet25 | 0:894a7ad8ea79 | 38 | char key_input; |
| sanjeet25 | 0:894a7ad8ea79 | 39 | bool changePacemakerInterval; |
| sanjeet25 | 0:894a7ad8ea79 | 40 | |
| sanjeet25 | 0:894a7ad8ea79 | 41 | int LRI=1500; |
| sanjeet25 | 0:894a7ad8ea79 | 42 | int URI=600; |
| sanjeet25 | 0:894a7ad8ea79 | 43 | |
| sanjeet25 | 0:894a7ad8ea79 | 44 | int low[4] = {30,40,100,30}; |
| sanjeet25 | 0:894a7ad8ea79 | 45 | int high[4] = {60,100,175,175}; |
| sanjeet25 | 0:894a7ad8ea79 | 46 | |
| sanjeet25 | 0:894a7ad8ea79 | 47 | volatile bool asig=false; |
| sanjeet25 | 0:894a7ad8ea79 | 48 | volatile bool vsig=false; |
| sanjeet25 | 0:894a7ad8ea79 | 49 | |
| sanjeet25 | 0:894a7ad8ea79 | 50 | const int sleepModeURI = 1000; |
| sanjeet25 | 0:894a7ad8ea79 | 51 | const int sleepModeLRI = 2000; |
| sanjeet25 | 0:894a7ad8ea79 | 52 | |
| sanjeet25 | 0:894a7ad8ea79 | 53 | const int normalModeURI = 600; |
| sanjeet25 | 0:894a7ad8ea79 | 54 | const int normalModeLRI = 1500; |
| sanjeet25 | 0:894a7ad8ea79 | 55 | |
| sanjeet25 | 0:894a7ad8ea79 | 56 | const int sportsModeURI = 343; |
| sanjeet25 | 0:894a7ad8ea79 | 57 | const int sportsModeLRI = 600; |
| sanjeet25 | 0:894a7ad8ea79 | 58 | |
| sanjeet25 | 0:894a7ad8ea79 | 59 | const int manualModeURI = 343; |
| sanjeet25 | 0:894a7ad8ea79 | 60 | const int manualModeLRI = 2000; |
| sanjeet25 | 0:894a7ad8ea79 | 61 | |
| sanjeet25 | 0:894a7ad8ea79 | 62 | int time1_count=0; |
| sanjeet25 | 0:894a7ad8ea79 | 63 | |
| sanjeet25 | 0:894a7ad8ea79 | 64 | int PVAB = 10; |
| sanjeet25 | 0:894a7ad8ea79 | 65 | int VRP = 150; |
| sanjeet25 | 0:894a7ad8ea79 | 66 | |
| sanjeet25 | 0:894a7ad8ea79 | 67 | typedef enum Modes { |
| sanjeet25 | 0:894a7ad8ea79 | 68 | Test, |
| sanjeet25 | 0:894a7ad8ea79 | 69 | Normal, |
| sanjeet25 | 0:894a7ad8ea79 | 70 | Sleep, |
| sanjeet25 | 0:894a7ad8ea79 | 71 | Random, |
| sanjeet25 | 0:894a7ad8ea79 | 72 | Sports, |
| sanjeet25 | 0:894a7ad8ea79 | 73 | Manual, |
| sanjeet25 | 0:894a7ad8ea79 | 74 | Observer |
| sanjeet25 | 0:894a7ad8ea79 | 75 | }; |
| sanjeet25 | 0:894a7ad8ea79 | 76 | |
| sanjeet25 | 0:894a7ad8ea79 | 77 | typedef enum pacemakersend { |
| sanjeet25 | 0:894a7ad8ea79 | 78 | AVIEvent, |
| sanjeet25 | 0:894a7ad8ea79 | 79 | VentricalEvent, |
| sanjeet25 | 0:894a7ad8ea79 | 80 | ManualMode, |
| sanjeet25 | 0:894a7ad8ea79 | 81 | PostVSense |
| sanjeet25 | 0:894a7ad8ea79 | 82 | }; |
| sanjeet25 | 0:894a7ad8ea79 | 83 | |
| sanjeet25 | 0:894a7ad8ea79 | 84 | typedef enum pacemakerventrical { |
| sanjeet25 | 0:894a7ad8ea79 | 85 | AWait |
| sanjeet25 | 0:894a7ad8ea79 | 86 | }; |
| sanjeet25 | 0:894a7ad8ea79 | 87 | |
| sanjeet25 | 0:894a7ad8ea79 | 88 | pacemakerventrical pventrical; |
| sanjeet25 | 1:d965ae2443b9 | 89 | pacemakersend psend1; |
| sanjeet25 | 0:894a7ad8ea79 | 90 | Modes mode; |
| sanjeet25 | 0:894a7ad8ea79 | 91 | //mode=Normal; |
| sanjeet25 | 0:894a7ad8ea79 | 92 | |
| sanjeet25 | 0:894a7ad8ea79 | 93 | Mutex PacemakerMutex; |
| sanjeet25 | 0:894a7ad8ea79 | 94 | |
| sanjeet25 | 0:894a7ad8ea79 | 95 | Thread *pa; |
| sanjeet25 | 0:894a7ad8ea79 | 96 | Thread *pv; |
| sanjeet25 | 0:894a7ad8ea79 | 97 | Thread *psend; |
| sanjeet25 | 1:d965ae2443b9 | 98 | Thread *aorv; |
| sanjeet25 | 0:894a7ad8ea79 | 99 | Thread *pmode; |
| sanjeet25 | 0:894a7ad8ea79 | 100 | |
| sanjeet25 | 0:894a7ad8ea79 | 101 | void resetTimer0(); |
| sanjeet25 | 0:894a7ad8ea79 | 102 | void resetTimer1(); |
| sanjeet25 | 1:d965ae2443b9 | 103 | void AorVPacesend(); |
| sanjeet25 | 0:894a7ad8ea79 | 104 | void ASignalreceive(); |
| sanjeet25 | 0:894a7ad8ea79 | 105 | void VSignalreceive(); |
| sanjeet25 | 0:894a7ad8ea79 | 106 | void PacemakerAtrial(); |
| sanjeet25 | 0:894a7ad8ea79 | 107 | void PacemakerModes(); |
| sanjeet25 | 0:894a7ad8ea79 | 108 | void timer0_init(); |
| sanjeet25 | 0:894a7ad8ea79 | 109 | void timer1_init(); |
| sanjeet25 | 0:894a7ad8ea79 | 110 | void ASignalreceive(); |
| sanjeet25 | 0:894a7ad8ea79 | 111 | void updatePacemaker(); |
| sanjeet25 | 2:c38a47cdb0db | 112 | //void VSignalreceive(); |
| sanjeet25 | 0:894a7ad8ea79 | 113 | void PacemakerVentricularInterval(); |
| sanjeet25 | 0:894a7ad8ea79 | 114 | |
| sanjeet25 | 0:894a7ad8ea79 | 115 | extern "C" void TIMER0_IRQHandler (void) |
| sanjeet25 | 0:894a7ad8ea79 | 116 | { |
| sanjeet25 | 0:894a7ad8ea79 | 117 | if((LPC_TIM0->IR & 0x01) == 0x01) { // if interrupt provided, continue to next line |
| sanjeet25 | 0:894a7ad8ea79 | 118 | LPC_TIM0->IR |= 1 << 0; // Clear MR0 interrupt flag |
| sanjeet25 | 0:894a7ad8ea79 | 119 | time_count++; //increment time_count |
| sanjeet25 | 0:894a7ad8ea79 | 120 | } |
| sanjeet25 | 0:894a7ad8ea79 | 121 | } |
| sanjeet25 | 0:894a7ad8ea79 | 122 | |
| sanjeet25 | 0:894a7ad8ea79 | 123 | void timer0_init(void) |
| sanjeet25 | 0:894a7ad8ea79 | 124 | { |
| sanjeet25 | 0:894a7ad8ea79 | 125 | LPC_SC->PCONP |=1<1; //power on the timer |
| sanjeet25 | 0:894a7ad8ea79 | 126 | LPC_TIM0->MR0 = 23980; //10 msec period i.e the timer count will increment every 10ms |
| sanjeet25 | 0:894a7ad8ea79 | 127 | LPC_TIM0->MCR = 3; //reset control |
| sanjeet25 | 0:894a7ad8ea79 | 128 | //3 = Interrupt & reset timer0 on match |
| sanjeet25 | 0:894a7ad8ea79 | 129 | //1 = Interrupt only, no reset |
| sanjeet25 | 0:894a7ad8ea79 | 130 | NVIC_EnableIRQ(TIMER0_IRQn); //enable interrupt |
| sanjeet25 | 0:894a7ad8ea79 | 131 | LPC_TIM0->TCR = 1; //enable the timer |
| sanjeet25 | 0:894a7ad8ea79 | 132 | |
| sanjeet25 | 0:894a7ad8ea79 | 133 | } |
| sanjeet25 | 0:894a7ad8ea79 | 134 | |
| sanjeet25 | 0:894a7ad8ea79 | 135 | extern "C" void TIMER1_IRQHandler (void) |
| sanjeet25 | 0:894a7ad8ea79 | 136 | { |
| sanjeet25 | 0:894a7ad8ea79 | 137 | if((LPC_TIM1->IR & 0x01) == 0x01) { // if interrupt provided, continue to next line |
| sanjeet25 | 0:894a7ad8ea79 | 138 | LPC_TIM1->IR |= 1 << 0; // Clear MR0 interrupt flag |
| sanjeet25 | 0:894a7ad8ea79 | 139 | time1_count++; //increment time_count |
| sanjeet25 | 0:894a7ad8ea79 | 140 | } |
| sanjeet25 | 0:894a7ad8ea79 | 141 | } |
| sanjeet25 | 0:894a7ad8ea79 | 142 | |
| sanjeet25 | 0:894a7ad8ea79 | 143 | void timer1_init(void) |
| sanjeet25 | 0:894a7ad8ea79 | 144 | { |
| sanjeet25 | 0:894a7ad8ea79 | 145 | LPC_SC->PCONP |=1<1; //power on the timer |
| sanjeet25 | 0:894a7ad8ea79 | 146 | LPC_TIM1->MR0 = 23980; //10 msec period i.e the timer count will increment every 10ms |
| sanjeet25 | 0:894a7ad8ea79 | 147 | LPC_TIM1->MCR = 3; //reset control |
| sanjeet25 | 0:894a7ad8ea79 | 148 | //3 = Interrupt & reset timer0 on match |
| sanjeet25 | 0:894a7ad8ea79 | 149 | //1 = Interrupt only, no reset |
| sanjeet25 | 0:894a7ad8ea79 | 150 | NVIC_EnableIRQ(TIMER1_IRQn); //enable interrupt |
| sanjeet25 | 0:894a7ad8ea79 | 151 | LPC_TIM1->TCR = 1; //enable the timer |
| sanjeet25 | 0:894a7ad8ea79 | 152 | |
| sanjeet25 | 0:894a7ad8ea79 | 153 | } |
| sanjeet25 | 0:894a7ad8ea79 | 154 | |
| sanjeet25 | 0:894a7ad8ea79 | 155 | void resetTimer0() |
| sanjeet25 | 0:894a7ad8ea79 | 156 | { |
| sanjeet25 | 0:894a7ad8ea79 | 157 | time_count; |
| sanjeet25 | 0:894a7ad8ea79 | 158 | LPC_TIM0->TCR = 0; |
| sanjeet25 | 0:894a7ad8ea79 | 159 | lcd.locate(0,0); |
| sanjeet25 | 0:894a7ad8ea79 | 160 | lcd.printf("%02d:%02d:%02d", m,s,ms); |
| sanjeet25 | 0:894a7ad8ea79 | 161 | } |
| sanjeet25 | 0:894a7ad8ea79 | 162 | |
| sanjeet25 | 0:894a7ad8ea79 | 163 | void resetTimer1() |
| sanjeet25 | 0:894a7ad8ea79 | 164 | { |
| sanjeet25 | 0:894a7ad8ea79 | 165 | time1_count=0; |
| sanjeet25 | 0:894a7ad8ea79 | 166 | LPC_TIM1->TCR = 0; |
| sanjeet25 | 0:894a7ad8ea79 | 167 | lcd.locate(0,0); |
| sanjeet25 | 0:894a7ad8ea79 | 168 | lcd.printf("%02d:%02d:%02d", m,s,ms); |
| sanjeet25 | 0:894a7ad8ea79 | 169 | } |
| sanjeet25 | 0:894a7ad8ea79 | 170 | |
| sanjeet25 | 0:894a7ad8ea79 | 171 | |
| sanjeet25 | 0:894a7ad8ea79 | 172 | //void VPacesend() |
| sanjeet25 | 0:894a7ad8ea79 | 173 | //{ |
| sanjeet25 | 0:894a7ad8ea79 | 174 | // VPace=1; |
| sanjeet25 | 0:894a7ad8ea79 | 175 | // VPace1=1; |
| sanjeet25 | 0:894a7ad8ea79 | 176 | // APace=0; |
| sanjeet25 | 0:894a7ad8ea79 | 177 | // APace1=0; |
| sanjeet25 | 0:894a7ad8ea79 | 178 | //} |
| sanjeet25 | 0:894a7ad8ea79 | 179 | |
| sanjeet25 | 1:d965ae2443b9 | 180 | void AorVPacesend(void const* args) |
| sanjeet25 | 0:894a7ad8ea79 | 181 | { |
| sanjeet25 | 2:c38a47cdb0db | 182 | while(1) { |
| sanjeet25 | 2:c38a47cdb0db | 183 | Thread::signal_wait(0x01); |
| sanjeet25 | 2:c38a47cdb0db | 184 | if(aPace) { |
| sanjeet25 | 2:c38a47cdb0db | 185 | pc.printf("Sending APace"); |
| sanjeet25 | 2:c38a47cdb0db | 186 | APace=1; |
| sanjeet25 | 2:c38a47cdb0db | 187 | VPace1=0; |
| sanjeet25 | 2:c38a47cdb0db | 188 | APace1=1; |
| sanjeet25 | 2:c38a47cdb0db | 189 | VPace=0; |
| sanjeet25 | 2:c38a47cdb0db | 190 | } else { |
| sanjeet25 | 2:c38a47cdb0db | 191 | pc.printf("Sending VPace"); |
| sanjeet25 | 2:c38a47cdb0db | 192 | VPace=1; |
| sanjeet25 | 2:c38a47cdb0db | 193 | VPace1=1; |
| sanjeet25 | 2:c38a47cdb0db | 194 | APace=0; |
| sanjeet25 | 2:c38a47cdb0db | 195 | APace1=0; |
| sanjeet25 | 2:c38a47cdb0db | 196 | } |
| sanjeet25 | 0:894a7ad8ea79 | 197 | } |
| sanjeet25 | 0:894a7ad8ea79 | 198 | } |
| sanjeet25 | 0:894a7ad8ea79 | 199 | |
| sanjeet25 | 0:894a7ad8ea79 | 200 | void ASignalreceive() |
| sanjeet25 | 0:894a7ad8ea79 | 201 | { |
| sanjeet25 | 0:894a7ad8ea79 | 202 | pc.printf("ASignalreceive"); |
| sanjeet25 | 0:894a7ad8ea79 | 203 | asig=true; |
| sanjeet25 | 0:894a7ad8ea79 | 204 | vsig=false; |
| sanjeet25 | 2:c38a47cdb0db | 205 | |
| sanjeet25 | 0:894a7ad8ea79 | 206 | } |
| sanjeet25 | 0:894a7ad8ea79 | 207 | |
| sanjeet25 | 0:894a7ad8ea79 | 208 | void VSignalreceive() |
| sanjeet25 | 0:894a7ad8ea79 | 209 | { |
| sanjeet25 | 0:894a7ad8ea79 | 210 | pc.printf("VSignalreceive"); |
| sanjeet25 | 2:c38a47cdb0db | 211 | asig=false; |
| sanjeet25 | 0:894a7ad8ea79 | 212 | vsig=true; |
| sanjeet25 | 2:c38a47cdb0db | 213 | |
| sanjeet25 | 0:894a7ad8ea79 | 214 | } |
| sanjeet25 | 0:894a7ad8ea79 | 215 | void ASensesend() |
| sanjeet25 | 0:894a7ad8ea79 | 216 | { |
| sanjeet25 | 0:894a7ad8ea79 | 217 | pc.printf("ASensesend"); |
| sanjeet25 | 0:894a7ad8ea79 | 218 | ASense=1; |
| sanjeet25 | 0:894a7ad8ea79 | 219 | wait(0.002); |
| sanjeet25 | 0:894a7ad8ea79 | 220 | ASense=0; |
| sanjeet25 | 0:894a7ad8ea79 | 221 | } |
| sanjeet25 | 0:894a7ad8ea79 | 222 | |
| sanjeet25 | 0:894a7ad8ea79 | 223 | |
| sanjeet25 | 0:894a7ad8ea79 | 224 | void sound_HighAlarm() |
| sanjeet25 | 0:894a7ad8ea79 | 225 | { |
| sanjeet25 | 0:894a7ad8ea79 | 226 | pc.printf("high"); |
| sanjeet25 | 0:894a7ad8ea79 | 227 | HighAl=1; |
| sanjeet25 | 0:894a7ad8ea79 | 228 | LowAl=0; |
| sanjeet25 | 0:894a7ad8ea79 | 229 | } |
| sanjeet25 | 0:894a7ad8ea79 | 230 | void sound_LowAlarm() |
| sanjeet25 | 0:894a7ad8ea79 | 231 | { |
| sanjeet25 | 0:894a7ad8ea79 | 232 | pc.printf("low"); |
| sanjeet25 | 0:894a7ad8ea79 | 233 | LowAl=1; |
| sanjeet25 | 0:894a7ad8ea79 | 234 | HighAl=0; |
| sanjeet25 | 0:894a7ad8ea79 | 235 | } |
| sanjeet25 | 0:894a7ad8ea79 | 236 | |
| sanjeet25 | 0:894a7ad8ea79 | 237 | void updatePacemaker() |
| sanjeet25 | 0:894a7ad8ea79 | 238 | { |
| sanjeet25 | 0:894a7ad8ea79 | 239 | int temp = 60/pacemakerInterval; |
| sanjeet25 | 0:894a7ad8ea79 | 240 | pacemakerRate = pacemakerRate + temp; |
| sanjeet25 | 0:894a7ad8ea79 | 241 | } |
| sanjeet25 | 0:894a7ad8ea79 | 242 | void VSensesend() |
| sanjeet25 | 0:894a7ad8ea79 | 243 | { |
| sanjeet25 | 0:894a7ad8ea79 | 244 | pc.printf("VSensesend"); |
| sanjeet25 | 0:894a7ad8ea79 | 245 | VSense=1; |
| sanjeet25 | 0:894a7ad8ea79 | 246 | wait(0.002); |
| sanjeet25 | 0:894a7ad8ea79 | 247 | VSense=0; |
| sanjeet25 | 0:894a7ad8ea79 | 248 | } |
| sanjeet25 | 0:894a7ad8ea79 | 249 | |
| sanjeet25 | 0:894a7ad8ea79 | 250 | void PacemakerVentricalEvent(void const* args) |
| sanjeet25 | 0:894a7ad8ea79 | 251 | { |
| sanjeet25 | 0:894a7ad8ea79 | 252 | pc.printf("enteredpventricalevent"); |
| sanjeet25 | 0:894a7ad8ea79 | 253 | while(1) { |
| sanjeet25 | 0:894a7ad8ea79 | 254 | switch(pventrical) { |
| sanjeet25 | 0:894a7ad8ea79 | 255 | case AWait: |
| sanjeet25 | 0:894a7ad8ea79 | 256 | while(vsig==false||ASense==0||VPace==0); |
| sanjeet25 | 0:894a7ad8ea79 | 257 | if(vsig==true) { |
| sanjeet25 | 0:894a7ad8ea79 | 258 | pc.printf("vsig in"); |
| sanjeet25 | 0:894a7ad8ea79 | 259 | VSensesend(); |
| sanjeet25 | 0:894a7ad8ea79 | 260 | pventrical=AWait; |
| sanjeet25 | 0:894a7ad8ea79 | 261 | break; |
| sanjeet25 | 0:894a7ad8ea79 | 262 | } else if(ASense==1) { |
| sanjeet25 | 0:894a7ad8ea79 | 263 | resetTimer0(); |
| sanjeet25 | 0:894a7ad8ea79 | 264 | } else if(APace==1) { |
| sanjeet25 | 0:894a7ad8ea79 | 265 | resetTimer0(); |
| sanjeet25 | 0:894a7ad8ea79 | 266 | } |
| sanjeet25 | 0:894a7ad8ea79 | 267 | while(time_count<PVAB); |
| sanjeet25 | 0:894a7ad8ea79 | 268 | while(vsig==false||VPace==0); |
| sanjeet25 | 0:894a7ad8ea79 | 269 | if(vsig==true) |
| sanjeet25 | 0:894a7ad8ea79 | 270 | pc.printf("vsig in"); |
| sanjeet25 | 0:894a7ad8ea79 | 271 | VSensesend(); |
| sanjeet25 | 0:894a7ad8ea79 | 272 | resetTimer0(); |
| sanjeet25 | 0:894a7ad8ea79 | 273 | while(time_count<VRP); |
| sanjeet25 | 0:894a7ad8ea79 | 274 | break; |
| sanjeet25 | 0:894a7ad8ea79 | 275 | } |
| sanjeet25 | 0:894a7ad8ea79 | 276 | } |
| sanjeet25 | 0:894a7ad8ea79 | 277 | } |
| sanjeet25 | 0:894a7ad8ea79 | 278 | |
| sanjeet25 | 0:894a7ad8ea79 | 279 | void PacemakerSend(void const* args) |
| sanjeet25 | 0:894a7ad8ea79 | 280 | { |
| sanjeet25 | 0:894a7ad8ea79 | 281 | pc.printf("enteredpsend"); |
| sanjeet25 | 0:894a7ad8ea79 | 282 | while(1) { |
| sanjeet25 | 1:d965ae2443b9 | 283 | switch(psend1) { |
| sanjeet25 | 0:894a7ad8ea79 | 284 | case AVIEvent: |
| sanjeet25 | 0:894a7ad8ea79 | 285 | while(time_count<AVI||VSense==0||mode!=Manual); |
| sanjeet25 | 0:894a7ad8ea79 | 286 | if(time_count>=AVI) { |
| sanjeet25 | 1:d965ae2443b9 | 287 | (*aorv).signal_set(0x01); |
| sanjeet25 | 1:d965ae2443b9 | 288 | //AorVPacesend("s"); |
| sanjeet25 | 1:d965ae2443b9 | 289 | psend1=VentricalEvent; |
| sanjeet25 | 0:894a7ad8ea79 | 290 | } else if(mode==Manual) { |
| sanjeet25 | 0:894a7ad8ea79 | 291 | while (mode==Manual); |
| sanjeet25 | 1:d965ae2443b9 | 292 | psend1=AVIEvent; |
| sanjeet25 | 0:894a7ad8ea79 | 293 | } else if(VSense==1) |
| sanjeet25 | 1:d965ae2443b9 | 294 | psend1=VentricalEvent; |
| sanjeet25 | 0:894a7ad8ea79 | 295 | break; |
| sanjeet25 | 0:894a7ad8ea79 | 296 | case VentricalEvent: |
| sanjeet25 | 0:894a7ad8ea79 | 297 | while(ASense==0||time_count<LRI||VSense==0||mode!=Manual); |
| sanjeet25 | 0:894a7ad8ea79 | 298 | if(ASense==1) { |
| sanjeet25 | 0:894a7ad8ea79 | 299 | if(mode==Manual) { |
| sanjeet25 | 0:894a7ad8ea79 | 300 | while(mode==Manual); |
| sanjeet25 | 1:d965ae2443b9 | 301 | psend1=AVIEvent; |
| sanjeet25 | 0:894a7ad8ea79 | 302 | } else if(VSense==1) { |
| sanjeet25 | 0:894a7ad8ea79 | 303 | resetTimer0(); |
| sanjeet25 | 1:d965ae2443b9 | 304 | psend1=PostVSense; |
| sanjeet25 | 0:894a7ad8ea79 | 305 | } else { |
| sanjeet25 | 0:894a7ad8ea79 | 306 | resetTimer0(); |
| sanjeet25 | 1:d965ae2443b9 | 307 | psend1=AVIEvent; |
| sanjeet25 | 0:894a7ad8ea79 | 308 | } |
| sanjeet25 | 0:894a7ad8ea79 | 309 | } |
| sanjeet25 | 0:894a7ad8ea79 | 310 | break; |
| sanjeet25 | 0:894a7ad8ea79 | 311 | case PostVSense: |
| sanjeet25 | 0:894a7ad8ea79 | 312 | while(mode!=Manual||ASense==0||time_count<LRI-AVI); |
| sanjeet25 | 0:894a7ad8ea79 | 313 | if(mode==Manual) { |
| sanjeet25 | 0:894a7ad8ea79 | 314 | while(mode==Manual); |
| sanjeet25 | 1:d965ae2443b9 | 315 | psend1=AVIEvent; |
| sanjeet25 | 0:894a7ad8ea79 | 316 | } else if(ASense==1) { |
| sanjeet25 | 0:894a7ad8ea79 | 317 | if(mode==Manual) { |
| sanjeet25 | 0:894a7ad8ea79 | 318 | while(mode==Manual); |
| sanjeet25 | 0:894a7ad8ea79 | 319 | } else { |
| sanjeet25 | 0:894a7ad8ea79 | 320 | resetTimer0(); |
| sanjeet25 | 1:d965ae2443b9 | 321 | psend1=AVIEvent; |
| sanjeet25 | 0:894a7ad8ea79 | 322 | } |
| sanjeet25 | 0:894a7ad8ea79 | 323 | } else if(time_count>=LRI-AVI) { |
| sanjeet25 | 0:894a7ad8ea79 | 324 | while(mode!=Manual); |
| sanjeet25 | 0:894a7ad8ea79 | 325 | while(mode==Manual); |
| sanjeet25 | 1:d965ae2443b9 | 326 | psend1=AVIEvent; |
| sanjeet25 | 0:894a7ad8ea79 | 327 | } |
| sanjeet25 | 0:894a7ad8ea79 | 328 | break; |
| sanjeet25 | 0:894a7ad8ea79 | 329 | } |
| sanjeet25 | 0:894a7ad8ea79 | 330 | |
| sanjeet25 | 0:894a7ad8ea79 | 331 | } |
| sanjeet25 | 0:894a7ad8ea79 | 332 | } |
| sanjeet25 | 0:894a7ad8ea79 | 333 | |
| sanjeet25 | 0:894a7ad8ea79 | 334 | void PacemakerAtrial(void const* args) |
| sanjeet25 | 0:894a7ad8ea79 | 335 | { |
| sanjeet25 | 0:894a7ad8ea79 | 336 | pc.printf("enteredpatrial"); |
| sanjeet25 | 0:894a7ad8ea79 | 337 | while(1) { |
| sanjeet25 | 0:894a7ad8ea79 | 338 | while(asig==false||APace==0); |
| sanjeet25 | 2:c38a47cdb0db | 339 | if(asig==true) { |
| sanjeet25 | 0:894a7ad8ea79 | 340 | pc.printf("asig in"); |
| sanjeet25 | 0:894a7ad8ea79 | 341 | ASensesend(); |
| sanjeet25 | 0:894a7ad8ea79 | 342 | } |
| sanjeet25 | 0:894a7ad8ea79 | 343 | resetTimer0(); |
| sanjeet25 | 0:894a7ad8ea79 | 344 | while(VSense==0||VPace==0); |
| sanjeet25 | 0:894a7ad8ea79 | 345 | resetTimer1(); |
| sanjeet25 | 0:894a7ad8ea79 | 346 | while(time_count<PVARP); |
| sanjeet25 | 0:894a7ad8ea79 | 347 | while(time1_count<URI); |
| sanjeet25 | 0:894a7ad8ea79 | 348 | |
| sanjeet25 | 0:894a7ad8ea79 | 349 | } |
| sanjeet25 | 0:894a7ad8ea79 | 350 | |
| sanjeet25 | 0:894a7ad8ea79 | 351 | } |
| sanjeet25 | 0:894a7ad8ea79 | 352 | void PacemakerModes(void const* args) |
| sanjeet25 | 0:894a7ad8ea79 | 353 | { |
| sanjeet25 | 0:894a7ad8ea79 | 354 | pc.printf("enteredpmodes"); |
| sanjeet25 | 0:894a7ad8ea79 | 355 | while(1) { |
| sanjeet25 | 0:894a7ad8ea79 | 356 | if(pc.readable()) { |
| sanjeet25 | 0:894a7ad8ea79 | 357 | key_input = pc.getc(); |
| sanjeet25 | 0:894a7ad8ea79 | 358 | if((key_input=='n'||key_input=='N')&&!changePacemakerInterval) { |
| sanjeet25 | 0:894a7ad8ea79 | 359 | mode = Normal; |
| sanjeet25 | 0:894a7ad8ea79 | 360 | pc.printf("Normal"); |
| sanjeet25 | 0:894a7ad8ea79 | 361 | LRI=normalModeLRI; |
| sanjeet25 | 0:894a7ad8ea79 | 362 | URI=normalModeURI; |
| sanjeet25 | 0:894a7ad8ea79 | 363 | // (*Pace).signal_set(0x01); |
| sanjeet25 | 0:894a7ad8ea79 | 364 | //resetTimer0(); |
| sanjeet25 | 0:894a7ad8ea79 | 365 | modeset=0; |
| sanjeet25 | 0:894a7ad8ea79 | 366 | } else if((key_input=='s'||key_input=='S')&&!changePacemakerInterval) { |
| sanjeet25 | 0:894a7ad8ea79 | 367 | mode=Sleep; |
| sanjeet25 | 0:894a7ad8ea79 | 368 | pc.printf("Sleep"); |
| sanjeet25 | 0:894a7ad8ea79 | 369 | modeset=1; |
| sanjeet25 | 0:894a7ad8ea79 | 370 | LRI=sleepModeLRI; |
| sanjeet25 | 0:894a7ad8ea79 | 371 | URI=sleepModeURI; |
| sanjeet25 | 0:894a7ad8ea79 | 372 | // (*Pace).signal_set(0x01); |
| sanjeet25 | 0:894a7ad8ea79 | 373 | //resetTimer0(); |
| sanjeet25 | 0:894a7ad8ea79 | 374 | } else if((key_input=='e'||key_input=='E')&&!changePacemakerInterval) { |
| sanjeet25 | 0:894a7ad8ea79 | 375 | mode=Sports; |
| sanjeet25 | 0:894a7ad8ea79 | 376 | pc.printf("Exercise"); |
| sanjeet25 | 0:894a7ad8ea79 | 377 | modeset=2; |
| sanjeet25 | 0:894a7ad8ea79 | 378 | LRI=sportsModeLRI; |
| sanjeet25 | 0:894a7ad8ea79 | 379 | URI=sportsModeURI; |
| sanjeet25 | 0:894a7ad8ea79 | 380 | // (*Pace).signal_set(0x01); |
| sanjeet25 | 0:894a7ad8ea79 | 381 | //resetTimer0(); |
| sanjeet25 | 0:894a7ad8ea79 | 382 | } else if((key_input=='m'||key_input=='M')&&!changePacemakerInterval) { |
| sanjeet25 | 0:894a7ad8ea79 | 383 | mode=Manual; |
| sanjeet25 | 0:894a7ad8ea79 | 384 | modeset=3; |
| sanjeet25 | 0:894a7ad8ea79 | 385 | LRI=manualModeLRI; |
| sanjeet25 | 0:894a7ad8ea79 | 386 | URI=manualModeURI; |
| sanjeet25 | 0:894a7ad8ea79 | 387 | aPace=true; |
| sanjeet25 | 0:894a7ad8ea79 | 388 | //(*Pace).signal_set(0x02); |
| sanjeet25 | 0:894a7ad8ea79 | 389 | pc.printf("Manual"); |
| sanjeet25 | 0:894a7ad8ea79 | 390 | } else if((key_input=='v'||key_input=='V')&& !changePacemakerInterval) { |
| sanjeet25 | 0:894a7ad8ea79 | 391 | if(mode==Manual) { |
| sanjeet25 | 1:d965ae2443b9 | 392 | mode=Manual; |
| sanjeet25 | 0:894a7ad8ea79 | 393 | pc.printf("Ventricular"); |
| sanjeet25 | 2:c38a47cdb0db | 394 | // AorVPacesend(); |
| sanjeet25 | 0:894a7ad8ea79 | 395 | aPace=false; |
| sanjeet25 | 1:d965ae2443b9 | 396 | (*aorv).signal_set(0x01); |
| sanjeet25 | 0:894a7ad8ea79 | 397 | } |
| sanjeet25 | 0:894a7ad8ea79 | 398 | } else if((key_input=='a'||key_input=='A')&&!changePacemakerInterval) { |
| sanjeet25 | 0:894a7ad8ea79 | 399 | if(mode==Manual) { |
| sanjeet25 | 1:d965ae2443b9 | 400 | mode=Manual; |
| sanjeet25 | 1:d965ae2443b9 | 401 | //AorVPacesend(); |
| sanjeet25 | 0:894a7ad8ea79 | 402 | pc.printf("Atrial"); |
| sanjeet25 | 0:894a7ad8ea79 | 403 | aPace=true; |
| sanjeet25 | 1:d965ae2443b9 | 404 | (*aorv).signal_set(0x01); |
| sanjeet25 | 0:894a7ad8ea79 | 405 | } |
| sanjeet25 | 0:894a7ad8ea79 | 406 | } else if((key_input=='o'||key_input=='O')&&!changePacemakerInterval) { |
| sanjeet25 | 0:894a7ad8ea79 | 407 | int a = 10 + rand() % 80; |
| sanjeet25 | 0:894a7ad8ea79 | 408 | mode=Observer; |
| sanjeet25 | 0:894a7ad8ea79 | 409 | pc.printf("Observer and %u",a); |
| sanjeet25 | 0:894a7ad8ea79 | 410 | pacemakerInterval =a; |
| sanjeet25 | 0:894a7ad8ea79 | 411 | } |
| sanjeet25 | 0:894a7ad8ea79 | 412 | |
| sanjeet25 | 0:894a7ad8ea79 | 413 | } |
| sanjeet25 | 0:894a7ad8ea79 | 414 | } |
| sanjeet25 | 0:894a7ad8ea79 | 415 | } |
| sanjeet25 | 0:894a7ad8ea79 | 416 | |
| sanjeet25 | 0:894a7ad8ea79 | 417 | //void PacemakerDisplay(void const* args) |
| sanjeet25 | 0:894a7ad8ea79 | 418 | //{ pc.printf("enteredpdisplay"); |
| sanjeet25 | 0:894a7ad8ea79 | 419 | // while(1) { |
| sanjeet25 | 0:894a7ad8ea79 | 420 | // while(VPace==0||VSense==0) { |
| sanjeet25 | 0:894a7ad8ea79 | 421 | // if(time_count<=pacemakerInterval*1000); |
| sanjeet25 | 0:894a7ad8ea79 | 422 | // updatePacemaker(); |
| sanjeet25 | 0:894a7ad8ea79 | 423 | // } |
| sanjeet25 | 0:894a7ad8ea79 | 424 | // pc.printf("%u",pacemakerRate); |
| sanjeet25 | 0:894a7ad8ea79 | 425 | // while(time_count<=pacemakerInterval*1000); |
| sanjeet25 | 0:894a7ad8ea79 | 426 | // if(pacemakerRate<low[modeset]) { |
| sanjeet25 | 0:894a7ad8ea79 | 427 | // resetTimer0(); |
| sanjeet25 | 0:894a7ad8ea79 | 428 | // sound_LowAlarm(); |
| sanjeet25 | 0:894a7ad8ea79 | 429 | // pc.printf("low"); |
| sanjeet25 | 0:894a7ad8ea79 | 430 | // } else if(pacemakerRate>high[modeset]) { |
| sanjeet25 | 0:894a7ad8ea79 | 431 | // resetTimer0(); |
| sanjeet25 | 0:894a7ad8ea79 | 432 | // pc.printf("high"); |
| sanjeet25 | 0:894a7ad8ea79 | 433 | // sound_HighAlarm(); |
| sanjeet25 | 0:894a7ad8ea79 | 434 | // } else if(pacemakerRate<=high[modeset]&&pacemakerRate<=low[modeset]) { |
| sanjeet25 | 0:894a7ad8ea79 | 435 | // resetTimer0(); |
| sanjeet25 | 0:894a7ad8ea79 | 436 | // pc.printf("Normal"); |
| sanjeet25 | 0:894a7ad8ea79 | 437 | // } |
| sanjeet25 | 0:894a7ad8ea79 | 438 | // } |
| sanjeet25 | 0:894a7ad8ea79 | 439 | // |
| sanjeet25 | 0:894a7ad8ea79 | 440 | //} |
| sanjeet25 | 0:894a7ad8ea79 | 441 | |
| sanjeet25 | 0:894a7ad8ea79 | 442 | int main () |
| sanjeet25 | 0:894a7ad8ea79 | 443 | { |
| sanjeet25 | 0:894a7ad8ea79 | 444 | pc.baud(9600); |
| sanjeet25 | 0:894a7ad8ea79 | 445 | VSignal.rise(&VSignalreceive); |
| sanjeet25 | 0:894a7ad8ea79 | 446 | ASignal.rise(&ASignalreceive); |
| sanjeet25 | 0:894a7ad8ea79 | 447 | timer0_init(); |
| sanjeet25 | 0:894a7ad8ea79 | 448 | timer1_init(); |
| sanjeet25 | 0:894a7ad8ea79 | 449 | Thread patrial(PacemakerAtrial); |
| sanjeet25 | 0:894a7ad8ea79 | 450 | pa=&patrial; |
| sanjeet25 | 0:894a7ad8ea79 | 451 | Thread pventrical(PacemakerVentricalEvent); |
| sanjeet25 | 0:894a7ad8ea79 | 452 | pv=&pventrical; |
| sanjeet25 | 0:894a7ad8ea79 | 453 | Thread pacesend(PacemakerSend); |
| sanjeet25 | 0:894a7ad8ea79 | 454 | psend=&pacesend; |
| sanjeet25 | 0:894a7ad8ea79 | 455 | Thread pmodes(PacemakerModes); |
| sanjeet25 | 0:894a7ad8ea79 | 456 | pmode=&pmodes; |
| sanjeet25 | 1:d965ae2443b9 | 457 | Thread aorvpacesend(AorVPacesend); |
| sanjeet25 | 1:d965ae2443b9 | 458 | aorv=&aorvpacesend; |
| sanjeet25 | 0:894a7ad8ea79 | 459 | //Thread pdisplay(PacemakerDisplay); |
| sanjeet25 | 0:894a7ad8ea79 | 460 | |
| sanjeet25 | 0:894a7ad8ea79 | 461 | |
| sanjeet25 | 0:894a7ad8ea79 | 462 | while(1) { |
| sanjeet25 | 0:894a7ad8ea79 | 463 | } |
| sanjeet25 | 0:894a7ad8ea79 | 464 | } |