blood pressure monitor
Dependencies: mbed wave_player mbed-rtos 4DGL-uLCD-SE SDFileSystem_OldbutworkswithRTOS
Diff: main.cpp
- Revision:
- 3:621f4c21c8f1
- Parent:
- 2:c2afd0c426af
- Child:
- 4:972399c63a6e
--- a/main.cpp Tue Apr 18 13:00:09 2017 +0000 +++ b/main.cpp Mon Apr 15 22:05:08 2019 +0000 @@ -1,23 +1,104 @@ +#include "mbed.h" -#include "mbed.h" #include "rtos.h" +#include "uLCD_4DGL.h" #include "SDFileSystem.h" #include "wave_player.h" -SDFileSystem sd(p5, p6, p7, p8, "sd"); //SD card + +uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin; + +FILE *wave_file; +double t = 0; +double signal[200]; +Mutex lcd_mutex; +DigitalOut motor (p24); +DigitalOut valve (p25); +AnalogIn forceSensor (p15); +bool state = true; +double cur_data = 0.0; +double prev_data = 0.0; +int localMax[200]; +int diff [200]; +int index = 0; +int cur_diff; +int actual_diff; +double heartRate; +double high_pressure; +double low_pressure; +void thread1(void const *args) +{ + while(1) { + cur_data = forceSensor; + } -AnalogOut DACout(p18); +} +void thread2(void const *args) +{ + while(1) { + if (cur_data >.8 && state ) { + motor = 0; + for (int i = 0; i<200; i++) { + signal[i] = cur_data; + Thread::wait(50); + state = true; + } + for (int i = 2; i<198; i++) { + if (signal[i-1]<signal[i] && signal[i]>signal[i+1]&&signal[i-2] <signal[i] && signal[i+2]< signal[i]) { + localMax[index] = i*10; + index ++; + } + + valve = 0; + state = false; + } + for (int i = 0; i< index; i++) { -wave_player waver(&DACout); + for (int j = 0; j< index; j++) { + cur_diff = localMax[j]-localMax[i]; + if (cur_diff>600 && cur_diff <1300) { + actual_diff = cur_diff; + heartRate = 60*1000/(actual_diff); + high_pressure = (signal[i]/.8)*120; + low_pressure = (signal[j]/.8)*80; + } + } + } + + } + } +} +void thread3(void const *args) +{ + while(1) { + lcd_mutex.lock(); + uLCD.locate(0,1); + uLCD.printf("%3f",cur_data); + uLCD.locate(0,3); + /* + for (int i = 0; i < 200; i++) { + if (localMax[i] != 0.0) { + uLCD.printf("%3d",localMax[i]); + uLCD.printf(" "); + } + }*/ + uLCD.printf("%3f %3f %3f",heartRate,high_pressure,low_pressure); + lcd_mutex.unlock(); + } + +} int main() { - FILE *wave_file; - printf("\r\n\nHello, wave world!\n\r"); - Thread::wait(1000); - wave_file=fopen("/sd/sample.wav","r"); - if(wave_file==NULL) printf("file open error!\n\n\r"); - waver.play(wave_file); - fclose(wave_file); -} \ No newline at end of file + uLCD.cls(); + uLCD.baudrate(3000000); + valve = 1; + motor = 1; + Thread t1(thread1); //start thread1 + Thread t2(thread2); //start thread2 + Thread t3(thread3); //start thread3 + while(1) { + + } +}