The HexiHeart is a demo project product that takes advantage of many of the onboard Hexiwear sensors and capabilities to create a multifunctional fitness and safety watch.

Dependencies:   FXAS21002 FXOS8700 Hexi_KW40Z Hexi_OLED_SSD1351 MAXIM W25Q64FVSSIG HTU21D MPL3115A2 TSL2561

Fork of HexiHeart_Alex by Hexiwear_zeta

Files at this revision

API Documentation at this revision

Comitter:
asong
Date:
Mon May 07 21:49:35 2018 +0000
Parent:
19:87ab6daf98e5
Child:
21:76237b62466b
Commit message:
Fixed WDT going off on some of the heart rate vibrations. Heart rate now displays on the main screen when the heart rate mode is active, and is displayed in the color of the zone.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Tue May 01 15:13:45 2018 +0000
+++ b/main.cpp	Mon May 07 21:49:35 2018 +0000
@@ -562,12 +562,14 @@
             }
             case 32: {//Turn on HR led blinking for manual demonstration
                 hr_led.attach(&Led_Zone_Indicator, HR_LED_period);
-                 break;
+                Heart_Rate_Mode = 1;
+                break;
             }
             case 33:{//Start heart rate simulation
                 StartHaptic();
                 if(maxim == 0)
                 {
+                    Heart_Rate_Mode = 1;
                     hr_led.attach(&Led_Zone_Indicator, HR_LED_period);
                     hr_simulation.attach(&HR_Simulation, 5.0);                  
                 }
@@ -827,7 +829,8 @@
                 break;
             }
             case 32: {//End HR led used for manual demonstration
-                hr_led.detach();
+                 hr_led.detach();
+                 Heart_Rate_Mode = 0;
                  RED_Led = LED_OFF; 
                  GRN_Led = LED_OFF;
                  BLU_Led = LED_OFF;
@@ -837,6 +840,7 @@
                 StartHaptic();
                 if(maxim == 0)
                 {
+                    Heart_Rate_Mode = 0;
                     hr_simulation.detach();
                     simulation_stage = 0;
                     hr_led.detach();
@@ -1671,7 +1675,23 @@
             oled.Label((uint8_t *)text,25,80); // was "dF" at 18,80
             
             if(Heart_Rate_Mode == 1) {
-                oled.Label((uint8_t *)"BPM",35,60); 
+                sprintf(text,"%i",Heart_Rate);
+                if(Current_Zone == 1) {
+                textProperties.fontColor = COLOR_YELLOW;
+                oled.SetTextProperties(&textProperties);
+            } else if(Current_Zone == 2) {
+                textProperties.fontColor = COLOR_BLUE;
+                oled.SetTextProperties(&textProperties);
+            } else if(Current_Zone == 3) {
+                textProperties.fontColor = COLOR_GREEN;
+                oled.SetTextProperties(&textProperties);
+            } else if(Current_Zone == 4) {
+                textProperties.fontColor = COLOR_RED;
+                oled.SetTextProperties(&textProperties);
+            }
+                oled.Label((uint8_t *)text,35,60); 
+                textProperties.fontColor = COLOR_WHITE;
+                oled.SetTextProperties(&textProperties);
             }
             break;
         }
@@ -2812,28 +2832,34 @@
                 // Do nothing if no zone change
             } else if(Current_Zone == Target_Zone) { //Changed to target zone
                 if(Target_Zone == LOWEST_ZONE || Prev_Zone > Target_Zone) { //must have entered from above
+                    CLRWDT();
                     haptic = 1;
                     wait(0.5);
                     haptic = 0;
                     wait(0.5);
+                    CLRWDT();
                     haptic = 1;
                     wait(0.5);
                     haptic = 0;
                 } else if(Target_Zone == HIGHEST_ZONE || Prev_Zone < Target_Zone) { //must have entered from below
+                    CLRWDT();
                     haptic = 1;
                     wait(0.5);
                     haptic = 0;
                 }
             } else if(Current_Zone != Target_Zone && Prev_Zone == Target_Zone) {
                 if(Target_Zone == HIGHEST_ZONE || Current_Zone < Target_Zone) { //must have exited below
+                    CLRWDT();
                     haptic  = 1;
                     wait(1);
                     haptic = 0;
                 } else if(Target_Zone == LOWEST_ZONE || Current_Zone > Target_Zone) { //must have exited above
                     haptic = 1;
+                    CLRWDT();
                     wait(1);
                     haptic = 0;
                     wait(1);
+                    CLRWDT();
                     haptic = 1;
                     wait(1);
                     haptic = 0;
@@ -2844,15 +2870,18 @@
             if(Current_Zone == Prev_Zone) {
                 //do nothing
             } else if(Current_Zone == Target_Zone) {
+                CLRWDT();
                 haptic = 1;
                 wait(0.2);
                 haptic = 0;
                 wait(0.2);
+                CLRWDT();
                 haptic = 1;
                 wait(0.2);
                 haptic = 0;
             } else if(Current_Zone != Target_Zone && Prev_Zone == Target_Zone) {
                 haptic = 1;
+                CLRWDT();
                 wait(1);
                 haptic = 0; 
             }
@@ -4336,6 +4365,26 @@
             oled.Label((uint8_t *)"AFP",3,0);  //Display "AFP" at x,y
             textProperties.fontColor = COLOR_WHITE;
             oled.SetTextProperties(&textProperties);
+            if(Heart_Rate_Mode == 1) {
+                sprintf(text,"%i",Heart_Rate);
+                if(Current_Zone == 1) {
+                textProperties.fontColor = COLOR_YELLOW;
+                    oled.SetTextProperties(&textProperties);
+                } else if(Current_Zone == 2) {
+                    textProperties.fontColor = COLOR_BLUE;
+                    oled.SetTextProperties(&textProperties);
+                } else if(Current_Zone == 3) {
+                    textProperties.fontColor = COLOR_GREEN;
+                    oled.SetTextProperties(&textProperties);
+                } else if(Current_Zone == 4) {
+                    textProperties.fontColor = COLOR_RED;
+                    oled.SetTextProperties(&textProperties);
+                }
+                oled.Label((uint8_t *)text,35,60);
+                textProperties.fontColor = COLOR_WHITE;
+                oled.SetTextProperties(&textProperties);
+               
+            }
             
             break;
         }// end case 0
@@ -4818,19 +4867,19 @@
 {
     maxim = 1;
     maxReset();
-    wait(0.05);
+    //wait(0.05);
     setLED1_PA(0xFF);
     setLED2_PA(0x33);
     setLED3_PA(0xFF);
     setPILOT_PA(0x19);
-    wait(0.05);
+    //wait(0.05);
     setSLOT(0x0300);  
     setFIFO_CONFIG(0x06);
     setSPO2_CONFIG(0x42);
-    wait(0.05);
+   // wait(0.05);
     setPROX_INT_THR(0x14);
     clearFIFO();
-    wait(0.05);
+    //wait(0.05);
 }
 
 void maxEnable(void)
@@ -4860,9 +4909,7 @@
     for(int i = 0; i < 100; i++)
     {
         hr_data[i] = readFIFO();
-        //if(i % 3 == 1) // there seems to be a missing "{" here
-         //   wait(0.01); // every third read wait 0.05s, this adds about 1.65s 
-     }
+    }
   
     
     peak = isPeak(hr_data);
@@ -4871,7 +4918,7 @@
     if(hr >= HR_Zone1[0] && hr <= HR_Zone4[1])
     {
         Heart_Rate = hr;
-     //   update_display();//I don't think we need to update display here, let update_data do that
+
     }
     Determine_Current_Zone();