Deniz Dosluoglu / Mbed 2 deprecated RD117_MBED_mod

Dependencies:   ToScreen mbed

Fork of RD117_MBED by Maxim Integrated

Revision:
5:27d600e46926
Parent:
4:5273ab1085ab
Child:
6:519bdb0ec306
--- a/main.cpp	Thu May 19 22:04:06 2016 +0000
+++ b/main.cpp	Tue Apr 10 03:36:39 2018 +0000
@@ -72,24 +72,39 @@
 *
 */
 #include "mbed.h"
-#include "algorithm.h"
+//#include "algorithm.h"
+#include "algorithm_by_RF.h"
 #include "MAX30102.h"
-
+#include "C12832.h"
 #define MAX_BRIGHTNESS 255
+/*
+#ifndef PLATFORM_H_
+#define PLATFORM_H_
+ //disable application functions
+#define PL_BOARD_IS_FRDM 1
+#define PL_HAS_LOW_POWER 1
+#define PL_HAS_SHELL     0
+#define PL_HAS_LED       1
+#define PL_HAS_RTOS      0
+ 
+#endif  PLATFORM_H_ */
 
 uint32_t aun_ir_buffer[500]; //IR LED sensor data
-int32_t n_ir_buffer_length;    //data length
+//int32_t n_ir_buffer_length;    //data length
+float n_ir_buffer_length;    //data length
 uint32_t aun_red_buffer[500];    //Red LED sensor data
-int32_t n_sp02; //SPO2 value
+//int32_t n_sp02; //SPO2 value
+float n_sp02;//SPO2 value
 int8_t ch_spo2_valid;   //indicator to show if the SP02 calculation is valid
 int32_t n_heart_rate;   //heart rate value
 int8_t  ch_hr_valid;    //indicator to show if the heart rate calculation is valid
 uint8_t uch_dummy;
+Timer t;
 
 Serial pc(USBTX, USBRX);    //initializes the serial port
 #ifdef TARGET_KL25Z 
 PwmOut led(PTB18);  //initializes the pwm output that connects to the on board LED
-DigitalIn INT(PTD1);  //pin PTD1 connects to the interrupt output pin of the MAX30102
+DigitalIn INT(PTD0);  //pin PTD0 connects to the interrupt output pin of the MAX30102
 #endif
 #ifdef TARGET_K64F
 DigitalIn INT(PTD1);  //pin PTD1 connects to the interrupt output pin of the MAX30102
@@ -99,12 +114,30 @@
 DigitalIn INT(P2_0);  //pin P20 connects to the interrupt output pin of the MAX30102
 #endif
 
+//C12832 lcd(PTD2,PTD1,PTA20,PTD5, PTD4);
+
 // the setup routine runs once when you press reset:
 int main() { 
+t.start();
+    //lcd.cls();
+   // wait(100);
+   // lcd.printf("Hello world");
+    /*
+    wait(100);
+    
+    for (int i = 20; i < 30; i++)
+    {
+        for (int j = 20; j <30; j++)
+        {
+            lcd.clearpixel(i,j);
+    }
+    }
+    */
+    
     uint32_t un_min, un_max, un_prev_data;  //variables to calculate the on-board LED brightness that reflects the heartbeats
     int i;
     int32_t n_brightness;
-    float f_temp;
+    float f_temp, ratio, correl;
     
     maxim_max30102_reset(); //resets the MAX30102
     // initialize serial communication at 115200 bits per second:
@@ -131,10 +164,11 @@
     un_min=0x3FFFF;
     un_max=0;
   
-    n_ir_buffer_length=500; //buffer length of 100 stores 5 seconds of samples running at 100sps
+    //n_ir_buffer_length=500; //buffer length of 500 stores 5 seconds of samples running at 100sps
     
     //read the first 500 samples, and determine the signal range
-    for(i=0;i<n_ir_buffer_length;i++)
+    //READ 100 SAMPLES
+    for(i=0;i<BUFFER_SIZE;i++)
     {
         while(INT.read()==1);   //wait until the interrupt pin asserts
         
@@ -149,25 +183,43 @@
         pc.printf(", ir=");
         pc.printf("%i\n\r", aun_ir_buffer[i]);
     }
+    rf_heart_rate_and_oxygen_saturation(aun_ir_buffer, BUFFER_SIZE, aun_red_buffer, &n_sp02, &ch_spo2_valid, &n_heart_rate, &ch_hr_valid, &ratio, &correl);
+    pc.printf("%i ", t.read_ms());
+            pc.printf("%i ", aun_red_buffer[i]);
+            //pc.printf(", ir=");
+            pc.printf("%i ", aun_ir_buffer[i]);
+            //pc.printf(", HR=%i, ", n_heart_rate);
+            pc.printf("%i ", n_heart_rate); 
+            //pc.printf("HRvalid=%i, ", ch_hr_valid);
+            pc.printf("%i ", ch_hr_valid);
+            //pc.printf("SpO2=%i, ", n_sp02);
+            pc.printf("%i ", n_sp02);
+            //pc.printf("SPO2Valid=%i\n\r", ch_spo2_valid);
+            pc.printf("%i\n\r", ch_spo2_valid); 
+    
     un_prev_data=aun_red_buffer[i];
     
     
     //calculate heart rate and SpO2 after first 500 samples (first 5 seconds of samples)
-    maxim_heart_rate_and_oxygen_saturation(aun_ir_buffer, n_ir_buffer_length, aun_red_buffer, &n_sp02, &ch_spo2_valid, &n_heart_rate, &ch_hr_valid); 
-    
+    //maxim_heart_rate_and_oxygen_saturation(aun_ir_buffer, n_ir_buffer_length, aun_red_buffer, &n_sp02, &ch_spo2_valid, &n_heart_rate, &ch_hr_valid); 
+    rf_heart_rate_and_oxygen_saturation(aun_ir_buffer, n_ir_buffer_length, aun_red_buffer, &n_sp02, &ch_spo2_valid, &n_heart_rate, &ch_hr_valid, &ratio, &correl); 
     //Continuously taking samples from MAX30102.  Heart rate and SpO2 are calculated every 1 second
-    while(1)
+    //while(1) //infinite loop
+    for (int a = 0; a<20; a++)//acquire finite amount of data
     {
         i=0;
         un_min=0x3FFFF;
         un_max=0;
         
         //dumping the first 100 sets of samples in the memory and shift the last 400 sets of samples to the top
-        for(i=100;i<500;i++)
+        //revision, dump first 25
+        //for(i=100;i<500;i++)
+        for(i=20;i<100;i++)
         {
-            aun_red_buffer[i-100]=aun_red_buffer[i];
-            aun_ir_buffer[i-100]=aun_ir_buffer[i];
-            
+            aun_red_buffer[i-20]=aun_red_buffer[i];
+            aun_ir_buffer[i-20]=aun_ir_buffer[i];
+            //aun_red_buffer[i-25]=aun_red_buffer[i];
+            //aun_ir_buffer[i-25]=aun_ir_buffer[i];
             //update the signal min and max
             if(un_min>aun_red_buffer[i])
             un_min=aun_red_buffer[i];
@@ -176,7 +228,9 @@
         }
         
         //take 100 sets of samples before calculating the heart rate.
-        for(i=400;i<500;i++)
+        //take 
+        //for(i=400;i<500;i++)
+        for(i=80;i<100;i++)
         {
             un_prev_data=aun_red_buffer[i-1];
             while(INT.read()==1);
@@ -204,16 +258,25 @@
             led.write(1-(float)n_brightness/256);
 #endif
             //send samples and calculation result to terminal program through UART
-            pc.printf("red=");
-            pc.printf("%i", aun_red_buffer[i]);
-            pc.printf(", ir=");
-            pc.printf("%i", aun_ir_buffer[i]);
-            pc.printf(", HR=%i, ", n_heart_rate); 
-            pc.printf("HRvalid=%i, ", ch_hr_valid);
-            pc.printf("SpO2=%i, ", n_sp02);
-            pc.printf("SPO2Valid=%i\n\r", ch_spo2_valid);
+           // pc.printf("red="); // remove heading to make compatible with MATLAB
+           
+           //write seconds to create seventh column for martins code
+           pc.printf("%i ", t.read_ms());
+            pc.printf("%i ", aun_red_buffer[i]);
+            //pc.printf(", ir=");
+            pc.printf("%i ", aun_ir_buffer[i]);
+            //pc.printf(", HR=%i, ", n_heart_rate);
+            pc.printf("%i ", n_heart_rate); 
+            //pc.printf("HRvalid=%i, ", ch_hr_valid);
+            pc.printf("%i ", ch_hr_valid);
+            //pc.printf("SpO2=%i, ", n_sp02);
+            pc.printf("%i ", n_sp02);
+            //pc.printf("SPO2Valid=%i\n\r", ch_spo2_valid);
+            pc.printf("%i\n\r", ch_spo2_valid);
         }
-        maxim_heart_rate_and_oxygen_saturation(aun_ir_buffer, n_ir_buffer_length, aun_red_buffer, &n_sp02, &ch_spo2_valid, &n_heart_rate, &ch_hr_valid); 
+        //maxim_heart_rate_and_oxygen_saturation(aun_ir_buffer, n_ir_buffer_length, aun_red_buffer, &n_sp02, &ch_spo2_valid, &n_heart_rate, &ch_hr_valid);
+        rf_heart_rate_and_oxygen_saturation(aun_ir_buffer, n_ir_buffer_length, aun_red_buffer, &n_sp02, &ch_spo2_valid, &n_heart_rate, &ch_hr_valid, &ratio, &correl);  
     }
+
 }
  
\ No newline at end of file