the complete model of the heart model

Dependencies:   TextLCD mbed-rtos mbed

Fork of heart by William Archer

Committer:
shengtiz
Date:
Wed Nov 30 03:45:47 2016 +0000
Revision:
2:b4551e56cd1c
Parent:
1:6ad7b5bf9c27
Child:
3:5941bb3c4fc2
3rd commit

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