v1
Dependencies: mbed wave_player mbed-rtos 4DGL-uLCD-SE SDFileSystem_OldbutworkswithRTOS
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("%3f",cur_data); 00078 uLCD.locate(0,3); 00079 /* 00080 for (int i = 0; i < 200; i++) { 00081 if (localMax[i] != 0.0) { 00082 uLCD.printf("%3d",localMax[i]); 00083 uLCD.printf(" "); 00084 } 00085 }*/ 00086 uLCD.printf("%3f %3f %3f",heartRate,high_pressure,low_pressure); 00087 lcd_mutex.unlock(); 00088 } 00089 00090 } 00091 00092 int main() 00093 { 00094 uLCD.cls(); 00095 uLCD.baudrate(3000000); 00096 valve = 1; 00097 motor = 1; 00098 Thread t1(thread1); //start thread1 00099 Thread t2(thread2); //start thread2 00100 Thread t3(thread3); //start thread3 00101 while(1) { 00102 00103 } 00104 }
Generated on Sat Jul 23 2022 20:14:29 by 1.7.2