Almost Done!

Dependencies:   TextLCD mbed-rtos mbed

Committer:
haphilip
Date:
Thu Dec 01 03:28:38 2016 +0000
Revision:
0:b27d866ee3b3
Almost done!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
haphilip 0:b27d866ee3b3 1 #include "mbed.h"
haphilip 0:b27d866ee3b3 2 #include "rtos.h"
haphilip 0:b27d866ee3b3 3 #include "TextLCD.h"
haphilip 0:b27d866ee3b3 4
haphilip 0:b27d866ee3b3 5 InterruptIn vsignal(p7);
haphilip 0:b27d866ee3b3 6 InterruptIn asignal(p8);
haphilip 0:b27d866ee3b3 7 DigitalOut Vpace(p5);
haphilip 0:b27d866ee3b3 8 DigitalOut Apace(p6);
haphilip 0:b27d866ee3b3 9
haphilip 0:b27d866ee3b3 10 DigitalOut asense_led(LED1);
haphilip 0:b27d866ee3b3 11 DigitalOut vsense_led(LED2);
haphilip 0:b27d866ee3b3 12 DigitalOut apace_led(LED3);
haphilip 0:b27d866ee3b3 13 DigitalOut vpace_led(LED4);
haphilip 0:b27d866ee3b3 14
haphilip 0:b27d866ee3b3 15 Thread *pacemodeThread;
haphilip 0:b27d866ee3b3 16
haphilip 0:b27d866ee3b3 17 osThreadId signalTid;
haphilip 0:b27d866ee3b3 18 osThreadId senseTid;
haphilip 0:b27d866ee3b3 19 osThreadId displayTid;
haphilip 0:b27d866ee3b3 20
haphilip 0:b27d866ee3b3 21 TextLCD lcd(p15, p16, p17, p18, p19, p20, TextLCD::LCD16x2);
haphilip 0:b27d866ee3b3 22 Serial pc(USBTX, USBRX);
haphilip 0:b27d866ee3b3 23 RawSerial pc2(USBTX, USBRX);
haphilip 0:b27d866ee3b3 24
haphilip 0:b27d866ee3b3 25 Timer vClock;
haphilip 0:b27d866ee3b3 26 Timer aClock; //PaceSignal model
haphilip 0:b27d866ee3b3 27
haphilip 0:b27d866ee3b3 28 RtosTimer *apace_timer;
haphilip 0:b27d866ee3b3 29 RtosTimer *vpace_timer;
haphilip 0:b27d866ee3b3 30
haphilip 0:b27d866ee3b3 31 double LRI = 1000;
haphilip 0:b27d866ee3b3 32 double URI = 700;
haphilip 0:b27d866ee3b3 33 double VRP = 200; // V noise interval
haphilip 0:b27d866ee3b3 34 double ARP = 50; // A noise interval
haphilip 0:b27d866ee3b3 35 double AVI = 150; // A-V max interval
haphilip 0:b27d866ee3b3 36 double PVARP = 300; // V-A max interval
haphilip 0:b27d866ee3b3 37 double ratio;
haphilip 0:b27d866ee3b3 38 int wait_period = 10; // 3a requirement in miliseconds
haphilip 0:b27d866ee3b3 39
haphilip 0:b27d866ee3b3 40 int upperBound; //for mode changes
haphilip 0:b27d866ee3b3 41 int lowerBound; //for mode changes
haphilip 0:b27d866ee3b3 42
haphilip 0:b27d866ee3b3 43 int observation_interval = 10; // In seconds
haphilip 0:b27d866ee3b3 44 int heart_beats = 0; // Heart-Beats (sensed or paced) since the last observation interval
haphilip 0:b27d866ee3b3 45
haphilip 0:b27d866ee3b3 46 int isChangingObsInt = 0;
haphilip 0:b27d866ee3b3 47 char key = 'n';
haphilip 0:b27d866ee3b3 48 char newObsInt[8];
haphilip 0:b27d866ee3b3 49 int manual_mode = 0;
haphilip 0:b27d866ee3b3 50 char mode = 'n';
haphilip 0:b27d866ee3b3 51
haphilip 0:b27d866ee3b3 52
haphilip 0:b27d866ee3b3 53
haphilip 0:b27d866ee3b3 54 void initialize_intervals()
haphilip 0:b27d866ee3b3 55 {
haphilip 0:b27d866ee3b3 56 LRI = 1000;
haphilip 0:b27d866ee3b3 57 URI = 700;
haphilip 0:b27d866ee3b3 58 VRP = 200;
haphilip 0:b27d866ee3b3 59 ARP = 50;
haphilip 0:b27d866ee3b3 60 AVI = 150;
haphilip 0:b27d866ee3b3 61 PVARP = 300;
haphilip 0:b27d866ee3b3 62 }
haphilip 0:b27d866ee3b3 63
haphilip 0:b27d866ee3b3 64
haphilip 0:b27d866ee3b3 65 // Function to toggle the LEDs 1,2,3,4
haphilip 0:b27d866ee3b3 66 void toggleLed(int led)
haphilip 0:b27d866ee3b3 67 {
haphilip 0:b27d866ee3b3 68 switch (led) {
haphilip 0:b27d866ee3b3 69 case (1):
haphilip 0:b27d866ee3b3 70 asense_led = 1;
haphilip 0:b27d866ee3b3 71 Thread::wait(wait_period);
haphilip 0:b27d866ee3b3 72 asense_led = 0;
haphilip 0:b27d866ee3b3 73 break;
haphilip 0:b27d866ee3b3 74 case (2):
haphilip 0:b27d866ee3b3 75 vsense_led = 1;
haphilip 0:b27d866ee3b3 76 Thread::wait(wait_period);
haphilip 0:b27d866ee3b3 77 vsense_led = 0;
haphilip 0:b27d866ee3b3 78 break;
haphilip 0:b27d866ee3b3 79 case (3):
haphilip 0:b27d866ee3b3 80 apace_led = 1;
haphilip 0:b27d866ee3b3 81 Thread::wait(wait_period);
haphilip 0:b27d866ee3b3 82 apace_led = 0;
haphilip 0:b27d866ee3b3 83 break;
haphilip 0:b27d866ee3b3 84 case (4):
haphilip 0:b27d866ee3b3 85 vpace_led = 1;
haphilip 0:b27d866ee3b3 86 Thread::wait(wait_period);
haphilip 0:b27d866ee3b3 87 vpace_led = 0;
haphilip 0:b27d866ee3b3 88 break;
haphilip 0:b27d866ee3b3 89 }
haphilip 0:b27d866ee3b3 90 }
haphilip 0:b27d866ee3b3 91
haphilip 0:b27d866ee3b3 92 void displayThread(void const *args)
haphilip 0:b27d866ee3b3 93 {
haphilip 0:b27d866ee3b3 94 while (1) {
haphilip 0:b27d866ee3b3 95 Thread::wait(observation_interval * 1000);
haphilip 0:b27d866ee3b3 96 lcd.cls();
haphilip 0:b27d866ee3b3 97 int hr = (heart_beats*60) / (observation_interval);
haphilip 0:b27d866ee3b3 98 lcd.printf("%s%d%s","HR: ", hr, " bpm");
haphilip 0:b27d866ee3b3 99
haphilip 0:b27d866ee3b3 100 switch(mode) {
haphilip 0:b27d866ee3b3 101 case('n'):
haphilip 0:b27d866ee3b3 102 if (hr > 100) {
haphilip 0:b27d866ee3b3 103 lcd.printf("%s", "\nALARM HIGH");
haphilip 0:b27d866ee3b3 104 } else if (hr < 40) {
haphilip 0:b27d866ee3b3 105 lcd.printf("%s", "\nALARM LOW");
haphilip 0:b27d866ee3b3 106 }
haphilip 0:b27d866ee3b3 107 break;
haphilip 0:b27d866ee3b3 108 case('e'):
haphilip 0:b27d866ee3b3 109 if (hr > 175) {
haphilip 0:b27d866ee3b3 110 lcd.printf("%s", "\nALARM HIGH");
haphilip 0:b27d866ee3b3 111 } else if (hr < 100) {
haphilip 0:b27d866ee3b3 112 lcd.printf("%s", "\nALARM LOW");
haphilip 0:b27d866ee3b3 113 }
haphilip 0:b27d866ee3b3 114 break;
haphilip 0:b27d866ee3b3 115 case('s'):
haphilip 0:b27d866ee3b3 116 if (hr > 60) {
haphilip 0:b27d866ee3b3 117 lcd.printf("%s", "\nALARM HIGH");
haphilip 0:b27d866ee3b3 118 } else if (hr < 30) {
haphilip 0:b27d866ee3b3 119 lcd.printf("%s", "\nALARM LOW");
haphilip 0:b27d866ee3b3 120 }
haphilip 0:b27d866ee3b3 121 break;
haphilip 0:b27d866ee3b3 122 case('m'):
haphilip 0:b27d866ee3b3 123 if (hr > 175) {
haphilip 0:b27d866ee3b3 124 lcd.printf("%s", "\nALARM HIGH");
haphilip 0:b27d866ee3b3 125 } else if (hr < 30) {
haphilip 0:b27d866ee3b3 126 lcd.printf("%s", "\nALARM LOW");
haphilip 0:b27d866ee3b3 127 }
haphilip 0:b27d866ee3b3 128 break;
haphilip 0:b27d866ee3b3 129 }
haphilip 0:b27d866ee3b3 130
haphilip 0:b27d866ee3b3 131 heart_beats = 0;
haphilip 0:b27d866ee3b3 132 }
haphilip 0:b27d866ee3b3 133 }
haphilip 0:b27d866ee3b3 134
haphilip 0:b27d866ee3b3 135
haphilip 0:b27d866ee3b3 136 // Incoming a signal from the heart
haphilip 0:b27d866ee3b3 137 void asignal_irq()
haphilip 0:b27d866ee3b3 138 {
haphilip 0:b27d866ee3b3 139 osSignalSet(signalTid, 0x1);
haphilip 0:b27d866ee3b3 140 }
haphilip 0:b27d866ee3b3 141
haphilip 0:b27d866ee3b3 142 // Incoming v signal from the heart
haphilip 0:b27d866ee3b3 143 void vsignal_irq()
haphilip 0:b27d866ee3b3 144 {
haphilip 0:b27d866ee3b3 145 osSignalSet(signalTid, 0x2);
haphilip 0:b27d866ee3b3 146 }
haphilip 0:b27d866ee3b3 147
haphilip 0:b27d866ee3b3 148
haphilip 0:b27d866ee3b3 149 // Timer-driven function to pace the Atria
haphilip 0:b27d866ee3b3 150 void a_pace(void const*)
haphilip 0:b27d866ee3b3 151 {
haphilip 0:b27d866ee3b3 152 Apace = 1;
haphilip 0:b27d866ee3b3 153 aClock.reset();
haphilip 0:b27d866ee3b3 154 apace_timer->stop();
haphilip 0:b27d866ee3b3 155 toggleLed(3);
haphilip 0:b27d866ee3b3 156 Apace = 0;
haphilip 0:b27d866ee3b3 157 osSignalSet(signalTid, 0x3);
haphilip 0:b27d866ee3b3 158 }
haphilip 0:b27d866ee3b3 159
haphilip 0:b27d866ee3b3 160 // Timer-driven function to pace the ventricle
haphilip 0:b27d866ee3b3 161 void v_pace(void const*)
haphilip 0:b27d866ee3b3 162 {
haphilip 0:b27d866ee3b3 163 Vpace = 1;
haphilip 0:b27d866ee3b3 164 vClock.reset();
haphilip 0:b27d866ee3b3 165 vpace_timer->start(LRI);
haphilip 0:b27d866ee3b3 166 apace_timer->start(LRI-AVI);
haphilip 0:b27d866ee3b3 167 toggleLed(4);
haphilip 0:b27d866ee3b3 168 Vpace = 0;
haphilip 0:b27d866ee3b3 169 osSignalSet(signalTid, 0x4);
haphilip 0:b27d866ee3b3 170 heart_beats++;
haphilip 0:b27d866ee3b3 171 }
haphilip 0:b27d866ee3b3 172
haphilip 0:b27d866ee3b3 173
haphilip 0:b27d866ee3b3 174
haphilip 0:b27d866ee3b3 175 void PaceSignal(void const *args)
haphilip 0:b27d866ee3b3 176 {
haphilip 0:b27d866ee3b3 177 int pFlag1 = 0;
haphilip 0:b27d866ee3b3 178 int pFlag2 = 0;
haphilip 0:b27d866ee3b3 179 vClock.start();
haphilip 0:b27d866ee3b3 180 aClock.start();
haphilip 0:b27d866ee3b3 181 vpace_timer->start(LRI);
haphilip 0:b27d866ee3b3 182 apace_timer->start(LRI-AVI);
haphilip 0:b27d866ee3b3 183
haphilip 0:b27d866ee3b3 184 while(1) {
haphilip 0:b27d866ee3b3 185 while (!pFlag1) {
haphilip 0:b27d866ee3b3 186 osEvent ext_signal = osSignalWait(0, osWaitForever);
haphilip 0:b27d866ee3b3 187 int evt = ext_signal.value.signals;
haphilip 0:b27d866ee3b3 188
haphilip 0:b27d866ee3b3 189 //lcd.printf("%d",evt); // 4(Vpace), 3(Apace), 2(Vsignal), 1(Asignal)
haphilip 0:b27d866ee3b3 190
haphilip 0:b27d866ee3b3 191 if (evt == 0x1 && vClock.read_ms() >= PVARP) { //aSignal
haphilip 0:b27d866ee3b3 192 osSignalSet(senseTid, 0x1);
haphilip 0:b27d866ee3b3 193 //pc2.printf("%s%d%s","as ", vClock.read_ms(), "\n");
haphilip 0:b27d866ee3b3 194 aClock.reset();
haphilip 0:b27d866ee3b3 195 apace_timer->stop();
haphilip 0:b27d866ee3b3 196 int interval = (vClock.read_ms() + AVI >= URI) ? AVI : URI - vClock.read_ms();
haphilip 0:b27d866ee3b3 197 vpace_timer->start(interval);
haphilip 0:b27d866ee3b3 198 pFlag1 = 1;
haphilip 0:b27d866ee3b3 199 } else if(evt == 0x2 && vClock.read_ms() >= VRP) { //vSignal
haphilip 0:b27d866ee3b3 200 osSignalSet(senseTid, 0x2);
haphilip 0:b27d866ee3b3 201 //pc2.printf("%s%d%s","vs ", vClock.read_ms(), "\n");
haphilip 0:b27d866ee3b3 202 vClock.reset();
haphilip 0:b27d866ee3b3 203 vpace_timer->start(LRI);
haphilip 0:b27d866ee3b3 204 apace_timer->start(LRI-AVI);
haphilip 0:b27d866ee3b3 205 } else if (evt == 0x3) { //aPace
haphilip 0:b27d866ee3b3 206 pFlag1 = 1;
haphilip 0:b27d866ee3b3 207 }
haphilip 0:b27d866ee3b3 208 }
haphilip 0:b27d866ee3b3 209 pFlag1 = 0;
haphilip 0:b27d866ee3b3 210
haphilip 0:b27d866ee3b3 211 while(!pFlag2) {
haphilip 0:b27d866ee3b3 212 osEvent ext_signal = osSignalWait(0, osWaitForever);
haphilip 0:b27d866ee3b3 213 int evt = ext_signal.value.signals;
haphilip 0:b27d866ee3b3 214
haphilip 0:b27d866ee3b3 215 if (evt == 0x1 && aClock.read_ms() >= ARP) { //aSignal
haphilip 0:b27d866ee3b3 216 osSignalSet(senseTid, 0x1);
haphilip 0:b27d866ee3b3 217 //pc2.printf("%s%d%s","as ", vClock.read_ms(), "\n");
haphilip 0:b27d866ee3b3 218 aClock.reset();
haphilip 0:b27d866ee3b3 219 } else if(evt == 0x2) { //vSignal
haphilip 0:b27d866ee3b3 220 osSignalSet(senseTid, 0x2);
haphilip 0:b27d866ee3b3 221 //pc2.printf("%s%d%s","vs ", vClock.read_ms(), "\n");
haphilip 0:b27d866ee3b3 222 vClock.reset();
haphilip 0:b27d866ee3b3 223 apace_timer->start(LRI-AVI);
haphilip 0:b27d866ee3b3 224 vpace_timer->start(LRI);
haphilip 0:b27d866ee3b3 225 pFlag2 = 1;
haphilip 0:b27d866ee3b3 226 } else if (evt == 0x4) { //vPace
haphilip 0:b27d866ee3b3 227 pFlag2 = 1;
haphilip 0:b27d866ee3b3 228 }
haphilip 0:b27d866ee3b3 229 }
haphilip 0:b27d866ee3b3 230 pFlag2 = 0;
haphilip 0:b27d866ee3b3 231 }
haphilip 0:b27d866ee3b3 232 }
haphilip 0:b27d866ee3b3 233
haphilip 0:b27d866ee3b3 234
haphilip 0:b27d866ee3b3 235 void PaceSense(void const *args)
haphilip 0:b27d866ee3b3 236 {
haphilip 0:b27d866ee3b3 237 int pFlag1 = 0;
haphilip 0:b27d866ee3b3 238 int pFlag2 = 0;
haphilip 0:b27d866ee3b3 239 while(1) {
haphilip 0:b27d866ee3b3 240 while (!pFlag1) {
haphilip 0:b27d866ee3b3 241 osEvent ext_signal = osSignalWait(0, osWaitForever);
haphilip 0:b27d866ee3b3 242 int evt = ext_signal.value.signals;
haphilip 0:b27d866ee3b3 243
haphilip 0:b27d866ee3b3 244 //lcd.printf("%d",evt);
haphilip 0:b27d866ee3b3 245
haphilip 0:b27d866ee3b3 246 if (evt == 0x1) { //aSense
haphilip 0:b27d866ee3b3 247 toggleLed(evt);
haphilip 0:b27d866ee3b3 248 pFlag1 = 1;
haphilip 0:b27d866ee3b3 249 } else if(evt == 0x2) { //vSense
haphilip 0:b27d866ee3b3 250 toggleLed(evt);
haphilip 0:b27d866ee3b3 251 heart_beats++;
haphilip 0:b27d866ee3b3 252 } else if (evt == 0x3) { //aPace
haphilip 0:b27d866ee3b3 253 pFlag1 = 1;
haphilip 0:b27d866ee3b3 254 }
haphilip 0:b27d866ee3b3 255
haphilip 0:b27d866ee3b3 256 }
haphilip 0:b27d866ee3b3 257 pFlag1 = 0;
haphilip 0:b27d866ee3b3 258 while(!pFlag2) {
haphilip 0:b27d866ee3b3 259 osEvent ext_signal = osSignalWait(0, osWaitForever);
haphilip 0:b27d866ee3b3 260 int evt = ext_signal.value.signals;
haphilip 0:b27d866ee3b3 261
haphilip 0:b27d866ee3b3 262 //lcd.printf("%d",evt); // 4096, 256, 16, 1
haphilip 0:b27d866ee3b3 263
haphilip 0:b27d866ee3b3 264 if (evt == 0x1) { //aSense
haphilip 0:b27d866ee3b3 265 toggleLed(evt);
haphilip 0:b27d866ee3b3 266 } else if(evt == 0x2) { //vSignal
haphilip 0:b27d866ee3b3 267 toggleLed(evt);
haphilip 0:b27d866ee3b3 268 heart_beats++;
haphilip 0:b27d866ee3b3 269 pFlag2 = 1;
haphilip 0:b27d866ee3b3 270 } else if (evt == 0x4) { //vPace
haphilip 0:b27d866ee3b3 271 pFlag2 = 1;
haphilip 0:b27d866ee3b3 272 }
haphilip 0:b27d866ee3b3 273 }
haphilip 0:b27d866ee3b3 274 pFlag2 = 0;
haphilip 0:b27d866ee3b3 275 }
haphilip 0:b27d866ee3b3 276 }
haphilip 0:b27d866ee3b3 277
haphilip 0:b27d866ee3b3 278 osThreadDef(PaceSignal, osPriorityNormal, DEFAULT_STACK_SIZE);
haphilip 0:b27d866ee3b3 279 osThreadDef(PaceSense, osPriorityNormal, DEFAULT_STACK_SIZE);
haphilip 0:b27d866ee3b3 280 osThreadDef(displayThread, osPriorityNormal, DEFAULT_STACK_SIZE);
haphilip 0:b27d866ee3b3 281
haphilip 0:b27d866ee3b3 282 int main()
haphilip 0:b27d866ee3b3 283 {
haphilip 0:b27d866ee3b3 284 senseTid = osThreadCreate(osThread(PaceSense), NULL);
haphilip 0:b27d866ee3b3 285 signalTid = osThreadCreate(osThread(PaceSignal), NULL);
haphilip 0:b27d866ee3b3 286 displayTid = osThreadCreate(osThread(displayThread), NULL);
haphilip 0:b27d866ee3b3 287
haphilip 0:b27d866ee3b3 288 vsignal.rise(&vsignal_irq); //rising edge of timer
haphilip 0:b27d866ee3b3 289 asignal.rise(&asignal_irq);
haphilip 0:b27d866ee3b3 290
haphilip 0:b27d866ee3b3 291 Callback<void()> apaceTimerTask((void*)NULL, (void (*)(void*))&a_pace);
haphilip 0:b27d866ee3b3 292 Callback<void()> vpaceTimerTask((void*)NULL, (void (*)(void*))&v_pace);
haphilip 0:b27d866ee3b3 293 apace_timer = new RtosTimer(apaceTimerTask);
haphilip 0:b27d866ee3b3 294 vpace_timer = new RtosTimer(vpaceTimerTask);
haphilip 0:b27d866ee3b3 295
haphilip 0:b27d866ee3b3 296 lcd.cls();
haphilip 0:b27d866ee3b3 297
haphilip 0:b27d866ee3b3 298
haphilip 0:b27d866ee3b3 299 // 'n' for normal mode (default)
haphilip 0:b27d866ee3b3 300 // 's' for sleep mode
haphilip 0:b27d866ee3b3 301 // 'e' for exercise mode
haphilip 0:b27d866ee3b3 302 // 'm' for manual mode
haphilip 0:b27d866ee3b3 303 // 'o' to change the observation interval
haphilip 0:b27d866ee3b3 304
haphilip 0:b27d866ee3b3 305 key = 'n';
haphilip 0:b27d866ee3b3 306
haphilip 0:b27d866ee3b3 307 while(true) {
haphilip 0:b27d866ee3b3 308 Thread::wait(100);
haphilip 0:b27d866ee3b3 309 while(pc.readable()) {
haphilip 0:b27d866ee3b3 310 key = pc.getc();
haphilip 0:b27d866ee3b3 311 switch(key) {
haphilip 0:b27d866ee3b3 312 //pvarp = 0.3s
haphilip 0:b27d866ee3b3 313 case('n'):
haphilip 0:b27d866ee3b3 314 mode = 'n';
haphilip 0:b27d866ee3b3 315 upperBound = 100; //beats per msecond
haphilip 0:b27d866ee3b3 316 lowerBound = 40; //beats per msecond
haphilip 0:b27d866ee3b3 317 lcd.printf("N");
haphilip 0:b27d866ee3b3 318 initialize_intervals();
haphilip 0:b27d866ee3b3 319 break;
haphilip 0:b27d866ee3b3 320 case('s'):
haphilip 0:b27d866ee3b3 321 mode = 's';
haphilip 0:b27d866ee3b3 322 upperBound = 60; //beats per msecond
haphilip 0:b27d866ee3b3 323 lowerBound = 30; //beats per msecond v-v 0.5s
haphilip 0:b27d866ee3b3 324 lcd.printf("S");
haphilip 0:b27d866ee3b3 325 ratio = (60.00/100.00 + 30.00/40.00) / 2.00;
haphilip 0:b27d866ee3b3 326 initialize_intervals();
haphilip 0:b27d866ee3b3 327 LRI /= ratio;
haphilip 0:b27d866ee3b3 328 URI /= ratio;
haphilip 0:b27d866ee3b3 329 VRP /= ratio;
haphilip 0:b27d866ee3b3 330 ARP /= ratio;
haphilip 0:b27d866ee3b3 331 AVI /= ratio;
haphilip 0:b27d866ee3b3 332 PVARP /= ratio;
haphilip 0:b27d866ee3b3 333 // lcd.printf("%lf", LRI);
haphilip 0:b27d866ee3b3 334 break;
haphilip 0:b27d866ee3b3 335 case('e'):
haphilip 0:b27d866ee3b3 336 mode = 'e';
haphilip 0:b27d866ee3b3 337 upperBound = 175; //beats per msecond
haphilip 0:b27d866ee3b3 338 lowerBound = 100; //beats per msecond
haphilip 0:b27d866ee3b3 339 lcd.printf("E");
haphilip 0:b27d866ee3b3 340 ratio = (175.00/100.00 + 100.00/40.00) / 2.00;
haphilip 0:b27d866ee3b3 341 initialize_intervals();
haphilip 0:b27d866ee3b3 342 LRI /= ratio;
haphilip 0:b27d866ee3b3 343 URI /= ratio;
haphilip 0:b27d866ee3b3 344 VRP /= ratio;
haphilip 0:b27d866ee3b3 345 ARP /= ratio;
haphilip 0:b27d866ee3b3 346 AVI /= ratio;
haphilip 0:b27d866ee3b3 347 PVARP /= ratio;
haphilip 0:b27d866ee3b3 348 // lcd.printf("%lf", LRI);
haphilip 0:b27d866ee3b3 349 break;
haphilip 0:b27d866ee3b3 350 case('m'):
haphilip 0:b27d866ee3b3 351 mode = 'm';
haphilip 0:b27d866ee3b3 352 upperBound = 175; //beats per msecond
haphilip 0:b27d866ee3b3 353 lowerBound = 30; //beats per msecond
haphilip 0:b27d866ee3b3 354 lcd.printf("M");
haphilip 0:b27d866ee3b3 355 // LRI = 1000;
haphilip 0:b27d866ee3b3 356 // URI = 700;
haphilip 0:b27d866ee3b3 357 // PVARP = 300;
haphilip 0:b27d866ee3b3 358 manual_mode = 1;
haphilip 0:b27d866ee3b3 359 break;
haphilip 0:b27d866ee3b3 360 case('o'):
haphilip 0:b27d866ee3b3 361
haphilip 0:b27d866ee3b3 362 isChangingObsInt = 1;
haphilip 0:b27d866ee3b3 363 lcd.printf("O");
haphilip 0:b27d866ee3b3 364 break;
haphilip 0:b27d866ee3b3 365 }
haphilip 0:b27d866ee3b3 366 ///////manual pacing
haphilip 0:b27d866ee3b3 367 if(manual_mode) {
haphilip 0:b27d866ee3b3 368 key = pc.getc();
haphilip 0:b27d866ee3b3 369 if(key == 'v') {
haphilip 0:b27d866ee3b3 370 v_pace(NULL);
haphilip 0:b27d866ee3b3 371 } else if(key == 'a') {
haphilip 0:b27d866ee3b3 372 a_pace(NULL);
haphilip 0:b27d866ee3b3 373 } else if(key == 'q') {
haphilip 0:b27d866ee3b3 374 manual_mode = 0;
haphilip 0:b27d866ee3b3 375 }
haphilip 0:b27d866ee3b3 376 }
haphilip 0:b27d866ee3b3 377
haphilip 0:b27d866ee3b3 378
haphilip 0:b27d866ee3b3 379
haphilip 0:b27d866ee3b3 380 ///////observation interval
haphilip 0:b27d866ee3b3 381 int i = 0;
haphilip 0:b27d866ee3b3 382 while(isChangingObsInt) {
haphilip 0:b27d866ee3b3 383 // wait(1);
haphilip 0:b27d866ee3b3 384 key = pc.getc();
haphilip 0:b27d866ee3b3 385 // lcd.printf("0");
haphilip 0:b27d866ee3b3 386 if(key != '\r' && (int)key > 47 && (int)key < 58) {
haphilip 0:b27d866ee3b3 387 //use atoi - asci to integer to convert input key to 0 - 10
haphilip 0:b27d866ee3b3 388 newObsInt[i] += key;
haphilip 0:b27d866ee3b3 389 i++;
haphilip 0:b27d866ee3b3 390 lcd.printf("1");
haphilip 0:b27d866ee3b3 391 } else if(key == '\r') {
haphilip 0:b27d866ee3b3 392 newObsInt[i] = '\0';
haphilip 0:b27d866ee3b3 393 int obsint;
haphilip 0:b27d866ee3b3 394 sscanf(newObsInt, "%d", &obsint);
haphilip 0:b27d866ee3b3 395 observation_interval = obsint * 1000;
haphilip 0:b27d866ee3b3 396 lcd.printf("%s", obsint);
haphilip 0:b27d866ee3b3 397 isChangingObsInt = 0;
haphilip 0:b27d866ee3b3 398 }
haphilip 0:b27d866ee3b3 399 }
haphilip 0:b27d866ee3b3 400 }
haphilip 0:b27d866ee3b3 401 }
haphilip 0:b27d866ee3b3 402
haphilip 0:b27d866ee3b3 403
haphilip 0:b27d866ee3b3 404 }