mbed heart

Dependencies:   TextLCD mbed-rtos mbed

Committer:
lucastai
Date:
Wed Dec 02 06:48:26 2015 +0000
Revision:
7:1c32e8f6bde8
Parent:
6:315e6d6b1174
Child:
8:0f92ac2b9d0e
added more for testing;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lucastai 0:54ec65701097 1 #include "mbed.h"
lucastai 0:54ec65701097 2 #include "LPC17xx.h"
lucastai 0:54ec65701097 3 #include "TextLCD.h"
lucastai 0:54ec65701097 4 #include "rtos.h"
lucastai 0:54ec65701097 5 #include "Thread.h"
lucastai 0:54ec65701097 6
lucastai 0:54ec65701097 7 DigitalOut vsense(p23);
lucastai 0:54ec65701097 8 DigitalOut asense(p24);
lucastai 0:54ec65701097 9 DigitalIn apace(p22);
lucastai 0:54ec65701097 10 DigitalIn vpace(p21);
lucastai 0:54ec65701097 11
lucastai 4:6d3ddf74b49a 12 DigitalOut led_apace(LED1);
lucastai 4:6d3ddf74b49a 13 DigitalOut led_vpace(LED2);
lucastai 4:6d3ddf74b49a 14 DigitalOut led_asense(LED3);
lucastai 4:6d3ddf74b49a 15 DigitalOut led_vsense(LED4);
lucastai 4:6d3ddf74b49a 16
lucastai 0:54ec65701097 17 Serial serial_in(USBTX, USBRX);
lucastai 0:54ec65701097 18
lucastai 0:54ec65701097 19
lucastai 0:54ec65701097 20 int test_time_count;
lucastai 0:54ec65701097 21 int curr_test;
lucastai 5:8d9bcf25accb 22 int minwaitV = 200;
lucastai 5:8d9bcf25accb 23 int minwaitA = 400;
lucastai 0:54ec65701097 24
lucastai 0:54ec65701097 25 int needs_num_input = 0;
lucastai 0:54ec65701097 26
chadnach1 3:189e64d01258 27 enum mode {RANDOM,MANUAL,TEST};
lucastai 0:54ec65701097 28 mode test_curr_mode = RANDOM;
lucastai 0:54ec65701097 29 Timer t;
lucastai 0:54ec65701097 30
lucastai 0:54ec65701097 31
lucastai 5:8d9bcf25accb 32 void test_LRI(){
lucastai 5:8d9bcf25accb 33 Timer test_timer;
lucastai 5:8d9bcf25accb 34
lucastai 5:8d9bcf25accb 35 test_timer.start();
lucastai 5:8d9bcf25accb 36 // wait for next vpace
lucastai 6:315e6d6b1174 37 while(vpace != 1){}
lucastai 5:8d9bcf25accb 38 serial_in.printf("LRI: The separation between Ventricle events was %i ", test_timer.read_ms());
lucastai 5:8d9bcf25accb 39
lucastai 5:8d9bcf25accb 40 }
lucastai 5:8d9bcf25accb 41
lucastai 7:1c32e8f6bde8 42 void test_PVARP(){
lucastai 7:1c32e8f6bde8 43 Timer test_timer;
lucastai 7:1c32e8f6bde8 44
lucastai 7:1c32e8f6bde8 45 test_timer.start();
lucastai 7:1c32e8f6bde8 46
lucastai 7:1c32e8f6bde8 47 while(apace != 1){}
lucastai 7:1c32e8f6bde8 48 serial_in.printf("PVARP: The separation between Ventricular and Atrial events was %i ", test_timer.read_ms());
lucastai 7:1c32e8f6bde8 49
lucastai 7:1c32e8f6bde8 50
lucastai 7:1c32e8f6bde8 51 }
lucastai 7:1c32e8f6bde8 52
lucastai 5:8d9bcf25accb 53 void test_VRP(){
lucastai 5:8d9bcf25accb 54 Timer test_timer;
lucastai 5:8d9bcf25accb 55
lucastai 5:8d9bcf25accb 56 test_timer.start();
lucastai 5:8d9bcf25accb 57
lucastai 5:8d9bcf25accb 58 while(vpace != 1 || vsense != 1){}
lucastai 5:8d9bcf25accb 59 serial_in.printf("VRP: The separation between Ventricle events was %i ", test_timer.read_ms());
lucastai 5:8d9bcf25accb 60
lucastai 5:8d9bcf25accb 61
lucastai 5:8d9bcf25accb 62 }
lucastai 5:8d9bcf25accb 63
lucastai 7:1c32e8f6bde8 64
lucastai 5:8d9bcf25accb 65 void test_AVI(){
lucastai 5:8d9bcf25accb 66 Timer test_timer;
lucastai 5:8d9bcf25accb 67
lucastai 5:8d9bcf25accb 68 test_timer.start();
lucastai 5:8d9bcf25accb 69
lucastai 5:8d9bcf25accb 70 while(vpace != 1){}
lucastai 5:8d9bcf25accb 71 serial_in.printf("AVI: The separation between Atrial and Ventricle events was %i ", test_timer.read_ms());
lucastai 5:8d9bcf25accb 72
lucastai 5:8d9bcf25accb 73
lucastai 5:8d9bcf25accb 74 }
lucastai 7:1c32e8f6bde8 75
lucastai 7:1c32e8f6bde8 76 void test_AVI2(){
lucastai 7:1c32e8f6bde8 77 Timer test_timer;
lucastai 7:1c32e8f6bde8 78
lucastai 7:1c32e8f6bde8 79 test_timer.start();
lucastai 7:1c32e8f6bde8 80
lucastai 7:1c32e8f6bde8 81 while(apace != 1){}
lucastai 7:1c32e8f6bde8 82 serial_in.printf("LRI-AVI: The separation between Ventricle and Atrial events was %i ", test_timer.read_ms());
lucastai 7:1c32e8f6bde8 83
lucastai 7:1c32e8f6bde8 84
lucastai 7:1c32e8f6bde8 85 }
lucastai 5:8d9bcf25accb 86
lucastai 0:54ec65701097 87
lucastai 0:54ec65701097 88
lucastai 0:54ec65701097 89
chadnach1 3:189e64d01258 90 void random_heart(void const *args)
chadnach1 3:189e64d01258 91 {
lucastai 0:54ec65701097 92 t.reset();
lucastai 0:54ec65701097 93 t.start();
lucastai 4:6d3ddf74b49a 94 while(1){
chadnach1 3:189e64d01258 95 while(test_curr_mode == RANDOM) {
lucastai 0:54ec65701097 96 int r = rand();
chadnach1 3:189e64d01258 97 if(r%2 == 0) {
lucastai 5:8d9bcf25accb 98 serial_in.printf("timer was %i",t.read_ms());
chadnach1 3:189e64d01258 99 if(1) {
lucastai 4:6d3ddf74b49a 100 led_asense = 1;
lucastai 0:54ec65701097 101 asense = 1;
lucastai 5:8d9bcf25accb 102 serial_in.printf("| ASENSE FIRED |");
lucastai 0:54ec65701097 103 Thread::wait(10);
lucastai 0:54ec65701097 104 asense = 0;
lucastai 4:6d3ddf74b49a 105 led_asense = 0;
lucastai 2:4761ca8ba841 106 t.reset();
lucastai 2:4761ca8ba841 107
lucastai 5:8d9bcf25accb 108 }else{
lucastai 5:8d9bcf25accb 109 Thread::wait(100);
lucastai 0:54ec65701097 110 }
chadnach1 3:189e64d01258 111 } else {
chadnach1 3:189e64d01258 112 if(1) {
lucastai 4:6d3ddf74b49a 113 led_vsense = 1;
lucastai 0:54ec65701097 114 vsense = 1;
lucastai 5:8d9bcf25accb 115 serial_in.printf("| VSENSE FIRED | ");
lucastai 0:54ec65701097 116 Thread::wait(10);
lucastai 0:54ec65701097 117 vsense = 0;
lucastai 4:6d3ddf74b49a 118 led_vsense = 0;
lucastai 2:4761ca8ba841 119 t.reset();
lucastai 2:4761ca8ba841 120
lucastai 5:8d9bcf25accb 121 }else{
lucastai 5:8d9bcf25accb 122 Thread::wait(100);
lucastai 0:54ec65701097 123 }
lucastai 0:54ec65701097 124 }
lucastai 5:8d9bcf25accb 125
lucastai 5:8d9bcf25accb 126 Thread::wait(150);
lucastai 0:54ec65701097 127
lucastai 0:54ec65701097 128
lucastai 0:54ec65701097 129
lucastai 0:54ec65701097 130 }
lucastai 4:6d3ddf74b49a 131 }
lucastai 0:54ec65701097 132 }
lucastai 0:54ec65701097 133
lucastai 0:54ec65701097 134
chadnach1 3:189e64d01258 135 void kbd_intrp()
chadnach1 3:189e64d01258 136 {
lucastai 2:4761ca8ba841 137
lucastai 0:54ec65701097 138 char a = serial_in.getc();
lucastai 2:4761ca8ba841 139 serial_in.printf("char was " + a);
chadnach1 3:189e64d01258 140 if(needs_num_input) {
lucastai 0:54ec65701097 141 // DO O handling
lucastai 0:54ec65701097 142 needs_num_input = 0;
lucastai 0:54ec65701097 143 return;
lucastai 0:54ec65701097 144 }
lucastai 0:54ec65701097 145
chadnach1 3:189e64d01258 146 if(a == 'R') {
lucastai 0:54ec65701097 147 test_curr_mode = RANDOM;
chadnach1 3:189e64d01258 148 } else if(a == 'T') {
lucastai 0:54ec65701097 149 test_curr_mode = TEST;
chadnach1 3:189e64d01258 150 } else if(a == 'M') {
lucastai 0:54ec65701097 151 test_curr_mode = MANUAL;
lucastai 0:54ec65701097 152 }
chadnach1 3:189e64d01258 153
chadnach1 3:189e64d01258 154 if(a == 'A' && test_curr_mode == MANUAL) {
lucastai 0:54ec65701097 155 asense = 1;
lucastai 0:54ec65701097 156 Thread::wait(10);
lucastai 0:54ec65701097 157 asense = 0;
lucastai 0:54ec65701097 158 }
chadnach1 3:189e64d01258 159
chadnach1 3:189e64d01258 160 if(a == 'V' && test_curr_mode == MANUAL) {
lucastai 0:54ec65701097 161 vsense = 1;
lucastai 0:54ec65701097 162 Thread::wait(10);
lucastai 0:54ec65701097 163 vsense = 0;
lucastai 0:54ec65701097 164 }
chadnach1 3:189e64d01258 165
lucastai 0:54ec65701097 166 }
lucastai 0:54ec65701097 167
lucastai 4:6d3ddf74b49a 168 void rec_apace(){
lucastai 4:6d3ddf74b49a 169 led_apace = 1;
lucastai 5:8d9bcf25accb 170 serial_in.printf("| A FIRED |");
lucastai 4:6d3ddf74b49a 171 Thread::wait(10);
lucastai 4:6d3ddf74b49a 172 led_apace = 0;
lucastai 4:6d3ddf74b49a 173 }
lucastai 0:54ec65701097 174
lucastai 4:6d3ddf74b49a 175 void rec_vpace(){
lucastai 4:6d3ddf74b49a 176 led_vpace = 1;
lucastai 5:8d9bcf25accb 177 serial_in.printf("| V FIRED |");
lucastai 4:6d3ddf74b49a 178 Thread::wait(10);
lucastai 4:6d3ddf74b49a 179 led_vpace = 0;
lucastai 4:6d3ddf74b49a 180 }
lucastai 4:6d3ddf74b49a 181
lucastai 5:8d9bcf25accb 182 void heart_response1(void const *args){
lucastai 4:6d3ddf74b49a 183 while(1){
lucastai 4:6d3ddf74b49a 184 if(apace == 1){
lucastai 4:6d3ddf74b49a 185 rec_apace();
lucastai 4:6d3ddf74b49a 186 }
lucastai 5:8d9bcf25accb 187
lucastai 5:8d9bcf25accb 188 }
lucastai 5:8d9bcf25accb 189
lucastai 5:8d9bcf25accb 190 }
lucastai 5:8d9bcf25accb 191
lucastai 5:8d9bcf25accb 192 void heart_response2(void const *args){
lucastai 5:8d9bcf25accb 193 while(1){
lucastai 4:6d3ddf74b49a 194
lucastai 4:6d3ddf74b49a 195 if(vpace == 1){
lucastai 4:6d3ddf74b49a 196 rec_vpace();
lucastai 4:6d3ddf74b49a 197 }
lucastai 4:6d3ddf74b49a 198 }
lucastai 4:6d3ddf74b49a 199
lucastai 4:6d3ddf74b49a 200 }
lucastai 0:54ec65701097 201
lucastai 0:54ec65701097 202 // interrupt function
chadnach1 3:189e64d01258 203 void interrupt_and_run_test()
chadnach1 3:189e64d01258 204 {
lucastai 0:54ec65701097 205 // zero timer, set for 1ms interrupt
chadnach1 3:189e64d01258 206
lucastai 0:54ec65701097 207 // wait for atrial pulse
chadnach1 3:189e64d01258 208
lucastai 0:54ec65701097 209 // check if timer was within event
chadnach1 3:189e64d01258 210
chadnach1 3:189e64d01258 211
lucastai 0:54ec65701097 212 // send vsense
chadnach1 3:189e64d01258 213
chadnach1 3:189e64d01258 214
lucastai 0:54ec65701097 215 // send asense
chadnach1 3:189e64d01258 216
lucastai 0:54ec65701097 217 // check if timer was in event
lucastai 0:54ec65701097 218
lucastai 0:54ec65701097 219 // wait for vpace
chadnach1 3:189e64d01258 220
lucastai 0:54ec65701097 221 // wait for atrial pulse
chadnach1 3:189e64d01258 222
lucastai 0:54ec65701097 223 // check if timer was within event
chadnach1 3:189e64d01258 224 }
lucastai 0:54ec65701097 225
lucastai 7:1c32e8f6bde8 226 void test_mode(){
lucastai 7:1c32e8f6bde8 227
lucastai 7:1c32e8f6bde8 228 int lri_done = 0;
lucastai 7:1c32e8f6bde8 229 int avi_done = 0;
lucastai 7:1c32e8f6bde8 230 int vrp_done = 0;
lucastai 7:1c32e8f6bde8 231 int pvarp_done = 0;
lucastai 7:1c32e8f6bde8 232
lucastai 7:1c32e8f6bde8 233 while(1){
lucastai 7:1c32e8f6bde8 234 while(test_curr_mode == TEST) {
lucastai 7:1c32e8f6bde8 235
lucastai 7:1c32e8f6bde8 236 }
lucastai 7:1c32e8f6bde8 237
lucastai 7:1c32e8f6bde8 238 }
lucastai 7:1c32e8f6bde8 239
chadnach1 3:189e64d01258 240 int main(void)
chadnach1 3:189e64d01258 241 {
lucastai 5:8d9bcf25accb 242
lucastai 5:8d9bcf25accb 243
chadnach1 3:189e64d01258 244
lucastai 2:4761ca8ba841 245 Thread t3(random_heart, (void *)"");
lucastai 5:8d9bcf25accb 246 Thread t2(heart_response1, (void *)"");
lucastai 5:8d9bcf25accb 247 Thread t4(heart_response2, (void *)"");
lucastai 5:8d9bcf25accb 248
lucastai 2:4761ca8ba841 249
chadnach1 3:189e64d01258 250 char a = 'Z';
chadnach1 3:189e64d01258 251
chadnach1 3:189e64d01258 252 while(1) {
chadnach1 3:189e64d01258 253
chadnach1 3:189e64d01258 254 if(serial_in.readable()) {
chadnach1 3:189e64d01258 255 a = serial_in.getc();
lucastai 5:8d9bcf25accb 256 serial_in.printf("GOT %c!!",a);
lucastai 5:8d9bcf25accb 257 if(needs_num_input){
chadnach1 3:189e64d01258 258 // DO O handling
chadnach1 3:189e64d01258 259 needs_num_input = 0;
chadnach1 3:189e64d01258 260 }
lucastai 2:4761ca8ba841 261
chadnach1 3:189e64d01258 262 if(a == 'R') {
lucastai 5:8d9bcf25accb 263 serial_in.printf("GOT R!!");
chadnach1 3:189e64d01258 264 test_curr_mode = RANDOM;
chadnach1 3:189e64d01258 265 } else if(a == 'T') {
lucastai 5:8d9bcf25accb 266 serial_in.printf("GOT T!!");
chadnach1 3:189e64d01258 267 test_curr_mode = TEST;
lucastai 5:8d9bcf25accb 268
chadnach1 3:189e64d01258 269 } else if(a == 'M') {
lucastai 5:8d9bcf25accb 270 serial_in.printf("GOT M!!");
chadnach1 3:189e64d01258 271 test_curr_mode = MANUAL;
chadnach1 3:189e64d01258 272 }
chadnach1 3:189e64d01258 273
chadnach1 3:189e64d01258 274 if(a == 'A' && test_curr_mode == MANUAL) {
chadnach1 3:189e64d01258 275 asense = 1;
chadnach1 3:189e64d01258 276 Thread::wait(10);
chadnach1 3:189e64d01258 277 asense = 0;
chadnach1 3:189e64d01258 278 }
chadnach1 3:189e64d01258 279
chadnach1 3:189e64d01258 280 if(a == 'V' && test_curr_mode == MANUAL) {
chadnach1 3:189e64d01258 281 vsense = 1;
chadnach1 3:189e64d01258 282 Thread::wait(10);
chadnach1 3:189e64d01258 283 vsense = 0;
chadnach1 3:189e64d01258 284 }
lucastai 5:8d9bcf25accb 285
lucastai 5:8d9bcf25accb 286 while(serial_in.readable()){
lucastai 5:8d9bcf25accb 287 serial_in.printf("GOT TO CONSUME!!",a);
lucastai 5:8d9bcf25accb 288 serial_in.getc();
lucastai 5:8d9bcf25accb 289 }
chadnach1 3:189e64d01258 290
chadnach1 3:189e64d01258 291
chadnach1 3:189e64d01258 292 }
lucastai 0:54ec65701097 293 }
lucastai 5:8d9bcf25accb 294
lucastai 0:54ec65701097 295 }