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
Revision 15:330794a9f347, committed 2018-04-11
- Comitter:
- asong
- Date:
- Wed Apr 11 02:23:07 2018 +0000
- Parent:
- 14:c3b080cdf36b
- Child:
- 16:537ef0c72084
- Commit message:
- Fixed issues from previous upload. Also fixed the heat index display on the home screen to show regardless of the value. WDT causes heart rate measurement to restart the device. WDT causes manual hr in/decrementing slow.
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Apr 11 01:46:49 2018 +0000 +++ b/main.cpp Wed Apr 11 02:23:07 2018 +0000 @@ -236,9 +236,9 @@ uint8_t Reset_Count = 0; uint8_t Current_Zone = 1; uint8_t Prev_Zone = 1; -uint8_t Heart_Rate = 100; +uint8_t Heart_Rate = 0; uint8_t *HR_return; -uint8_t Age = 50; // Initialize age +uint8_t Age = 25; // Initialize age uint8_t Max_Bpm = 220 - Age; // Initialize Max BPM uint8_t Screen_Num = 0; // Initialize to main screen uint8_t Error_Num = 0; // Error num for debug @@ -248,7 +248,7 @@ uint8_t HR_Zone2[2] = {HR_Zone1[1] + 1, Max_Bpm * .70}; //Heart Rate Zone 2 uint8_t HR_Zone3[2] = {HR_Zone2[1] + 1, Max_Bpm * .80}; //Heart Rate Zone 3 uint8_t HR_Zone4[2] = {HR_Zone3[1] + 1, Max_Bpm}; //Heart Rate Zone 4 -int heat_index; // used in Heat index calc +uint8_t heat_index; // used in Heat index calc int hi_calc; // used in Heat index calc int adjustment; // used in Heat index calc // slow changing variables @@ -1023,6 +1023,12 @@ update_display(); break; } + case 31: { + StartHaptic(); + Screen_Num = 32; + update_display(); + break; + } case 32: { StartHaptic(); Screen_Num = 33; @@ -1033,6 +1039,7 @@ StartHaptic(); Screen_Num = 7; update_display(); + break; } case 41: {// Fall-Mode adj StartHaptic(); @@ -1627,11 +1634,13 @@ Heat_Index_Calculation(); sprintf(text,"%i",heat_index); - oled.TextBox((uint8_t *)text,3,80,15,15); //show HI in a 15px by 15px text box at x=3, y=80 - strcpy((char *) text,"F");oled.Label((uint8_t *)text,22,80); // was "dF" at 18,80 + oled.Label((uint8_t *)text,3,80);// HI at x,y + //oled.TextBox((uint8_t *)text,3,80); //show HI in a 15px by 15px text box at x=3, y=80 + strcpy((char *) text,"F"); + oled.Label((uint8_t *)text,25,80); // was "dF" at 18,80 if(Heart_Rate_Mode == 1) { - oled.Label((uint8_t *)"BPM",35,60); // Display "H.I." at x,y + oled.Label((uint8_t *)"BPM",35,60); } break; } @@ -2682,7 +2691,6 @@ void Enable_Heart_Rate() { Heart_Rate_Mode = true; - Heart_Rate_Vibrations(); } /***************************************************************************** @@ -2693,8 +2701,7 @@ ******************************************************************************/ void Disable_Heart_Rate() { - Heart_Rate_Mode = false; - Heart_Rate_Vibrations(); + Heart_Rate_Mode = false; } /***************************************************************************** @@ -2719,6 +2726,7 @@ } else { //error reading, don't change anything } + Heart_Rate_Vibrations(); } @@ -2730,22 +2738,38 @@ ******************************************************************************/ void Heart_Rate_Vibrations() { - if(Heart_Rate_Mode == true) { + if(HR_Vibration == 1) { //All Pre-loaded vibrations enabled if(Current_Zone == Prev_Zone) { // 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 - StartHaptic(ENTER_ABOVE); + haptic = 1; + wait(0.5); + haptic = 0; + wait(0.5); + haptic = 1; + wait(0.5); + haptic = 0; } else if(Target_Zone == HIGHEST_ZONE || Prev_Zone < Target_Zone) { //must have entered from below - StartHaptic(ENTER_BELOW); + 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 - StartHaptic(EXIT_BELOW); + haptic = 1; + wait(1); + haptic = 0; } else if(Target_Zone == LOWEST_ZONE || Current_Zone > Target_Zone) { //must have exited above - StartHaptic(EXIT_ABOVE); + haptic = 1; + wait(1); + haptic = 0; + wait(1); + haptic = 1; + wait(1); + haptic = 0; } } } else if(HR_Vibration == 2) { @@ -2753,15 +2777,17 @@ if(Current_Zone == Prev_Zone) { //do nothing } else if(Current_Zone == Target_Zone) { - StartHaptic(VIB_OPT_2); - wait(0.1); - StartHaptic(VIB_OPT_2); + haptic = 1; + wait(0.2); + haptic = 0; + wait(0.2); + haptic = 1; + wait(0.2); + haptic = 0; } else if(Current_Zone != Target_Zone && Prev_Zone == Target_Zone) { - StartHaptic(VIB_OPT_2); - wait(0.1); - StartHaptic(VIB_OPT_2); - wait(0.1); - StartHaptic(VIB_OPT_2); + haptic = 1; + wait(1); + haptic = 0; } } else if(HR_Vibration == 3) { @@ -2771,7 +2797,7 @@ //Error, can only be choices 1-3 error_screen(); } - } + } /***************************************************************************** @@ -2789,6 +2815,7 @@ } else { Heart_Rate += 1; } + Determine_Current_Zone(); } /***************************************************************************** @@ -2806,7 +2833,8 @@ } else { Heart_Rate -= 1; } -} // end of Decrement_Heart_Rate + Determine_Current_Zone(); +} void Led_Zone_Indicator() { @@ -4201,8 +4229,9 @@ Heat_Index_Calculation(); sprintf(text,"%i",heat_index); - oled.TextBox((uint8_t *)text,3,80,15,15); //show HI in a 15px by 15px text box at x=3, y=80 - + //oled.TextBox((uint8_t *)text,3,80,15,15); //show HI in a 15px by 15px text box at x=3, y=80 + oled.Label((uint8_t *)text,3,80);// HI at x,y + textProperties.fontColor = COLOR_GRAY; if(Fall_Alert == 1){ textProperties.fontColor = COLOR_GREEN; // is Fall protection on?