blood pressure monitor

Dependencies:   mbed wave_player mbed-rtos 4DGL-uLCD-SE SDFileSystem_OldbutworkswithRTOS

Committer:
davidcho23
Date:
Thu Apr 25 18:09:06 2019 +0000
Revision:
5:5a658d23eb45
Parent:
4:972399c63a6e
f

Who changed what in which revision?

UserRevisionLine numberNew contents of line
flameoball 3:621f4c21c8f1 1 #include "mbed.h"
4180_1 1:5b8e223e983d 2
4180_1 2:c2afd0c426af 3 #include "rtos.h"
flameoball 3:621f4c21c8f1 4 #include "uLCD_4DGL.h"
4180_1 1:5b8e223e983d 5 #include "SDFileSystem.h"
4180_1 1:5b8e223e983d 6 #include "wave_player.h"
4180_1 1:5b8e223e983d 7
4180_1 1:5b8e223e983d 8
flameoball 3:621f4c21c8f1 9
flameoball 3:621f4c21c8f1 10 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
flameoball 3:621f4c21c8f1 11
flameoball 3:621f4c21c8f1 12 FILE *wave_file;
flameoball 3:621f4c21c8f1 13 double t = 0;
flameoball 3:621f4c21c8f1 14 double signal[200];
flameoball 3:621f4c21c8f1 15 Mutex lcd_mutex;
flameoball 3:621f4c21c8f1 16 DigitalOut motor (p24);
flameoball 3:621f4c21c8f1 17 DigitalOut valve (p25);
flameoball 3:621f4c21c8f1 18 AnalogIn forceSensor (p15);
flameoball 3:621f4c21c8f1 19 bool state = true;
flameoball 3:621f4c21c8f1 20 double cur_data = 0.0;
flameoball 3:621f4c21c8f1 21 double prev_data = 0.0;
flameoball 3:621f4c21c8f1 22 int localMax[200];
flameoball 3:621f4c21c8f1 23 int diff [200];
flameoball 3:621f4c21c8f1 24 int index = 0;
flameoball 3:621f4c21c8f1 25 int cur_diff;
flameoball 3:621f4c21c8f1 26 int actual_diff;
flameoball 3:621f4c21c8f1 27 double heartRate;
flameoball 3:621f4c21c8f1 28 double high_pressure;
flameoball 3:621f4c21c8f1 29 double low_pressure;
flameoball 3:621f4c21c8f1 30 void thread1(void const *args)
flameoball 3:621f4c21c8f1 31 {
flameoball 3:621f4c21c8f1 32 while(1) {
flameoball 3:621f4c21c8f1 33 cur_data = forceSensor;
flameoball 3:621f4c21c8f1 34 }
4180_1 1:5b8e223e983d 35
flameoball 3:621f4c21c8f1 36 }
flameoball 3:621f4c21c8f1 37 void thread2(void const *args)
flameoball 3:621f4c21c8f1 38 {
flameoball 3:621f4c21c8f1 39 while(1) {
flameoball 3:621f4c21c8f1 40 if (cur_data >.8 && state ) {
flameoball 3:621f4c21c8f1 41 motor = 0;
flameoball 3:621f4c21c8f1 42 for (int i = 0; i<200; i++) {
flameoball 3:621f4c21c8f1 43 signal[i] = cur_data;
flameoball 3:621f4c21c8f1 44 Thread::wait(50);
flameoball 3:621f4c21c8f1 45 state = true;
flameoball 3:621f4c21c8f1 46 }
flameoball 3:621f4c21c8f1 47 for (int i = 2; i<198; i++) {
flameoball 3:621f4c21c8f1 48 if (signal[i-1]<signal[i] && signal[i]>signal[i+1]&&signal[i-2] <signal[i] && signal[i+2]< signal[i]) {
flameoball 3:621f4c21c8f1 49 localMax[index] = i*10;
flameoball 3:621f4c21c8f1 50 index ++;
flameoball 3:621f4c21c8f1 51 }
flameoball 3:621f4c21c8f1 52
flameoball 3:621f4c21c8f1 53 valve = 0;
flameoball 3:621f4c21c8f1 54 state = false;
flameoball 3:621f4c21c8f1 55 }
flameoball 3:621f4c21c8f1 56 for (int i = 0; i< index; i++) {
4180_1 1:5b8e223e983d 57
flameoball 3:621f4c21c8f1 58 for (int j = 0; j< index; j++) {
flameoball 3:621f4c21c8f1 59 cur_diff = localMax[j]-localMax[i];
flameoball 4:972399c63a6e 60 if (cur_diff>500 && cur_diff <1500) {
flameoball 3:621f4c21c8f1 61 actual_diff = cur_diff;
flameoball 3:621f4c21c8f1 62 heartRate = 60*1000/(actual_diff);
flameoball 4:972399c63a6e 63 high_pressure = ((signal[i]-.799)+.8)*120/.8;
flameoball 4:972399c63a6e 64 low_pressure = ((signal[j]-.798) +.8)*80/.8;
flameoball 3:621f4c21c8f1 65 }
flameoball 3:621f4c21c8f1 66 }
flameoball 3:621f4c21c8f1 67 }
flameoball 3:621f4c21c8f1 68
flameoball 3:621f4c21c8f1 69 }
flameoball 3:621f4c21c8f1 70 }
flameoball 3:621f4c21c8f1 71 }
flameoball 3:621f4c21c8f1 72 void thread3(void const *args)
flameoball 3:621f4c21c8f1 73 {
flameoball 3:621f4c21c8f1 74 while(1) {
flameoball 3:621f4c21c8f1 75 lcd_mutex.lock();
flameoball 3:621f4c21c8f1 76 uLCD.locate(0,1);
davidcho23 5:5a658d23eb45 77 uLCD.printf("Systolic: %.3f", high_pressure);
flameoball 3:621f4c21c8f1 78 uLCD.locate(0,3);
davidcho23 5:5a658d23eb45 79 uLCD.printf("Diastolic: %.3f", low_pressure);
davidcho23 5:5a658d23eb45 80 uLCD.locate(0,5);
davidcho23 5:5a658d23eb45 81 uLCD.printf("BPM: %.3f", heartRate);
davidcho23 5:5a658d23eb45 82 uLCD.locate(0,7);
davidcho23 5:5a658d23eb45 83 uLCD.printf("%3f",cur_data);
flameoball 3:621f4c21c8f1 84 lcd_mutex.unlock();
flameoball 3:621f4c21c8f1 85 }
flameoball 3:621f4c21c8f1 86
flameoball 3:621f4c21c8f1 87 }
4180_1 1:5b8e223e983d 88
4180_1 1:5b8e223e983d 89 int main()
4180_1 1:5b8e223e983d 90 {
flameoball 3:621f4c21c8f1 91 uLCD.cls();
flameoball 3:621f4c21c8f1 92 uLCD.baudrate(3000000);
flameoball 3:621f4c21c8f1 93 valve = 1;
flameoball 3:621f4c21c8f1 94 motor = 1;
flameoball 3:621f4c21c8f1 95 Thread t1(thread1); //start thread1
flameoball 3:621f4c21c8f1 96 Thread t2(thread2); //start thread2
flameoball 3:621f4c21c8f1 97 Thread t3(thread3); //start thread3
flameoball 3:621f4c21c8f1 98 while(1) {
flameoball 3:621f4c21c8f1 99
flameoball 3:621f4c21c8f1 100 }
flameoball 3:621f4c21c8f1 101 }