HRV -> Mood

Dependencies:   MAX30101 Hexi_KW40Z Hexi_OLED_SSD1351

Files at this revision

API Documentation at this revision

Comitter:
jeannie9809
Date:
Sat Mar 16 03:37:33 2019 +0000
Parent:
3:0da9235c9069
Child:
5:a6b6d0e5a69f
Commit message:
up till before smoothing curve

Changed in this revision

8cee5929f4d8/main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/8cee5929f4d8/main.cpp	Sat Mar 16 03:03:34 2019 +0000
+++ b/8cee5929f4d8/main.cpp	Sat Mar 16 03:37:33 2019 +0000
@@ -35,8 +35,8 @@
 uint8_t testsignal = 60;
 
 // I added this
-const int num_samples = 2129;
-int index = 0;
+const int num_samples = 1200; // for 30 sec
+double TIME[num_samples];
 int ppg[num_samples];
 int SDNN_n, SDNN;
 bool first_sample_set = true;
@@ -124,7 +124,7 @@
 
 void interruptHandlerQueued()
 {
-
+//    int temp_ppg[num_samples];
     for(int iter = 0; iter < num_samples; iter+=0) {
         
         MAX30101::InterruptBitField_u interruptStatus;
@@ -199,37 +199,77 @@
                 } else {
 
                     //ppg_single_sample = 65;
-                    ppg_single_sample = num;
+                    //ppg_single_sample = num;
                     if(iter < num_samples)
                         ppg[iter] = num;
 //                    printf("%d\r\n", ppg_single_sample); // I commented this out
                     iter++;
                 }
-                //printf("%u\r\n", num);
+                printf("%d; %d\r\n", iter, ppg[iter-1]);
 
 
             }
         }
 
         interruptStatus.all = 0xFF;
+        
         if (mask_ppg == 1) {
             interruptStatus.bits.ppg_rdy = 0;
         }
         hr.enableInterrupts(interruptStatus);
     }
+    /*
+    for(int i = 0; i < num_samples; i++) {
+        ppg[i] = temp_ppg[i];
+    }
+    */
+    //ppg = temp_ppg;
 }
 
 void interruptHandler()
 {
     evqueue.call(interruptHandlerQueued);
     
+    // moving average
+    double movave[num_samples];
+    int avecap = 25;
+    int i = 0;
+    int j = 0;
+    for(i = 0; i < (avecap-1)/2; i++) {
+        movave[i] = ppg[0];
+        for(j = 1; j < 1+(avecap-1)/2; j++) {
+            movave[i] = movave[i] + ppg[j];
+        }
+        movave[i] = (double)(movave[i]/(i+(avecap-1)/2-1));
+    }
+    for(i = (num_samples-(avecap-1)/2); i < num_samples; i++) {
+        movave[i] = ppg[i-(avecap-1)/2-1];
+        for(j = (i-(avecap-1)/2); j < num_samples; j++) {
+            movave[i] = movave[i] + ppg[j];
+        }
+        movave[i] = (double)(movave[i]/(num_samples-i+(avecap-1)/2));
+    }
+    for(i = (avecap-1)/2; i < (num_samples-(avecap-1)/2); i++) {
+        movave[i] = ppg[i-(avecap-1)/2-1];
+        for(j = i-(avecap-1)/2; j < i+(avecap-1)/2; j++) {
+            movave[i] = movave[i] + ppg[j];
+        }
+        movave[i] = (double)(movave[i]/avecap);
+    }
+    // normalize ppg
+    for(i = 0; i < num_samples; i++) {
+        ppg[i] = ppg[i] - movave[i];
+    }
 }
 
 // main() runs in its own thread in the OS
 int main()
 {
 //    printf("Hello world.\r\n");
-
+    for(int i = 0; i < num_samples; i++) {
+        TIME[i] = (double)(i*(30.0/num_samples));
+    }
+    
     t.start(callback(&evqueue, &EventQueue::dispatch_forever));
     kw40z_device.attach_buttonLeft(&ButtonLeft);
     kw40z_device.attach_buttonRight(&ButtonRight);