CIS541 / Mbed 2 deprecated Pacemaker2asd

Dependencies:   TextLCD mbed-rtos mbed

Committer:
sanjeet25
Date:
Mon Nov 30 22:23:09 2015 +0000
Revision:
1:d965ae2443b9
Parent:
0:894a7ad8ea79
Child:
2:c38a47cdb0db
pacemaker_new

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 1:d965ae2443b9 104 //void APacesend();
sanjeet25 0:894a7ad8ea79 105 void ASignalreceive();
sanjeet25 0:894a7ad8ea79 106 void VSignalreceive();
sanjeet25 0:894a7ad8ea79 107 void PacemakerAtrial();
sanjeet25 0:894a7ad8ea79 108 void PacemakerModes();
sanjeet25 0:894a7ad8ea79 109 void timer0_init();
sanjeet25 0:894a7ad8ea79 110 void timer1_init();
sanjeet25 0:894a7ad8ea79 111 void ASignalreceive();
sanjeet25 0:894a7ad8ea79 112 void updatePacemaker();
sanjeet25 0:894a7ad8ea79 113 void VSignalreceive();
sanjeet25 0:894a7ad8ea79 114 void PacemakerVentricularInterval();
sanjeet25 0:894a7ad8ea79 115
sanjeet25 0:894a7ad8ea79 116 extern "C" void TIMER0_IRQHandler (void)
sanjeet25 0:894a7ad8ea79 117 {
sanjeet25 0:894a7ad8ea79 118 if((LPC_TIM0->IR & 0x01) == 0x01) { // if interrupt provided, continue to next line
sanjeet25 0:894a7ad8ea79 119 LPC_TIM0->IR |= 1 << 0; // Clear MR0 interrupt flag
sanjeet25 0:894a7ad8ea79 120 time_count++; //increment time_count
sanjeet25 0:894a7ad8ea79 121 }
sanjeet25 0:894a7ad8ea79 122 }
sanjeet25 0:894a7ad8ea79 123
sanjeet25 0:894a7ad8ea79 124 void timer0_init(void)
sanjeet25 0:894a7ad8ea79 125 {
sanjeet25 0:894a7ad8ea79 126 LPC_SC->PCONP |=1<1; //power on the timer
sanjeet25 0:894a7ad8ea79 127 LPC_TIM0->MR0 = 23980; //10 msec period i.e the timer count will increment every 10ms
sanjeet25 0:894a7ad8ea79 128 LPC_TIM0->MCR = 3; //reset control
sanjeet25 0:894a7ad8ea79 129 //3 = Interrupt & reset timer0 on match
sanjeet25 0:894a7ad8ea79 130 //1 = Interrupt only, no reset
sanjeet25 0:894a7ad8ea79 131 NVIC_EnableIRQ(TIMER0_IRQn); //enable interrupt
sanjeet25 0:894a7ad8ea79 132 LPC_TIM0->TCR = 1; //enable the timer
sanjeet25 0:894a7ad8ea79 133
sanjeet25 0:894a7ad8ea79 134 }
sanjeet25 0:894a7ad8ea79 135
sanjeet25 0:894a7ad8ea79 136 extern "C" void TIMER1_IRQHandler (void)
sanjeet25 0:894a7ad8ea79 137 {
sanjeet25 0:894a7ad8ea79 138 if((LPC_TIM1->IR & 0x01) == 0x01) { // if interrupt provided, continue to next line
sanjeet25 0:894a7ad8ea79 139 LPC_TIM1->IR |= 1 << 0; // Clear MR0 interrupt flag
sanjeet25 0:894a7ad8ea79 140 time1_count++; //increment time_count
sanjeet25 0:894a7ad8ea79 141 }
sanjeet25 0:894a7ad8ea79 142 }
sanjeet25 0:894a7ad8ea79 143
sanjeet25 0:894a7ad8ea79 144 void timer1_init(void)
sanjeet25 0:894a7ad8ea79 145 {
sanjeet25 0:894a7ad8ea79 146 LPC_SC->PCONP |=1<1; //power on the timer
sanjeet25 0:894a7ad8ea79 147 LPC_TIM1->MR0 = 23980; //10 msec period i.e the timer count will increment every 10ms
sanjeet25 0:894a7ad8ea79 148 LPC_TIM1->MCR = 3; //reset control
sanjeet25 0:894a7ad8ea79 149 //3 = Interrupt & reset timer0 on match
sanjeet25 0:894a7ad8ea79 150 //1 = Interrupt only, no reset
sanjeet25 0:894a7ad8ea79 151 NVIC_EnableIRQ(TIMER1_IRQn); //enable interrupt
sanjeet25 0:894a7ad8ea79 152 LPC_TIM1->TCR = 1; //enable the timer
sanjeet25 0:894a7ad8ea79 153
sanjeet25 0:894a7ad8ea79 154 }
sanjeet25 0:894a7ad8ea79 155
sanjeet25 0:894a7ad8ea79 156 void resetTimer0()
sanjeet25 0:894a7ad8ea79 157 {
sanjeet25 0:894a7ad8ea79 158 time_count;
sanjeet25 0:894a7ad8ea79 159 LPC_TIM0->TCR = 0;
sanjeet25 0:894a7ad8ea79 160 lcd.locate(0,0);
sanjeet25 0:894a7ad8ea79 161 lcd.printf("%02d:%02d:%02d", m,s,ms);
sanjeet25 0:894a7ad8ea79 162 }
sanjeet25 0:894a7ad8ea79 163
sanjeet25 0:894a7ad8ea79 164 void resetTimer1()
sanjeet25 0:894a7ad8ea79 165 {
sanjeet25 0:894a7ad8ea79 166 time1_count=0;
sanjeet25 0:894a7ad8ea79 167 LPC_TIM1->TCR = 0;
sanjeet25 0:894a7ad8ea79 168 lcd.locate(0,0);
sanjeet25 0:894a7ad8ea79 169 lcd.printf("%02d:%02d:%02d", m,s,ms);
sanjeet25 0:894a7ad8ea79 170 }
sanjeet25 0:894a7ad8ea79 171
sanjeet25 0:894a7ad8ea79 172
sanjeet25 0:894a7ad8ea79 173 //void VPacesend()
sanjeet25 0:894a7ad8ea79 174 //{
sanjeet25 0:894a7ad8ea79 175 // VPace=1;
sanjeet25 0:894a7ad8ea79 176 // VPace1=1;
sanjeet25 0:894a7ad8ea79 177 // APace=0;
sanjeet25 0:894a7ad8ea79 178 // APace1=0;
sanjeet25 0:894a7ad8ea79 179 //}
sanjeet25 0:894a7ad8ea79 180
sanjeet25 1:d965ae2443b9 181 void AorVPacesend(void const* args)
sanjeet25 0:894a7ad8ea79 182 {
sanjeet25 0:894a7ad8ea79 183 Thread::signal_wait(0x01);
sanjeet25 0:894a7ad8ea79 184 if(aPace) {
sanjeet25 1:d965ae2443b9 185 pc.printf("Sending APace");
sanjeet25 0:894a7ad8ea79 186 APace=1;
sanjeet25 0:894a7ad8ea79 187 VPace1=0;
sanjeet25 0:894a7ad8ea79 188 APace1=1;
sanjeet25 0:894a7ad8ea79 189 VPace=0;
sanjeet25 0:894a7ad8ea79 190 } else {
sanjeet25 1:d965ae2443b9 191 pc.printf("Sending VPace");
sanjeet25 0:894a7ad8ea79 192 VPace=1;
sanjeet25 0:894a7ad8ea79 193 VPace1=1;
sanjeet25 0:894a7ad8ea79 194 APace=0;
sanjeet25 0:894a7ad8ea79 195 APace1=0;
sanjeet25 0:894a7ad8ea79 196 }
sanjeet25 0:894a7ad8ea79 197 }
sanjeet25 0:894a7ad8ea79 198
sanjeet25 0:894a7ad8ea79 199 void ASignalreceive()
sanjeet25 0:894a7ad8ea79 200 {
sanjeet25 0:894a7ad8ea79 201 pc.printf("ASignalreceive");
sanjeet25 0:894a7ad8ea79 202 asig=true;
sanjeet25 0:894a7ad8ea79 203 vsig=false;
sanjeet25 0:894a7ad8ea79 204 }
sanjeet25 0:894a7ad8ea79 205
sanjeet25 0:894a7ad8ea79 206 void VSignalreceive()
sanjeet25 0:894a7ad8ea79 207 {
sanjeet25 0:894a7ad8ea79 208 pc.printf("VSignalreceive");
sanjeet25 0:894a7ad8ea79 209 vsig=true;
sanjeet25 0:894a7ad8ea79 210 asig=false;
sanjeet25 0:894a7ad8ea79 211 }
sanjeet25 0:894a7ad8ea79 212
sanjeet25 0:894a7ad8ea79 213 void ASensesend()
sanjeet25 0:894a7ad8ea79 214 {
sanjeet25 0:894a7ad8ea79 215 pc.printf("ASensesend");
sanjeet25 0:894a7ad8ea79 216 ASense=1;
sanjeet25 0:894a7ad8ea79 217 wait(0.002);
sanjeet25 0:894a7ad8ea79 218 ASense=0;
sanjeet25 0:894a7ad8ea79 219 }
sanjeet25 0:894a7ad8ea79 220
sanjeet25 0:894a7ad8ea79 221
sanjeet25 0:894a7ad8ea79 222 void sound_HighAlarm()
sanjeet25 0:894a7ad8ea79 223 {
sanjeet25 0:894a7ad8ea79 224 pc.printf("high");
sanjeet25 0:894a7ad8ea79 225 HighAl=1;
sanjeet25 0:894a7ad8ea79 226 LowAl=0;
sanjeet25 0:894a7ad8ea79 227 }
sanjeet25 0:894a7ad8ea79 228 void sound_LowAlarm()
sanjeet25 0:894a7ad8ea79 229 {
sanjeet25 0:894a7ad8ea79 230 pc.printf("low");
sanjeet25 0:894a7ad8ea79 231 LowAl=1;
sanjeet25 0:894a7ad8ea79 232 HighAl=0;
sanjeet25 0:894a7ad8ea79 233 }
sanjeet25 0:894a7ad8ea79 234
sanjeet25 0:894a7ad8ea79 235 void updatePacemaker()
sanjeet25 0:894a7ad8ea79 236 {
sanjeet25 0:894a7ad8ea79 237 int temp = 60/pacemakerInterval;
sanjeet25 0:894a7ad8ea79 238 pacemakerRate = pacemakerRate + temp;
sanjeet25 0:894a7ad8ea79 239 }
sanjeet25 0:894a7ad8ea79 240 void VSensesend()
sanjeet25 0:894a7ad8ea79 241 {
sanjeet25 0:894a7ad8ea79 242 pc.printf("VSensesend");
sanjeet25 0:894a7ad8ea79 243 VSense=1;
sanjeet25 0:894a7ad8ea79 244 wait(0.002);
sanjeet25 0:894a7ad8ea79 245 VSense=0;
sanjeet25 0:894a7ad8ea79 246 }
sanjeet25 0:894a7ad8ea79 247
sanjeet25 0:894a7ad8ea79 248 void PacemakerVentricalEvent(void const* args)
sanjeet25 0:894a7ad8ea79 249 {
sanjeet25 0:894a7ad8ea79 250 pc.printf("enteredpventricalevent");
sanjeet25 0:894a7ad8ea79 251 while(1) {
sanjeet25 0:894a7ad8ea79 252 switch(pventrical) {
sanjeet25 0:894a7ad8ea79 253 case AWait:
sanjeet25 0:894a7ad8ea79 254 while(vsig==false||ASense==0||VPace==0);
sanjeet25 0:894a7ad8ea79 255 if(vsig==true) {
sanjeet25 0:894a7ad8ea79 256 pc.printf("vsig in");
sanjeet25 0:894a7ad8ea79 257 VSensesend();
sanjeet25 0:894a7ad8ea79 258 pventrical=AWait;
sanjeet25 0:894a7ad8ea79 259 break;
sanjeet25 0:894a7ad8ea79 260 } else if(ASense==1) {
sanjeet25 0:894a7ad8ea79 261 resetTimer0();
sanjeet25 0:894a7ad8ea79 262 } else if(APace==1) {
sanjeet25 0:894a7ad8ea79 263 resetTimer0();
sanjeet25 0:894a7ad8ea79 264 }
sanjeet25 0:894a7ad8ea79 265 while(time_count<PVAB);
sanjeet25 0:894a7ad8ea79 266 while(vsig==false||VPace==0);
sanjeet25 0:894a7ad8ea79 267 if(vsig==true)
sanjeet25 0:894a7ad8ea79 268 pc.printf("vsig in");
sanjeet25 0:894a7ad8ea79 269 VSensesend();
sanjeet25 0:894a7ad8ea79 270 resetTimer0();
sanjeet25 0:894a7ad8ea79 271 while(time_count<VRP);
sanjeet25 0:894a7ad8ea79 272 break;
sanjeet25 0:894a7ad8ea79 273 }
sanjeet25 0:894a7ad8ea79 274 }
sanjeet25 0:894a7ad8ea79 275 }
sanjeet25 0:894a7ad8ea79 276
sanjeet25 0:894a7ad8ea79 277 void PacemakerSend(void const* args)
sanjeet25 0:894a7ad8ea79 278 {
sanjeet25 0:894a7ad8ea79 279 pc.printf("enteredpsend");
sanjeet25 0:894a7ad8ea79 280 while(1) {
sanjeet25 1:d965ae2443b9 281 switch(psend1) {
sanjeet25 0:894a7ad8ea79 282 case AVIEvent:
sanjeet25 0:894a7ad8ea79 283 while(time_count<AVI||VSense==0||mode!=Manual);
sanjeet25 0:894a7ad8ea79 284 if(time_count>=AVI) {
sanjeet25 1:d965ae2443b9 285 (*aorv).signal_set(0x01);
sanjeet25 1:d965ae2443b9 286 //AorVPacesend("s");
sanjeet25 1:d965ae2443b9 287 psend1=VentricalEvent;
sanjeet25 0:894a7ad8ea79 288 } else if(mode==Manual) {
sanjeet25 0:894a7ad8ea79 289 while (mode==Manual);
sanjeet25 1:d965ae2443b9 290 psend1=AVIEvent;
sanjeet25 0:894a7ad8ea79 291 } else if(VSense==1)
sanjeet25 1:d965ae2443b9 292 psend1=VentricalEvent;
sanjeet25 0:894a7ad8ea79 293 break;
sanjeet25 0:894a7ad8ea79 294 case VentricalEvent:
sanjeet25 0:894a7ad8ea79 295 while(ASense==0||time_count<LRI||VSense==0||mode!=Manual);
sanjeet25 0:894a7ad8ea79 296 if(ASense==1) {
sanjeet25 0:894a7ad8ea79 297 if(mode==Manual) {
sanjeet25 0:894a7ad8ea79 298 while(mode==Manual);
sanjeet25 1:d965ae2443b9 299 psend1=AVIEvent;
sanjeet25 0:894a7ad8ea79 300 } else if(VSense==1) {
sanjeet25 0:894a7ad8ea79 301 resetTimer0();
sanjeet25 1:d965ae2443b9 302 psend1=PostVSense;
sanjeet25 0:894a7ad8ea79 303 } else {
sanjeet25 0:894a7ad8ea79 304 resetTimer0();
sanjeet25 1:d965ae2443b9 305 psend1=AVIEvent;
sanjeet25 0:894a7ad8ea79 306 }
sanjeet25 0:894a7ad8ea79 307 }
sanjeet25 0:894a7ad8ea79 308 break;
sanjeet25 0:894a7ad8ea79 309 case PostVSense:
sanjeet25 0:894a7ad8ea79 310 while(mode!=Manual||ASense==0||time_count<LRI-AVI);
sanjeet25 0:894a7ad8ea79 311 if(mode==Manual) {
sanjeet25 0:894a7ad8ea79 312 while(mode==Manual);
sanjeet25 1:d965ae2443b9 313 psend1=AVIEvent;
sanjeet25 0:894a7ad8ea79 314 } else if(ASense==1) {
sanjeet25 0:894a7ad8ea79 315 if(mode==Manual) {
sanjeet25 0:894a7ad8ea79 316 while(mode==Manual);
sanjeet25 0:894a7ad8ea79 317 } else {
sanjeet25 0:894a7ad8ea79 318 resetTimer0();
sanjeet25 1:d965ae2443b9 319 psend1=AVIEvent;
sanjeet25 0:894a7ad8ea79 320 }
sanjeet25 0:894a7ad8ea79 321 } else if(time_count>=LRI-AVI) {
sanjeet25 0:894a7ad8ea79 322 while(mode!=Manual);
sanjeet25 0:894a7ad8ea79 323 while(mode==Manual);
sanjeet25 1:d965ae2443b9 324 psend1=AVIEvent;
sanjeet25 0:894a7ad8ea79 325 }
sanjeet25 0:894a7ad8ea79 326 break;
sanjeet25 0:894a7ad8ea79 327 }
sanjeet25 0:894a7ad8ea79 328
sanjeet25 0:894a7ad8ea79 329 }
sanjeet25 0:894a7ad8ea79 330 }
sanjeet25 0:894a7ad8ea79 331
sanjeet25 0:894a7ad8ea79 332 void PacemakerAtrial(void const* args)
sanjeet25 0:894a7ad8ea79 333 {
sanjeet25 0:894a7ad8ea79 334 pc.printf("enteredpatrial");
sanjeet25 0:894a7ad8ea79 335 while(1) {
sanjeet25 0:894a7ad8ea79 336 while(asig==false||APace==0);
sanjeet25 0:894a7ad8ea79 337 if(asig==1) {
sanjeet25 0:894a7ad8ea79 338 pc.printf("asig in");
sanjeet25 0:894a7ad8ea79 339 ASensesend();
sanjeet25 0:894a7ad8ea79 340 }
sanjeet25 0:894a7ad8ea79 341 resetTimer0();
sanjeet25 0:894a7ad8ea79 342 while(VSense==0||VPace==0);
sanjeet25 0:894a7ad8ea79 343 resetTimer1();
sanjeet25 0:894a7ad8ea79 344 while(time_count<PVARP);
sanjeet25 0:894a7ad8ea79 345 while(time1_count<URI);
sanjeet25 0:894a7ad8ea79 346
sanjeet25 0:894a7ad8ea79 347 }
sanjeet25 0:894a7ad8ea79 348
sanjeet25 0:894a7ad8ea79 349 }
sanjeet25 0:894a7ad8ea79 350 void PacemakerModes(void const* args)
sanjeet25 0:894a7ad8ea79 351 {
sanjeet25 0:894a7ad8ea79 352 pc.printf("enteredpmodes");
sanjeet25 0:894a7ad8ea79 353 while(1) {
sanjeet25 0:894a7ad8ea79 354 if(pc.readable()) {
sanjeet25 0:894a7ad8ea79 355 key_input = pc.getc();
sanjeet25 0:894a7ad8ea79 356 if((key_input=='n'||key_input=='N')&&!changePacemakerInterval) {
sanjeet25 0:894a7ad8ea79 357 mode = Normal;
sanjeet25 0:894a7ad8ea79 358 pc.printf("Normal");
sanjeet25 0:894a7ad8ea79 359 LRI=normalModeLRI;
sanjeet25 0:894a7ad8ea79 360 URI=normalModeURI;
sanjeet25 0:894a7ad8ea79 361 // (*Pace).signal_set(0x01);
sanjeet25 0:894a7ad8ea79 362 //resetTimer0();
sanjeet25 0:894a7ad8ea79 363 modeset=0;
sanjeet25 0:894a7ad8ea79 364 } else if((key_input=='s'||key_input=='S')&&!changePacemakerInterval) {
sanjeet25 0:894a7ad8ea79 365 mode=Sleep;
sanjeet25 0:894a7ad8ea79 366 pc.printf("Sleep");
sanjeet25 0:894a7ad8ea79 367 modeset=1;
sanjeet25 0:894a7ad8ea79 368 LRI=sleepModeLRI;
sanjeet25 0:894a7ad8ea79 369 URI=sleepModeURI;
sanjeet25 0:894a7ad8ea79 370 // (*Pace).signal_set(0x01);
sanjeet25 0:894a7ad8ea79 371 //resetTimer0();
sanjeet25 0:894a7ad8ea79 372 } else if((key_input=='e'||key_input=='E')&&!changePacemakerInterval) {
sanjeet25 0:894a7ad8ea79 373 mode=Sports;
sanjeet25 0:894a7ad8ea79 374 pc.printf("Exercise");
sanjeet25 0:894a7ad8ea79 375 modeset=2;
sanjeet25 0:894a7ad8ea79 376 LRI=sportsModeLRI;
sanjeet25 0:894a7ad8ea79 377 URI=sportsModeURI;
sanjeet25 0:894a7ad8ea79 378 // (*Pace).signal_set(0x01);
sanjeet25 0:894a7ad8ea79 379 //resetTimer0();
sanjeet25 0:894a7ad8ea79 380 } else if((key_input=='m'||key_input=='M')&&!changePacemakerInterval) {
sanjeet25 0:894a7ad8ea79 381 mode=Manual;
sanjeet25 0:894a7ad8ea79 382 modeset=3;
sanjeet25 0:894a7ad8ea79 383 LRI=manualModeLRI;
sanjeet25 0:894a7ad8ea79 384 URI=manualModeURI;
sanjeet25 0:894a7ad8ea79 385 aPace=true;
sanjeet25 0:894a7ad8ea79 386 //(*Pace).signal_set(0x02);
sanjeet25 0:894a7ad8ea79 387 pc.printf("Manual");
sanjeet25 0:894a7ad8ea79 388 } else if((key_input=='v'||key_input=='V')&& !changePacemakerInterval) {
sanjeet25 0:894a7ad8ea79 389 if(mode==Manual) {
sanjeet25 1:d965ae2443b9 390 mode=Manual;
sanjeet25 0:894a7ad8ea79 391 pc.printf("Ventricular");
sanjeet25 1:d965ae2443b9 392 // AorVPacesend();
sanjeet25 0:894a7ad8ea79 393 aPace=false;
sanjeet25 1:d965ae2443b9 394 (*aorv).signal_set(0x01);
sanjeet25 0:894a7ad8ea79 395 }
sanjeet25 0:894a7ad8ea79 396 } else if((key_input=='a'||key_input=='A')&&!changePacemakerInterval) {
sanjeet25 0:894a7ad8ea79 397 if(mode==Manual) {
sanjeet25 1:d965ae2443b9 398 mode=Manual;
sanjeet25 1:d965ae2443b9 399 //AorVPacesend();
sanjeet25 0:894a7ad8ea79 400 pc.printf("Atrial");
sanjeet25 0:894a7ad8ea79 401 aPace=true;
sanjeet25 1:d965ae2443b9 402 (*aorv).signal_set(0x01);
sanjeet25 0:894a7ad8ea79 403 }
sanjeet25 0:894a7ad8ea79 404 } else if((key_input=='o'||key_input=='O')&&!changePacemakerInterval) {
sanjeet25 0:894a7ad8ea79 405 int a = 10 + rand() % 80;
sanjeet25 0:894a7ad8ea79 406 mode=Observer;
sanjeet25 0:894a7ad8ea79 407 pc.printf("Observer and %u",a);
sanjeet25 0:894a7ad8ea79 408 pacemakerInterval =a;
sanjeet25 0:894a7ad8ea79 409 }
sanjeet25 0:894a7ad8ea79 410
sanjeet25 0:894a7ad8ea79 411 }
sanjeet25 0:894a7ad8ea79 412 }
sanjeet25 0:894a7ad8ea79 413 }
sanjeet25 0:894a7ad8ea79 414
sanjeet25 0:894a7ad8ea79 415 //void PacemakerDisplay(void const* args)
sanjeet25 0:894a7ad8ea79 416 //{ pc.printf("enteredpdisplay");
sanjeet25 0:894a7ad8ea79 417 // while(1) {
sanjeet25 0:894a7ad8ea79 418 // while(VPace==0||VSense==0) {
sanjeet25 0:894a7ad8ea79 419 // if(time_count<=pacemakerInterval*1000);
sanjeet25 0:894a7ad8ea79 420 // updatePacemaker();
sanjeet25 0:894a7ad8ea79 421 // }
sanjeet25 0:894a7ad8ea79 422 // pc.printf("%u",pacemakerRate);
sanjeet25 0:894a7ad8ea79 423 // while(time_count<=pacemakerInterval*1000);
sanjeet25 0:894a7ad8ea79 424 // if(pacemakerRate<low[modeset]) {
sanjeet25 0:894a7ad8ea79 425 // resetTimer0();
sanjeet25 0:894a7ad8ea79 426 // sound_LowAlarm();
sanjeet25 0:894a7ad8ea79 427 // pc.printf("low");
sanjeet25 0:894a7ad8ea79 428 // } else if(pacemakerRate>high[modeset]) {
sanjeet25 0:894a7ad8ea79 429 // resetTimer0();
sanjeet25 0:894a7ad8ea79 430 // pc.printf("high");
sanjeet25 0:894a7ad8ea79 431 // sound_HighAlarm();
sanjeet25 0:894a7ad8ea79 432 // } else if(pacemakerRate<=high[modeset]&&pacemakerRate<=low[modeset]) {
sanjeet25 0:894a7ad8ea79 433 // resetTimer0();
sanjeet25 0:894a7ad8ea79 434 // pc.printf("Normal");
sanjeet25 0:894a7ad8ea79 435 // }
sanjeet25 0:894a7ad8ea79 436 // }
sanjeet25 0:894a7ad8ea79 437 //
sanjeet25 0:894a7ad8ea79 438 //}
sanjeet25 0:894a7ad8ea79 439
sanjeet25 0:894a7ad8ea79 440 int main ()
sanjeet25 0:894a7ad8ea79 441 {
sanjeet25 0:894a7ad8ea79 442 pc.baud(9600);
sanjeet25 0:894a7ad8ea79 443 VSignal.rise(&VSignalreceive);
sanjeet25 0:894a7ad8ea79 444 ASignal.rise(&ASignalreceive);
sanjeet25 0:894a7ad8ea79 445 timer0_init();
sanjeet25 0:894a7ad8ea79 446 timer1_init();
sanjeet25 0:894a7ad8ea79 447 Thread patrial(PacemakerAtrial);
sanjeet25 0:894a7ad8ea79 448 pa=&patrial;
sanjeet25 0:894a7ad8ea79 449 Thread pventrical(PacemakerVentricalEvent);
sanjeet25 0:894a7ad8ea79 450 pv=&pventrical;
sanjeet25 0:894a7ad8ea79 451 Thread pacesend(PacemakerSend);
sanjeet25 0:894a7ad8ea79 452 psend=&pacesend;
sanjeet25 0:894a7ad8ea79 453 Thread pmodes(PacemakerModes);
sanjeet25 0:894a7ad8ea79 454 pmode=&pmodes;
sanjeet25 1:d965ae2443b9 455 Thread aorvpacesend(AorVPacesend);
sanjeet25 1:d965ae2443b9 456 aorv=&aorvpacesend;
sanjeet25 0:894a7ad8ea79 457 //Thread pdisplay(PacemakerDisplay);
sanjeet25 0:894a7ad8ea79 458
sanjeet25 0:894a7ad8ea79 459
sanjeet25 0:894a7ad8ea79 460 while(1) {
sanjeet25 0:894a7ad8ea79 461 }
sanjeet25 0:894a7ad8ea79 462 }