the complete model of the heart model

Dependencies:   TextLCD mbed-rtos mbed

Fork of heart by William Archer

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?

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
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 }