heart for pacemaker

Dependencies:   TextLCD mbed-rtos mbed

Committer:
williamrchr
Date:
Sat Dec 03 18:33:34 2016 +0000
Revision:
2:2bae2020ac36
Parent:
1:82631d83e51e
working heart

Who changed what in which revision?

UserRevisionLine numberNew contents of line
williamrchr 0:08412491e70f 1 #include "mbed.h"
williamrchr 0:08412491e70f 2 #include "rtos.h"
williamrchr 0:08412491e70f 3 #include "TextLCD.h"
williamrchr 2:2bae2020ac36 4 #include <time.h>
williamrchr 0:08412491e70f 5
williamrchr 0:08412491e70f 6 TextLCD lcd(p15,p16,p17,p18,p19,p20,TextLCD::LCD16x2);
williamrchr 0:08412491e70f 7 Serial pc(USBTX, USBRX); //set up serial
williamrchr 0:08412491e70f 8 DigitalOut natAPace(LED1); //leds for pacing
williamrchr 0:08412491e70f 9 DigitalOut natVPace(LED2);
williamrchr 0:08412491e70f 10 DigitalOut aPace(LED3);
williamrchr 0:08412491e70f 11 DigitalOut vPace(LED4);
williamrchr 0:08412491e70f 12 DigitalOut alarm(p5); //pin for alarm
williamrchr 0:08412491e70f 13
williamrchr 2:2bae2020ac36 14 InterruptIn a_Pace(p8);
williamrchr 2:2bae2020ac36 15 InterruptIn v_Pace(p9);
williamrchr 2:2bae2020ac36 16
williamrchr 0:08412491e70f 17 DigitalOut a_signal(p6); //connected to pm
williamrchr 0:08412491e70f 18 DigitalOut v_signal(p7); //connected to pm
williamrchr 0:08412491e70f 19
williamrchr 2:2bae2020ac36 20 unsigned volatile int a_time = 0;
williamrchr 2:2bae2020ac36 21 unsigned volatile int v_time = 0;
williamrchr 0:08412491e70f 22
williamrchr 0:08412491e70f 23 int mode = 0; //0 = random, 1 = manual, 2 = test
williamrchr 2:2bae2020ac36 24 int changeModes = 0;
williamrchr 0:08412491e70f 25
williamrchr 0:08412491e70f 26 //constants
williamrchr 0:08412491e70f 27
williamrchr 1:82631d83e51e 28 const int minwait_A = 10; //all in msec
williamrchr 0:08412491e70f 29 const int minwait_V = 20;
williamrchr 0:08412491e70f 30 const int LRI = 1000;
williamrchr 0:08412491e70f 31 const int VRP = 400;
williamrchr 0:08412491e70f 32 const int PVARP = 500;
williamrchr 0:08412491e70f 33 const int URI = 1000;
williamrchr 0:08412491e70f 34 const int AVI = 100;
williamrchr 0:08412491e70f 35
williamrchr 2:2bae2020ac36 36
williamrchr 2:2bae2020ac36 37
williamrchr 2:2bae2020ac36 38 void send_aSignal() {
williamrchr 2:2bae2020ac36 39 a_signal = 1;
williamrchr 2:2bae2020ac36 40 natAPace = 1;
williamrchr 2:2bae2020ac36 41 wait(1);
williamrchr 2:2bae2020ac36 42 a_signal = 0;
williamrchr 2:2bae2020ac36 43 natAPace = 0;
williamrchr 2:2bae2020ac36 44 }
williamrchr 2:2bae2020ac36 45
williamrchr 2:2bae2020ac36 46 void send_vSignal() {
williamrchr 2:2bae2020ac36 47 v_signal = 1;
williamrchr 2:2bae2020ac36 48 natVPace = 1;
williamrchr 2:2bae2020ac36 49 wait(1);
williamrchr 2:2bae2020ac36 50 v_signal = 0;
williamrchr 2:2bae2020ac36 51 natVPace = 0;
williamrchr 2:2bae2020ac36 52 }
williamrchr 2:2bae2020ac36 53
williamrchr 2:2bae2020ac36 54 void test_mode() {
williamrchr 2:2bae2020ac36 55
williamrchr 2:2bae2020ac36 56 }
williamrchr 2:2bae2020ac36 57
williamrchr 1:82631d83e51e 58 void random_mode() {
williamrchr 2:2bae2020ac36 59 pc.printf("in Random Mode");
williamrchr 2:2bae2020ac36 60 while(mode == 0) { //only running while in random mode
williamrchr 2:2bae2020ac36 61
williamrchr 2:2bae2020ac36 62 int aWait = rand()%2000 + minwait_A;
williamrchr 2:2bae2020ac36 63 pc.printf("a wait: %d\n", aWait);
williamrchr 2:2bae2020ac36 64 int vWait = rand()%2000 + minwait_V;
williamrchr 2:2bae2020ac36 65 pc.printf("v wait: %d\n", vWait);
williamrchr 2:2bae2020ac36 66
williamrchr 2:2bae2020ac36 67 //wait for time to go
williamrchr 2:2bae2020ac36 68 pc.printf("going into a while loop");
williamrchr 2:2bae2020ac36 69 a_time = 0;
williamrchr 2:2bae2020ac36 70 while(a_time < aWait);
williamrchr 2:2bae2020ac36 71 pc.printf("left a while loop");
williamrchr 2:2bae2020ac36 72 send_aSignal();
williamrchr 2:2bae2020ac36 73 vWait += v_time; //get current timeV
williamrchr 2:2bae2020ac36 74 //wait for v_time
williamrchr 2:2bae2020ac36 75 pc.printf("going into v while loop");
williamrchr 2:2bae2020ac36 76 v_time = 0;
williamrchr 2:2bae2020ac36 77 while(v_time < vWait) {continue;}
williamrchr 2:2bae2020ac36 78 pc.printf("left v while loop");
williamrchr 2:2bae2020ac36 79 send_vSignal();
williamrchr 1:82631d83e51e 80 v_time = 0;
williamrchr 1:82631d83e51e 81 }
williamrchr 1:82631d83e51e 82 }
williamrchr 1:82631d83e51e 83
williamrchr 0:08412491e70f 84 void switch_modes() {
williamrchr 2:2bae2020ac36 85 while(true) {
williamrchr 2:2bae2020ac36 86 if(changeModes) {
williamrchr 2:2bae2020ac36 87 pc.printf("passed if statement");
williamrchr 2:2bae2020ac36 88 switch(mode) {
williamrchr 2:2bae2020ac36 89 case 0: //becomes random
williamrchr 2:2bae2020ac36 90 pc.printf("in random");
williamrchr 2:2bae2020ac36 91 changeModes = 0;
williamrchr 2:2bae2020ac36 92 random_mode();
williamrchr 2:2bae2020ac36 93 break;
williamrchr 2:2bae2020ac36 94 case 1: //becomes manual
williamrchr 2:2bae2020ac36 95 pc.printf("in manual");
williamrchr 2:2bae2020ac36 96 changeModes = 0;
williamrchr 2:2bae2020ac36 97 //don't need to do anything
williamrchr 2:2bae2020ac36 98 break;
williamrchr 2:2bae2020ac36 99 case 2: //becomes test
williamrchr 2:2bae2020ac36 100 pc.printf("in test");
williamrchr 2:2bae2020ac36 101 changeModes = 0;
williamrchr 2:2bae2020ac36 102 test_mode();
williamrchr 2:2bae2020ac36 103 break;
williamrchr 2:2bae2020ac36 104
williamrchr 2:2bae2020ac36 105 }
williamrchr 2:2bae2020ac36 106 //thread switch modes delay
williamrchr 2:2bae2020ac36 107 Thread::wait(1000);
williamrchr 2:2bae2020ac36 108 }
williamrchr 0:08412491e70f 109 }
williamrchr 0:08412491e70f 110
williamrchr 0:08412491e70f 111 }
williamrchr 0:08412491e70f 112
williamrchr 0:08412491e70f 113
williamrchr 0:08412491e70f 114 void received_apace() {
williamrchr 0:08412491e70f 115 //TODO: DO
williamrchr 0:08412491e70f 116 aPace = 1;
williamrchr 0:08412491e70f 117 }
williamrchr 0:08412491e70f 118
williamrchr 0:08412491e70f 119 void received_vpace() {
williamrchr 0:08412491e70f 120 //TODO: DO
williamrchr 0:08412491e70f 121 vPace = 1;
williamrchr 0:08412491e70f 122 }
williamrchr 0:08412491e70f 123
williamrchr 0:08412491e70f 124 void heart_keyboard() {
williamrchr 0:08412491e70f 125 while(true) { //thread is continuously running
williamrchr 0:08412491e70f 126 if(pc.readable()) {
williamrchr 0:08412491e70f 127 char c = pc.getc();
williamrchr 0:08412491e70f 128 switch(c) {
williamrchr 0:08412491e70f 129 case 'r': //set to random mode
williamrchr 2:2bae2020ac36 130 pc.printf("setting random mode");
williamrchr 0:08412491e70f 131 mode = 0;
williamrchr 2:2bae2020ac36 132 changeModes = 1;
williamrchr 0:08412491e70f 133 break;
williamrchr 0:08412491e70f 134 case 'm': //set to manual mode
williamrchr 2:2bae2020ac36 135 pc.printf("setting manual mode");
williamrchr 0:08412491e70f 136 mode = 1;
williamrchr 2:2bae2020ac36 137 changeModes = 1;
williamrchr 0:08412491e70f 138 break;
williamrchr 0:08412491e70f 139 case 't': //set to test mode
williamrchr 2:2bae2020ac36 140 pc.printf("setting test mode");
williamrchr 0:08412491e70f 141 mode = 2;
williamrchr 2:2bae2020ac36 142 changeModes = 1;
williamrchr 0:08412491e70f 143 break;
williamrchr 0:08412491e70f 144 case 'a': //asignal
williamrchr 0:08412491e70f 145 if(mode) { //only if in manual (heart_mode == 1)
williamrchr 2:2bae2020ac36 146 pc.printf("pacing a manual");
williamrchr 2:2bae2020ac36 147 send_aSignal();
williamrchr 0:08412491e70f 148 }
williamrchr 0:08412491e70f 149 break;
williamrchr 0:08412491e70f 150 case 'v': //vsignal
williamrchr 0:08412491e70f 151 if(mode) { //only if in manual (heart_mode == 1)
williamrchr 2:2bae2020ac36 152 pc.printf("pacing v manual");
williamrchr 2:2bae2020ac36 153 send_vSignal();
williamrchr 0:08412491e70f 154 }
williamrchr 0:08412491e70f 155 break;
williamrchr 0:08412491e70f 156 default: //erroneous key get rid of it
williamrchr 0:08412491e70f 157 break;
williamrchr 0:08412491e70f 158 }
williamrchr 0:08412491e70f 159 }
williamrchr 0:08412491e70f 160 }
williamrchr 0:08412491e70f 161 }
williamrchr 0:08412491e70f 162
williamrchr 0:08412491e70f 163 void tick() {
williamrchr 2:2bae2020ac36 164 while(true) {
williamrchr 2:2bae2020ac36 165 a_time++;
williamrchr 2:2bae2020ac36 166 v_time++;
williamrchr 2:2bae2020ac36 167 Thread::wait(1);
williamrchr 2:2bae2020ac36 168 }
williamrchr 0:08412491e70f 169 }
williamrchr 0:08412491e70f 170
williamrchr 2:2bae2020ac36 171
williamrchr 0:08412491e70f 172 int main() {
williamrchr 0:08412491e70f 173 //TODO: Set up threads
williamrchr 2:2bae2020ac36 174 srand(time(NULL));
williamrchr 2:2bae2020ac36 175 pc.printf("setting up serial");
williamrchr 2:2bae2020ac36 176 a_Pace.rise(&received_apace);
williamrchr 2:2bae2020ac36 177 v_Pace.rise(&received_vpace);
williamrchr 2:2bae2020ac36 178
williamrchr 2:2bae2020ac36 179 Thread* keyboard = new Thread(heart_keyboard);
williamrchr 2:2bae2020ac36 180 Thread* ticker = new Thread(tick, osPriorityHigh);
williamrchr 2:2bae2020ac36 181 Thread* mode = new Thread(switch_modes);
williamrchr 0:08412491e70f 182
williamrchr 0:08412491e70f 183 }