v1

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("%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 }