
the complete model of the heart model
Dependencies: TextLCD mbed-rtos mbed
Fork of heart by
main.cpp@1:6ad7b5bf9c27, 2016-11-30 (annotated)
- Committer:
- shengtiz
- Date:
- Wed Nov 30 02:32:59 2016 +0000
- Revision:
- 1:6ad7b5bf9c27
- Parent:
- 0:08412491e70f
- Child:
- 2:b4551e56cd1c
second commit
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" |
shengtiz | 1:6ad7b5bf9c27 | 4 | #include <time.h> |
shengtiz | 1:6ad7b5bf9c27 | 5 | #include <stdlib.h> |
williamrchr | 0:08412491e70f | 6 | |
williamrchr | 0:08412491e70f | 7 | TextLCD lcd(p15,p16,p17,p18,p19,p20,TextLCD::LCD16x2); |
williamrchr | 0:08412491e70f | 8 | Serial pc(USBTX, USBRX); //set up serial |
williamrchr | 0:08412491e70f | 9 | DigitalOut natAPace(LED1); //leds for pacing |
williamrchr | 0:08412491e70f | 10 | DigitalOut natVPace(LED2); |
williamrchr | 0:08412491e70f | 11 | DigitalOut aPace(LED3); |
williamrchr | 0:08412491e70f | 12 | DigitalOut vPace(LED4); |
williamrchr | 0:08412491e70f | 13 | DigitalOut alarm(p5); //pin for alarm |
williamrchr | 0:08412491e70f | 14 | |
williamrchr | 0:08412491e70f | 15 | DigitalOut a_signal(p6); //connected to pm |
williamrchr | 0:08412491e70f | 16 | DigitalOut v_signal(p7); //connected to pm |
williamrchr | 0:08412491e70f | 17 | |
williamrchr | 0:08412491e70f | 18 | unsigned int a_time = 0; |
williamrchr | 0:08412491e70f | 19 | unsigned int v_time = 0; |
williamrchr | 0:08412491e70f | 20 | |
williamrchr | 0:08412491e70f | 21 | int mode = 0; //0 = random, 1 = manual, 2 = test |
williamrchr | 0:08412491e70f | 22 | |
williamrchr | 0:08412491e70f | 23 | //constants |
williamrchr | 0:08412491e70f | 24 | |
williamrchr | 0:08412491e70f | 25 | const int minwait_A = 10; |
williamrchr | 0:08412491e70f | 26 | const int minwait_V = 20; |
williamrchr | 0:08412491e70f | 27 | const int LRI = 1000; |
williamrchr | 0:08412491e70f | 28 | const int VRP = 400; |
williamrchr | 0:08412491e70f | 29 | const int PVARP = 500; |
williamrchr | 0:08412491e70f | 30 | const int URI = 1000; |
williamrchr | 0:08412491e70f | 31 | const int AVI = 100; |
williamrchr | 0:08412491e70f | 32 | |
williamrchr | 0:08412491e70f | 33 | void switch_modes() { |
williamrchr | 0:08412491e70f | 34 | switch(mode) { |
williamrchr | 0:08412491e70f | 35 | case 0: |
williamrchr | 0:08412491e70f | 36 | break; |
williamrchr | 0:08412491e70f | 37 | case 1: |
williamrchr | 0:08412491e70f | 38 | break; |
williamrchr | 0:08412491e70f | 39 | case 2: |
williamrchr | 0:08412491e70f | 40 | break; |
williamrchr | 0:08412491e70f | 41 | |
williamrchr | 0:08412491e70f | 42 | } |
williamrchr | 0:08412491e70f | 43 | } |
williamrchr | 0:08412491e70f | 44 | |
williamrchr | 0:08412491e70f | 45 | |
williamrchr | 0:08412491e70f | 46 | void received_apace() { |
williamrchr | 0:08412491e70f | 47 | //TODO: DO |
williamrchr | 0:08412491e70f | 48 | aPace = 1; |
williamrchr | 0:08412491e70f | 49 | |
williamrchr | 0:08412491e70f | 50 | } |
williamrchr | 0:08412491e70f | 51 | |
williamrchr | 0:08412491e70f | 52 | void received_vpace() { |
williamrchr | 0:08412491e70f | 53 | //TODO: DO |
williamrchr | 0:08412491e70f | 54 | vPace = 1; |
williamrchr | 0:08412491e70f | 55 | |
williamrchr | 0:08412491e70f | 56 | } |
williamrchr | 0:08412491e70f | 57 | |
williamrchr | 0:08412491e70f | 58 | void send_signal(int type) { //type=0 a_signal, type=1 v_signal |
williamrchr | 0:08412491e70f | 59 | |
williamrchr | 0:08412491e70f | 60 | switch(type) { |
williamrchr | 0:08412491e70f | 61 | case 0: |
williamrchr | 0:08412491e70f | 62 | a_signal = 1; |
williamrchr | 0:08412491e70f | 63 | case 1: |
williamrchr | 0:08412491e70f | 64 | v_signal = 1; |
williamrchr | 0:08412491e70f | 65 | } |
williamrchr | 0:08412491e70f | 66 | //TODO: Determine if time is right (is this supposed to be minWait?) |
williamrchr | 0:08412491e70f | 67 | wait(1); |
shengtiz | 1:6ad7b5bf9c27 | 68 | //a_sense = 0; |
shengtiz | 1:6ad7b5bf9c27 | 69 | //v_sense = 0; |
williamrchr | 0:08412491e70f | 70 | } |
williamrchr | 0:08412491e70f | 71 | |
williamrchr | 0:08412491e70f | 72 | void heart_keyboard() { |
williamrchr | 0:08412491e70f | 73 | while(true) { //thread is continuously running |
williamrchr | 0:08412491e70f | 74 | if(pc.readable()) { |
williamrchr | 0:08412491e70f | 75 | char c = pc.getc(); |
williamrchr | 0:08412491e70f | 76 | |
williamrchr | 0:08412491e70f | 77 | switch(c) { |
williamrchr | 0:08412491e70f | 78 | case 'r': //set to random mode |
williamrchr | 0:08412491e70f | 79 | mode = 0; |
williamrchr | 0:08412491e70f | 80 | break; |
williamrchr | 0:08412491e70f | 81 | case 'm': //set to manual mode |
williamrchr | 0:08412491e70f | 82 | mode = 1; |
williamrchr | 0:08412491e70f | 83 | break; |
williamrchr | 0:08412491e70f | 84 | case 't': //set to test mode |
williamrchr | 0:08412491e70f | 85 | mode = 2; |
williamrchr | 0:08412491e70f | 86 | break; |
williamrchr | 0:08412491e70f | 87 | case 'a': //asignal |
williamrchr | 0:08412491e70f | 88 | if(mode) { //only if in manual (heart_mode == 1) |
williamrchr | 0:08412491e70f | 89 | send_signal(0); |
williamrchr | 0:08412491e70f | 90 | } |
williamrchr | 0:08412491e70f | 91 | break; |
williamrchr | 0:08412491e70f | 92 | case 'v': //vsignal |
williamrchr | 0:08412491e70f | 93 | if(mode) { //only if in manual (heart_mode == 1) |
williamrchr | 0:08412491e70f | 94 | send_signal(1); |
williamrchr | 0:08412491e70f | 95 | } |
williamrchr | 0:08412491e70f | 96 | break; |
williamrchr | 0:08412491e70f | 97 | default: //erroneous key get rid of it |
williamrchr | 0:08412491e70f | 98 | break; |
williamrchr | 0:08412491e70f | 99 | } |
williamrchr | 0:08412491e70f | 100 | } |
williamrchr | 0:08412491e70f | 101 | } |
williamrchr | 0:08412491e70f | 102 | } |
williamrchr | 0:08412491e70f | 103 | |
williamrchr | 0:08412491e70f | 104 | void tick() { |
williamrchr | 0:08412491e70f | 105 | a_time++; |
williamrchr | 0:08412491e70f | 106 | v_time++; |
williamrchr | 0:08412491e70f | 107 | } |
shengtiz | 1:6ad7b5bf9c27 | 108 | // Blink functions gets called when there is an Atrial/V entricular event. |
shengtiz | 1:6ad7b5bf9c27 | 109 | void natApaceBlink(){ |
shengtiz | 1:6ad7b5bf9c27 | 110 | natAPace = 1; |
shengtiz | 1:6ad7b5bf9c27 | 111 | Thread::wait(500); |
shengtiz | 1:6ad7b5bf9c27 | 112 | natAPace = 0; |
shengtiz | 1:6ad7b5bf9c27 | 113 | Thread::wait(500); |
shengtiz | 1:6ad7b5bf9c27 | 114 | } |
shengtiz | 1:6ad7b5bf9c27 | 115 | |
shengtiz | 1:6ad7b5bf9c27 | 116 | void natVpaceBlink(){ |
shengtiz | 1:6ad7b5bf9c27 | 117 | natVPace = 1; |
shengtiz | 1:6ad7b5bf9c27 | 118 | Thread::wait(500); |
shengtiz | 1:6ad7b5bf9c27 | 119 | natVPace = 0; |
shengtiz | 1:6ad7b5bf9c27 | 120 | Thread::wait(500); |
shengtiz | 1:6ad7b5bf9c27 | 121 | } |
shengtiz | 1:6ad7b5bf9c27 | 122 | |
shengtiz | 1:6ad7b5bf9c27 | 123 | void ApaceBlink(){ |
shengtiz | 1:6ad7b5bf9c27 | 124 | aPace = 1; |
shengtiz | 1:6ad7b5bf9c27 | 125 | Thread::wait(500); |
shengtiz | 1:6ad7b5bf9c27 | 126 | aPace = 0; |
shengtiz | 1:6ad7b5bf9c27 | 127 | Thread::wait(500); |
shengtiz | 1:6ad7b5bf9c27 | 128 | } |
shengtiz | 1:6ad7b5bf9c27 | 129 | |
shengtiz | 1:6ad7b5bf9c27 | 130 | void VpaceBlink(){ |
shengtiz | 1:6ad7b5bf9c27 | 131 | vPace = 1; |
shengtiz | 1:6ad7b5bf9c27 | 132 | Thread::wait(500); |
shengtiz | 1:6ad7b5bf9c27 | 133 | vPace = 0; |
shengtiz | 1:6ad7b5bf9c27 | 134 | Thread::wait(500); |
shengtiz | 1:6ad7b5bf9c27 | 135 | } |
shengtiz | 1:6ad7b5bf9c27 | 136 | |
shengtiz | 1:6ad7b5bf9c27 | 137 | void Random(){ |
shengtiz | 1:6ad7b5bf9c27 | 138 | //TODO: heart behaviour in random mode |
shengtiz | 1:6ad7b5bf9c27 | 139 | while(mode == 0){ |
shengtiz | 1:6ad7b5bf9c27 | 140 | natApaceBlink(); |
shengtiz | 1:6ad7b5bf9c27 | 141 | |
shengtiz | 1:6ad7b5bf9c27 | 142 | } |
shengtiz | 1:6ad7b5bf9c27 | 143 | } |
shengtiz | 1:6ad7b5bf9c27 | 144 | |
shengtiz | 1:6ad7b5bf9c27 | 145 | void Manual(){ |
shengtiz | 1:6ad7b5bf9c27 | 146 | //TODO: heart behaviour in manual mode |
shengtiz | 1:6ad7b5bf9c27 | 147 | while(mode == 1){ |
shengtiz | 1:6ad7b5bf9c27 | 148 | natVpaceBlink(); |
shengtiz | 1:6ad7b5bf9c27 | 149 | } |
shengtiz | 1:6ad7b5bf9c27 | 150 | } |
shengtiz | 1:6ad7b5bf9c27 | 151 | |
shengtiz | 1:6ad7b5bf9c27 | 152 | void Test(){ |
shengtiz | 1:6ad7b5bf9c27 | 153 | //TODO: heart behaviour in test mode |
shengtiz | 1:6ad7b5bf9c27 | 154 | while(mode == 2){ |
shengtiz | 1:6ad7b5bf9c27 | 155 | ApaceBlink(); |
shengtiz | 1:6ad7b5bf9c27 | 156 | } |
shengtiz | 1:6ad7b5bf9c27 | 157 | } |
shengtiz | 1:6ad7b5bf9c27 | 158 | |
shengtiz | 1:6ad7b5bf9c27 | 159 | void modeSwitchDelay(){ |
shengtiz | 1:6ad7b5bf9c27 | 160 | srand(time(NULL)); |
shengtiz | 1:6ad7b5bf9c27 | 161 | int time = rand()%9700 + 300; |
shengtiz | 1:6ad7b5bf9c27 | 162 | Thread::wait(time); |
shengtiz | 1:6ad7b5bf9c27 | 163 | } |
williamrchr | 0:08412491e70f | 164 | |
williamrchr | 0:08412491e70f | 165 | int main() { |
williamrchr | 0:08412491e70f | 166 | //TODO: Set up threads |
shengtiz | 1:6ad7b5bf9c27 | 167 | Thread keyboard(heart_keyboard); |
shengtiz | 1:6ad7b5bf9c27 | 168 | //Note: only one of the following threads will be on duty when heart runs |
shengtiz | 1:6ad7b5bf9c27 | 169 | //and it is done through checking the mode the heart is in. |
shengtiz | 1:6ad7b5bf9c27 | 170 | Thread random(Random); |
shengtiz | 1:6ad7b5bf9c27 | 171 | Thread manual(Manual); |
shengtiz | 1:6ad7b5bf9c27 | 172 | Thread test(Test); |
shengtiz | 1:6ad7b5bf9c27 | 173 | while(1){ |
shengtiz | 1:6ad7b5bf9c27 | 174 | } |
williamrchr | 0:08412491e70f | 175 | } |