blood pressure monitor

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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 #include "rtos.h"
00004 #include "uLCD_4DGL.h"
00005 #include "SDFileSystem.h"
00006 #include "wave_player.h"
00007 
00008 
00009 
00010 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
00011 
00012 FILE *wave_file;
00013 double t = 0;
00014 double signal[200];
00015 Mutex lcd_mutex;
00016 DigitalOut motor (p24);
00017 DigitalOut valve (p25);
00018 AnalogIn forceSensor (p15);
00019 bool state = true;
00020 double cur_data = 0.0;
00021 double prev_data = 0.0;
00022 int localMax[200];
00023 int diff [200];
00024 int index = 0;
00025 int cur_diff;
00026 int actual_diff;
00027 double heartRate;
00028 double high_pressure;
00029 double low_pressure;
00030 void thread1(void const *args)
00031 {
00032     while(1) {
00033         cur_data = forceSensor;
00034     }
00035 
00036 }
00037 void thread2(void const *args)
00038 {
00039     while(1) {
00040         if (cur_data >.8 && state ) {
00041             motor = 0;
00042             for (int i = 0; i<200; i++) {
00043                 signal[i] = cur_data;
00044                 Thread::wait(50);
00045                 state = true;
00046             }
00047             for (int i = 2; i<198; i++) {
00048                 if (signal[i-1]<signal[i] && signal[i]>signal[i+1]&&signal[i-2] <signal[i] && signal[i+2]< signal[i]) {
00049                     localMax[index] = i*10;
00050                     index ++;
00051                 }
00052 
00053                 valve = 0;
00054                 state = false;
00055             }
00056             for (int i = 0; i< index; i++) {
00057 
00058                 for (int j = 0; j< index; j++) {
00059                     cur_diff = localMax[j]-localMax[i];
00060                     if (cur_diff>500 && cur_diff <1500) {
00061                         actual_diff = cur_diff;
00062                         heartRate  = 60*1000/(actual_diff);
00063                         high_pressure = ((signal[i]-.799)+.8)*120/.8;
00064                         low_pressure =  ((signal[j]-.798) +.8)*80/.8;
00065                     }
00066                 }
00067             }
00068 
00069         }
00070     }
00071 }
00072 void thread3(void const *args)
00073 {
00074     while(1) {
00075         lcd_mutex.lock();
00076         uLCD.locate(0,1);
00077         uLCD.printf("Systolic: %.3f", high_pressure);
00078         uLCD.locate(0,3);
00079         uLCD.printf("Diastolic: %.3f", low_pressure);
00080         uLCD.locate(0,5);
00081         uLCD.printf("BPM: %.3f", heartRate);
00082         uLCD.locate(0,7);
00083         uLCD.printf("%3f",cur_data);
00084         lcd_mutex.unlock();
00085     }
00086 
00087 }
00088 
00089 int main()
00090 {
00091     uLCD.cls();
00092     uLCD.baudrate(3000000);
00093     valve = 1;
00094     motor = 1;
00095     Thread t1(thread1); //start thread1
00096     Thread t2(thread2); //start thread2
00097     Thread t3(thread3); //start thread3
00098     while(1) {
00099 
00100     }
00101 }