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@0:894a7ad8ea79, 2015-11-30 (annotated)
- Committer:
- sanjeet25
- Date:
- Mon Nov 30 22:00:35 2015 +0000
- Revision:
- 0:894a7ad8ea79
- Child:
- 1:d965ae2443b9
implemntation pacemaker
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 | 0:894a7ad8ea79 | 89 | //pacemakersend psend; |
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 | 0:894a7ad8ea79 | 98 | Thread *pmode; |
sanjeet25 | 0:894a7ad8ea79 | 99 | |
sanjeet25 | 0:894a7ad8ea79 | 100 | void resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 101 | void resetTimer1(); |
sanjeet25 | 0:894a7ad8ea79 | 102 | void VPacesend(); |
sanjeet25 | 0:894a7ad8ea79 | 103 | void APacesend(); |
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 | 0:894a7ad8ea79 | 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 | 0:894a7ad8ea79 | 180 | void AorVPacesend() |
sanjeet25 | 0:894a7ad8ea79 | 181 | { |
sanjeet25 | 0:894a7ad8ea79 | 182 | Thread::signal_wait(0x01); |
sanjeet25 | 0:894a7ad8ea79 | 183 | if(aPace) { |
sanjeet25 | 0:894a7ad8ea79 | 184 | APace=1; |
sanjeet25 | 0:894a7ad8ea79 | 185 | VPace1=0; |
sanjeet25 | 0:894a7ad8ea79 | 186 | APace1=1; |
sanjeet25 | 0:894a7ad8ea79 | 187 | VPace=0; |
sanjeet25 | 0:894a7ad8ea79 | 188 | } else { |
sanjeet25 | 0:894a7ad8ea79 | 189 | |
sanjeet25 | 0:894a7ad8ea79 | 190 | VPace=1; |
sanjeet25 | 0:894a7ad8ea79 | 191 | VPace1=1; |
sanjeet25 | 0:894a7ad8ea79 | 192 | APace=0; |
sanjeet25 | 0:894a7ad8ea79 | 193 | APace1=0; |
sanjeet25 | 0:894a7ad8ea79 | 194 | } |
sanjeet25 | 0:894a7ad8ea79 | 195 | } |
sanjeet25 | 0:894a7ad8ea79 | 196 | |
sanjeet25 | 0:894a7ad8ea79 | 197 | void ASignalreceive() |
sanjeet25 | 0:894a7ad8ea79 | 198 | { |
sanjeet25 | 0:894a7ad8ea79 | 199 | pc.printf("ASignalreceive"); |
sanjeet25 | 0:894a7ad8ea79 | 200 | asig=true; |
sanjeet25 | 0:894a7ad8ea79 | 201 | vsig=false; |
sanjeet25 | 0:894a7ad8ea79 | 202 | } |
sanjeet25 | 0:894a7ad8ea79 | 203 | |
sanjeet25 | 0:894a7ad8ea79 | 204 | void VSignalreceive() |
sanjeet25 | 0:894a7ad8ea79 | 205 | { |
sanjeet25 | 0:894a7ad8ea79 | 206 | pc.printf("VSignalreceive"); |
sanjeet25 | 0:894a7ad8ea79 | 207 | vsig=true; |
sanjeet25 | 0:894a7ad8ea79 | 208 | asig=false; |
sanjeet25 | 0:894a7ad8ea79 | 209 | } |
sanjeet25 | 0:894a7ad8ea79 | 210 | |
sanjeet25 | 0:894a7ad8ea79 | 211 | void ASensesend() |
sanjeet25 | 0:894a7ad8ea79 | 212 | { |
sanjeet25 | 0:894a7ad8ea79 | 213 | pc.printf("ASensesend"); |
sanjeet25 | 0:894a7ad8ea79 | 214 | ASense=1; |
sanjeet25 | 0:894a7ad8ea79 | 215 | wait(0.002); |
sanjeet25 | 0:894a7ad8ea79 | 216 | ASense=0; |
sanjeet25 | 0:894a7ad8ea79 | 217 | } |
sanjeet25 | 0:894a7ad8ea79 | 218 | |
sanjeet25 | 0:894a7ad8ea79 | 219 | |
sanjeet25 | 0:894a7ad8ea79 | 220 | void sound_HighAlarm() |
sanjeet25 | 0:894a7ad8ea79 | 221 | { |
sanjeet25 | 0:894a7ad8ea79 | 222 | pc.printf("high"); |
sanjeet25 | 0:894a7ad8ea79 | 223 | HighAl=1; |
sanjeet25 | 0:894a7ad8ea79 | 224 | LowAl=0; |
sanjeet25 | 0:894a7ad8ea79 | 225 | } |
sanjeet25 | 0:894a7ad8ea79 | 226 | void sound_LowAlarm() |
sanjeet25 | 0:894a7ad8ea79 | 227 | { |
sanjeet25 | 0:894a7ad8ea79 | 228 | pc.printf("low"); |
sanjeet25 | 0:894a7ad8ea79 | 229 | LowAl=1; |
sanjeet25 | 0:894a7ad8ea79 | 230 | HighAl=0; |
sanjeet25 | 0:894a7ad8ea79 | 231 | } |
sanjeet25 | 0:894a7ad8ea79 | 232 | |
sanjeet25 | 0:894a7ad8ea79 | 233 | void updatePacemaker() |
sanjeet25 | 0:894a7ad8ea79 | 234 | { |
sanjeet25 | 0:894a7ad8ea79 | 235 | int temp = 60/pacemakerInterval; |
sanjeet25 | 0:894a7ad8ea79 | 236 | pacemakerRate = pacemakerRate + temp; |
sanjeet25 | 0:894a7ad8ea79 | 237 | } |
sanjeet25 | 0:894a7ad8ea79 | 238 | void VSensesend() |
sanjeet25 | 0:894a7ad8ea79 | 239 | { |
sanjeet25 | 0:894a7ad8ea79 | 240 | pc.printf("VSensesend"); |
sanjeet25 | 0:894a7ad8ea79 | 241 | VSense=1; |
sanjeet25 | 0:894a7ad8ea79 | 242 | wait(0.002); |
sanjeet25 | 0:894a7ad8ea79 | 243 | VSense=0; |
sanjeet25 | 0:894a7ad8ea79 | 244 | } |
sanjeet25 | 0:894a7ad8ea79 | 245 | |
sanjeet25 | 0:894a7ad8ea79 | 246 | void PacemakerVentricalEvent(void const* args) |
sanjeet25 | 0:894a7ad8ea79 | 247 | { |
sanjeet25 | 0:894a7ad8ea79 | 248 | pc.printf("enteredpventricalevent"); |
sanjeet25 | 0:894a7ad8ea79 | 249 | while(1) { |
sanjeet25 | 0:894a7ad8ea79 | 250 | switch(pventrical) { |
sanjeet25 | 0:894a7ad8ea79 | 251 | case AWait: |
sanjeet25 | 0:894a7ad8ea79 | 252 | while(vsig==false||ASense==0||VPace==0); |
sanjeet25 | 0:894a7ad8ea79 | 253 | if(vsig==true) { |
sanjeet25 | 0:894a7ad8ea79 | 254 | pc.printf("vsig in"); |
sanjeet25 | 0:894a7ad8ea79 | 255 | VSensesend(); |
sanjeet25 | 0:894a7ad8ea79 | 256 | pventrical=AWait; |
sanjeet25 | 0:894a7ad8ea79 | 257 | break; |
sanjeet25 | 0:894a7ad8ea79 | 258 | } else if(ASense==1) { |
sanjeet25 | 0:894a7ad8ea79 | 259 | resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 260 | } else if(APace==1) { |
sanjeet25 | 0:894a7ad8ea79 | 261 | resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 262 | } |
sanjeet25 | 0:894a7ad8ea79 | 263 | while(time_count<PVAB); |
sanjeet25 | 0:894a7ad8ea79 | 264 | while(vsig==false||VPace==0); |
sanjeet25 | 0:894a7ad8ea79 | 265 | if(vsig==true) |
sanjeet25 | 0:894a7ad8ea79 | 266 | pc.printf("vsig in"); |
sanjeet25 | 0:894a7ad8ea79 | 267 | VSensesend(); |
sanjeet25 | 0:894a7ad8ea79 | 268 | resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 269 | while(time_count<VRP); |
sanjeet25 | 0:894a7ad8ea79 | 270 | break; |
sanjeet25 | 0:894a7ad8ea79 | 271 | } |
sanjeet25 | 0:894a7ad8ea79 | 272 | } |
sanjeet25 | 0:894a7ad8ea79 | 273 | } |
sanjeet25 | 0:894a7ad8ea79 | 274 | |
sanjeet25 | 0:894a7ad8ea79 | 275 | void PacemakerSend(void const* args) |
sanjeet25 | 0:894a7ad8ea79 | 276 | { |
sanjeet25 | 0:894a7ad8ea79 | 277 | pc.printf("enteredpsend"); |
sanjeet25 | 0:894a7ad8ea79 | 278 | while(1) { |
sanjeet25 | 0:894a7ad8ea79 | 279 | switch(psend) { |
sanjeet25 | 0:894a7ad8ea79 | 280 | case AVIEvent: |
sanjeet25 | 0:894a7ad8ea79 | 281 | while(time_count<AVI||VSense==0||mode!=Manual); |
sanjeet25 | 0:894a7ad8ea79 | 282 | if(time_count>=AVI) { |
sanjeet25 | 0:894a7ad8ea79 | 283 | VPacesend(); |
sanjeet25 | 0:894a7ad8ea79 | 284 | psend=VentricalEvent; |
sanjeet25 | 0:894a7ad8ea79 | 285 | } else if(mode==Manual) { |
sanjeet25 | 0:894a7ad8ea79 | 286 | while (mode==Manual); |
sanjeet25 | 0:894a7ad8ea79 | 287 | psend=AVIEvent; |
sanjeet25 | 0:894a7ad8ea79 | 288 | } else if(VSense==1) |
sanjeet25 | 0:894a7ad8ea79 | 289 | psend=VentricalEvent; |
sanjeet25 | 0:894a7ad8ea79 | 290 | break; |
sanjeet25 | 0:894a7ad8ea79 | 291 | case VentricalEvent: |
sanjeet25 | 0:894a7ad8ea79 | 292 | while(ASense==0||time_count<LRI||VSense==0||mode!=Manual); |
sanjeet25 | 0:894a7ad8ea79 | 293 | if(ASense==1) { |
sanjeet25 | 0:894a7ad8ea79 | 294 | if(mode==Manual) { |
sanjeet25 | 0:894a7ad8ea79 | 295 | while(mode==Manual); |
sanjeet25 | 0:894a7ad8ea79 | 296 | psend=AVIEvent; |
sanjeet25 | 0:894a7ad8ea79 | 297 | } else if(VSense==1) { |
sanjeet25 | 0:894a7ad8ea79 | 298 | resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 299 | psend=PostVSense; |
sanjeet25 | 0:894a7ad8ea79 | 300 | } else { |
sanjeet25 | 0:894a7ad8ea79 | 301 | resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 302 | psend=AVIEvent; |
sanjeet25 | 0:894a7ad8ea79 | 303 | } |
sanjeet25 | 0:894a7ad8ea79 | 304 | } |
sanjeet25 | 0:894a7ad8ea79 | 305 | break; |
sanjeet25 | 0:894a7ad8ea79 | 306 | case PostVSense: |
sanjeet25 | 0:894a7ad8ea79 | 307 | while(mode!=Manual||ASense==0||time_count<LRI-AVI); |
sanjeet25 | 0:894a7ad8ea79 | 308 | if(mode==Manual) { |
sanjeet25 | 0:894a7ad8ea79 | 309 | while(mode==Manual); |
sanjeet25 | 0:894a7ad8ea79 | 310 | psend=AVIEvent; |
sanjeet25 | 0:894a7ad8ea79 | 311 | } else if(ASense==1) { |
sanjeet25 | 0:894a7ad8ea79 | 312 | if(mode==Manual) { |
sanjeet25 | 0:894a7ad8ea79 | 313 | while(mode==Manual); |
sanjeet25 | 0:894a7ad8ea79 | 314 | } else { |
sanjeet25 | 0:894a7ad8ea79 | 315 | resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 316 | psend=AVIEvent; |
sanjeet25 | 0:894a7ad8ea79 | 317 | } |
sanjeet25 | 0:894a7ad8ea79 | 318 | } else if(time_count>=LRI-AVI) { |
sanjeet25 | 0:894a7ad8ea79 | 319 | while(mode!=Manual); |
sanjeet25 | 0:894a7ad8ea79 | 320 | while(mode==Manual); |
sanjeet25 | 0:894a7ad8ea79 | 321 | psend=AVIEvent; |
sanjeet25 | 0:894a7ad8ea79 | 322 | } |
sanjeet25 | 0:894a7ad8ea79 | 323 | break; |
sanjeet25 | 0:894a7ad8ea79 | 324 | } |
sanjeet25 | 0:894a7ad8ea79 | 325 | |
sanjeet25 | 0:894a7ad8ea79 | 326 | } |
sanjeet25 | 0:894a7ad8ea79 | 327 | } |
sanjeet25 | 0:894a7ad8ea79 | 328 | |
sanjeet25 | 0:894a7ad8ea79 | 329 | void PacemakerAtrial(void const* args) |
sanjeet25 | 0:894a7ad8ea79 | 330 | { |
sanjeet25 | 0:894a7ad8ea79 | 331 | pc.printf("enteredpatrial"); |
sanjeet25 | 0:894a7ad8ea79 | 332 | while(1) { |
sanjeet25 | 0:894a7ad8ea79 | 333 | while(asig==false||APace==0); |
sanjeet25 | 0:894a7ad8ea79 | 334 | if(asig==1) { |
sanjeet25 | 0:894a7ad8ea79 | 335 | pc.printf("asig in"); |
sanjeet25 | 0:894a7ad8ea79 | 336 | ASensesend(); |
sanjeet25 | 0:894a7ad8ea79 | 337 | } |
sanjeet25 | 0:894a7ad8ea79 | 338 | resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 339 | while(VSense==0||VPace==0); |
sanjeet25 | 0:894a7ad8ea79 | 340 | resetTimer1(); |
sanjeet25 | 0:894a7ad8ea79 | 341 | while(time_count<PVARP); |
sanjeet25 | 0:894a7ad8ea79 | 342 | while(time1_count<URI); |
sanjeet25 | 0:894a7ad8ea79 | 343 | |
sanjeet25 | 0:894a7ad8ea79 | 344 | } |
sanjeet25 | 0:894a7ad8ea79 | 345 | |
sanjeet25 | 0:894a7ad8ea79 | 346 | } |
sanjeet25 | 0:894a7ad8ea79 | 347 | void PacemakerModes(void const* args) |
sanjeet25 | 0:894a7ad8ea79 | 348 | { |
sanjeet25 | 0:894a7ad8ea79 | 349 | pc.printf("enteredpmodes"); |
sanjeet25 | 0:894a7ad8ea79 | 350 | while(1) { |
sanjeet25 | 0:894a7ad8ea79 | 351 | if(pc.readable()) { |
sanjeet25 | 0:894a7ad8ea79 | 352 | key_input = pc.getc(); |
sanjeet25 | 0:894a7ad8ea79 | 353 | if((key_input=='n'||key_input=='N')&&!changePacemakerInterval) { |
sanjeet25 | 0:894a7ad8ea79 | 354 | mode = Normal; |
sanjeet25 | 0:894a7ad8ea79 | 355 | pc.printf("Normal"); |
sanjeet25 | 0:894a7ad8ea79 | 356 | LRI=normalModeLRI; |
sanjeet25 | 0:894a7ad8ea79 | 357 | URI=normalModeURI; |
sanjeet25 | 0:894a7ad8ea79 | 358 | // (*Pace).signal_set(0x01); |
sanjeet25 | 0:894a7ad8ea79 | 359 | //resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 360 | modeset=0; |
sanjeet25 | 0:894a7ad8ea79 | 361 | } else if((key_input=='s'||key_input=='S')&&!changePacemakerInterval) { |
sanjeet25 | 0:894a7ad8ea79 | 362 | mode=Sleep; |
sanjeet25 | 0:894a7ad8ea79 | 363 | pc.printf("Sleep"); |
sanjeet25 | 0:894a7ad8ea79 | 364 | modeset=1; |
sanjeet25 | 0:894a7ad8ea79 | 365 | LRI=sleepModeLRI; |
sanjeet25 | 0:894a7ad8ea79 | 366 | URI=sleepModeURI; |
sanjeet25 | 0:894a7ad8ea79 | 367 | // (*Pace).signal_set(0x01); |
sanjeet25 | 0:894a7ad8ea79 | 368 | //resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 369 | } else if((key_input=='e'||key_input=='E')&&!changePacemakerInterval) { |
sanjeet25 | 0:894a7ad8ea79 | 370 | mode=Sports; |
sanjeet25 | 0:894a7ad8ea79 | 371 | pc.printf("Exercise"); |
sanjeet25 | 0:894a7ad8ea79 | 372 | modeset=2; |
sanjeet25 | 0:894a7ad8ea79 | 373 | LRI=sportsModeLRI; |
sanjeet25 | 0:894a7ad8ea79 | 374 | URI=sportsModeURI; |
sanjeet25 | 0:894a7ad8ea79 | 375 | // (*Pace).signal_set(0x01); |
sanjeet25 | 0:894a7ad8ea79 | 376 | //resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 377 | } else if((key_input=='m'||key_input=='M')&&!changePacemakerInterval) { |
sanjeet25 | 0:894a7ad8ea79 | 378 | mode=Manual; |
sanjeet25 | 0:894a7ad8ea79 | 379 | modeset=3; |
sanjeet25 | 0:894a7ad8ea79 | 380 | LRI=manualModeLRI; |
sanjeet25 | 0:894a7ad8ea79 | 381 | URI=manualModeURI; |
sanjeet25 | 0:894a7ad8ea79 | 382 | aPace=true; |
sanjeet25 | 0:894a7ad8ea79 | 383 | //(*Pace).signal_set(0x02); |
sanjeet25 | 0:894a7ad8ea79 | 384 | pc.printf("Manual"); |
sanjeet25 | 0:894a7ad8ea79 | 385 | } else if((key_input=='v'||key_input=='V')&& !changePacemakerInterval) { |
sanjeet25 | 0:894a7ad8ea79 | 386 | if(mode==Manual) { |
sanjeet25 | 0:894a7ad8ea79 | 387 | pc.printf("Ventricular"); |
sanjeet25 | 0:894a7ad8ea79 | 388 | VPacesend(); |
sanjeet25 | 0:894a7ad8ea79 | 389 | aPace=false; |
sanjeet25 | 0:894a7ad8ea79 | 390 | (*Pace).signal_set(0x02); |
sanjeet25 | 0:894a7ad8ea79 | 391 | } |
sanjeet25 | 0:894a7ad8ea79 | 392 | } else if((key_input=='a'||key_input=='A')&&!changePacemakerInterval) { |
sanjeet25 | 0:894a7ad8ea79 | 393 | if(mode==Manual) { |
sanjeet25 | 0:894a7ad8ea79 | 394 | APacesend(); |
sanjeet25 | 0:894a7ad8ea79 | 395 | pc.printf("Atrial"); |
sanjeet25 | 0:894a7ad8ea79 | 396 | aPace=true; |
sanjeet25 | 0:894a7ad8ea79 | 397 | (*Pace).signal_set(0x02); |
sanjeet25 | 0:894a7ad8ea79 | 398 | } |
sanjeet25 | 0:894a7ad8ea79 | 399 | } else if((key_input=='o'||key_input=='O')&&!changePacemakerInterval) { |
sanjeet25 | 0:894a7ad8ea79 | 400 | int a = 10 + rand() % 80; |
sanjeet25 | 0:894a7ad8ea79 | 401 | mode=Observer; |
sanjeet25 | 0:894a7ad8ea79 | 402 | pc.printf("Observer and %u",a); |
sanjeet25 | 0:894a7ad8ea79 | 403 | pacemakerInterval =a; |
sanjeet25 | 0:894a7ad8ea79 | 404 | } |
sanjeet25 | 0:894a7ad8ea79 | 405 | |
sanjeet25 | 0:894a7ad8ea79 | 406 | } |
sanjeet25 | 0:894a7ad8ea79 | 407 | } |
sanjeet25 | 0:894a7ad8ea79 | 408 | } |
sanjeet25 | 0:894a7ad8ea79 | 409 | |
sanjeet25 | 0:894a7ad8ea79 | 410 | //void PacemakerDisplay(void const* args) |
sanjeet25 | 0:894a7ad8ea79 | 411 | //{ pc.printf("enteredpdisplay"); |
sanjeet25 | 0:894a7ad8ea79 | 412 | // while(1) { |
sanjeet25 | 0:894a7ad8ea79 | 413 | // while(VPace==0||VSense==0) { |
sanjeet25 | 0:894a7ad8ea79 | 414 | // if(time_count<=pacemakerInterval*1000); |
sanjeet25 | 0:894a7ad8ea79 | 415 | // updatePacemaker(); |
sanjeet25 | 0:894a7ad8ea79 | 416 | // } |
sanjeet25 | 0:894a7ad8ea79 | 417 | // pc.printf("%u",pacemakerRate); |
sanjeet25 | 0:894a7ad8ea79 | 418 | // while(time_count<=pacemakerInterval*1000); |
sanjeet25 | 0:894a7ad8ea79 | 419 | // if(pacemakerRate<low[modeset]) { |
sanjeet25 | 0:894a7ad8ea79 | 420 | // resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 421 | // sound_LowAlarm(); |
sanjeet25 | 0:894a7ad8ea79 | 422 | // pc.printf("low"); |
sanjeet25 | 0:894a7ad8ea79 | 423 | // } else if(pacemakerRate>high[modeset]) { |
sanjeet25 | 0:894a7ad8ea79 | 424 | // resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 425 | // pc.printf("high"); |
sanjeet25 | 0:894a7ad8ea79 | 426 | // sound_HighAlarm(); |
sanjeet25 | 0:894a7ad8ea79 | 427 | // } else if(pacemakerRate<=high[modeset]&&pacemakerRate<=low[modeset]) { |
sanjeet25 | 0:894a7ad8ea79 | 428 | // resetTimer0(); |
sanjeet25 | 0:894a7ad8ea79 | 429 | // pc.printf("Normal"); |
sanjeet25 | 0:894a7ad8ea79 | 430 | // } |
sanjeet25 | 0:894a7ad8ea79 | 431 | // } |
sanjeet25 | 0:894a7ad8ea79 | 432 | // |
sanjeet25 | 0:894a7ad8ea79 | 433 | //} |
sanjeet25 | 0:894a7ad8ea79 | 434 | |
sanjeet25 | 0:894a7ad8ea79 | 435 | int main () |
sanjeet25 | 0:894a7ad8ea79 | 436 | { |
sanjeet25 | 0:894a7ad8ea79 | 437 | pc.baud(9600); |
sanjeet25 | 0:894a7ad8ea79 | 438 | VSignal.rise(&VSignalreceive); |
sanjeet25 | 0:894a7ad8ea79 | 439 | ASignal.rise(&ASignalreceive); |
sanjeet25 | 0:894a7ad8ea79 | 440 | timer0_init(); |
sanjeet25 | 0:894a7ad8ea79 | 441 | timer1_init(); |
sanjeet25 | 0:894a7ad8ea79 | 442 | Thread patrial(PacemakerAtrial); |
sanjeet25 | 0:894a7ad8ea79 | 443 | pa=&patrial; |
sanjeet25 | 0:894a7ad8ea79 | 444 | Thread pventrical(PacemakerVentricalEvent); |
sanjeet25 | 0:894a7ad8ea79 | 445 | pv=&pventrical; |
sanjeet25 | 0:894a7ad8ea79 | 446 | Thread pacesend(PacemakerSend); |
sanjeet25 | 0:894a7ad8ea79 | 447 | psend=&pacesend; |
sanjeet25 | 0:894a7ad8ea79 | 448 | Thread pmodes(PacemakerModes); |
sanjeet25 | 0:894a7ad8ea79 | 449 | pmode=&pmodes; |
sanjeet25 | 0:894a7ad8ea79 | 450 | //Thread pdisplay(PacemakerDisplay); |
sanjeet25 | 0:894a7ad8ea79 | 451 | |
sanjeet25 | 0:894a7ad8ea79 | 452 | |
sanjeet25 | 0:894a7ad8ea79 | 453 | while(1) { |
sanjeet25 | 0:894a7ad8ea79 | 454 | } |
sanjeet25 | 0:894a7ad8ea79 | 455 | } |