
heart for pacemaker
Dependencies: TextLCD mbed-rtos mbed
main.cpp@2:2bae2020ac36, 2016-12-03 (annotated)
- 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?
User | Revision | Line number | New 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 | } |