CIS541 / Mbed 2 deprecated Pacemaker2asd

Dependencies:   TextLCD mbed-rtos mbed

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?

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