CIS541 / Mbed 2 deprecated Pacemaker2asd

Dependencies:   TextLCD mbed-rtos mbed

Committer:
sanjeet25
Date:
Mon Nov 30 22:54:14 2015 +0000
Revision:
2:c38a47cdb0db
Parent:
1:d965ae2443b9
a

Who changed what in which revision?

UserRevisionLine numberNew 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 }