IDT Optical Sensors / Mbed 2 deprecated OB1203_IDT

Dependencies:   mbed OB1203_example_driver

Revision:
7:3ed0f0522b43
Parent:
6:aaa2f8fb5123
Child:
8:21738f9c5835
diff -r aaa2f8fb5123 -r 3ed0f0522b43 main.cpp
--- a/main.cpp	Mon May 14 19:31:50 2018 +0000
+++ b/main.cpp	Wed May 16 22:57:54 2018 +0000
@@ -19,11 +19,11 @@
 
 
 //USER CONFIGURABLE*********
-bool mode = 0; //0 for PS_LS, 1 for PPG
-bool meas_ps = 0;
+bool mode = 1; //0 for PS_LS, 1 for PPG
+bool meas_ps = 1;
 bool spo2 = 1; //0 for HR, 1 for SpO2
 bool afull = 1; //use Afull interrupt--otherwise PPG new data interrupt
-bool meas_temp = 1;
+bool meas_temp = 0;
 //****************************
 
 //internal settings
@@ -61,12 +61,12 @@
     {
         ob1203.ppg_ps_mode = PS_MODE;
     }
-    ob1203.ps_pulses = PS_PULSES(2);
+    ob1203.ps_pulses = PS_PULSES(8);
 //    pc.printf("ps_pulses = %02X\r\n",ob1203.ps_pulses);
-    ob1203.ps_pwidth = PS_PWIDTH(4);
-    ob1203.ps_rate = PS_RATE(3);
+    ob1203.ps_pwidth = PS_PWIDTH(1);
+    ob1203.ps_rate = PS_RATE(4);
 //    pc.printf("ps_rate = %02X\r\n",ob1203.ps_rate);
-    ob1203.ps_avg_en = PS_AVG_OFF;
+    ob1203.ps_avg_en = PS_AVG_ON;
     ob1203.ps_can_ana = PS_CAN_ANA_0;
     ob1203.ps_digital_can = 0;
     ob1203.ps_hys_level = 0;
@@ -107,12 +107,12 @@
     {   
         ob1203.r_current = 0;
     }
-    ob1203.ppg_ps_gain = PPG_PS_GAIN_2;
+    ob1203.ppg_ps_gain = PPG_PS_GAIN_1;
     ob1203.ppg_pow_save = PPG_POW_SAVE_OFF;
     ob1203.led_flip = LED_FLIP_OFF;
     ob1203.ch1_can_ana = PPG_CH1_CAN(0);
     ob1203.ch2_can_ana = PPG_CH2_CAN(0);
-    ob1203.ppg_avg = PPG_AVG(2); //2^n
+    ob1203.ppg_avg = PPG_AVG(0); //2^n
     ob1203.ppg_rate = PPG_RATE(1);
     ob1203.ppg_pwidth = PPG_PWIDTH(3);
     ob1203.ppg_freq = PPG_FREQ_60HZ;
@@ -167,6 +167,8 @@
 {
     int numInts = 0;
     uint32_t running_avg = 65;
+    uint32_t ps_running_avg = 1;
+    uint32_t ps_avg_ptr = 0;
     char avg_ptr = 0;
     int baseline_ptr = 0;
     uint32_t running_baseline = 850;
@@ -185,6 +187,15 @@
     uint32_t IRbaseline=0;
     uint32_t Rbaseline=0;
     uint32_t prevBaseline=0;
+    uint32_t PSavg = 0;
+    uint32_t PSprev = 0;
+    uint32_t PS_avg_buffer[ps_running_avg];
+    
+    for (int n=0;n<ps_running_avg;n++)
+    {
+        PS_avg_buffer[n] =0;
+    }
+    
     i2c.frequency( 400000 );
     char valid;
     uint32_t ps_ls_data[7];
@@ -335,12 +346,20 @@
             if( meas_ps ? ob1203.psIsNew() : ob1203.lsIsNew() )
             {
                 meas_ps ? valid = ob1203.get_ps_ls_data(ps_ls_data) : valid = ob1203.get_ls_data(ps_ls_data);
+                if(meas_ps)
+                {
+                    ( ps_avg_ptr+1 == ps_running_avg ) ? ps_avg_ptr = 0 : ps_avg_ptr++;
+                    PSprev = PS_avg_buffer[ps_avg_ptr]; //load the sample you are about to write over
+                    PS_avg_buffer[ps_avg_ptr] = ps_ls_data[0]; //load the new sample in the buffer
+                    PSavg += (PS_avg_buffer[ps_avg_ptr] - PSprev); //update the average by removing the old sample and adding the new
+//                    pc.printf("%d %d %d %d %d ",ps_avg_ptr, PSprev, PS_avg_buffer[ps_avg_ptr],ps_ls_data[0],PSavg);
+                }
                 if (meas_temp) 
                 {
                     ob1203.setMainConfig();
                 }
 //                pc.printf("%d %d %d %d %d %d\r\n",ps_ls_data[0],ps_ls_data[1],ps_ls_data[2],ps_ls_data[3],ps_ls_data[4],ps_ls_data[5]);
-                pc.printf("%d %d %d %d %d %d %d\r\n",ps_ls_data[0],ps_ls_data[1],ps_ls_data[2],ps_ls_data[3],ps_ls_data[4],ps_ls_data[5],ps_ls_data[6]);
+                pc.printf("%d, %d %d %d %d %d %d %d\r\n",(PSavg/ps_running_avg)>>6,ps_ls_data[0],ps_ls_data[1],ps_ls_data[2],ps_ls_data[3],ps_ls_data[4],ps_ls_data[5],ps_ls_data[6]);
             
             }
 //            else