v1
Dependencies: mbed wave_player mbed-rtos 4DGL-uLCD-SE SDFileSystem_OldbutworkswithRTOS
main.cpp
- Committer:
- flameoball
- Date:
- 2019-04-15
- Revision:
- 3:621f4c21c8f1
- Parent:
- 2:c2afd0c426af
- Child:
- 4:972399c63a6e
File content as of revision 3:621f4c21c8f1:
#include "mbed.h" #include "rtos.h" #include "uLCD_4DGL.h" #include "SDFileSystem.h" #include "wave_player.h" 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; } } 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++) { 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() { 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) { } }