HRV -> Mood
Dependencies: MAX30101 Hexi_KW40Z Hexi_OLED_SSD1351
Revision 4:94190624967a, committed 2019-03-16
- 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);