Implement light flashing for low battery alert / disabled debugging by default

This commit is contained in:
Mike C 2015-08-09 20:56:48 -04:00
parent 81eab5e545
commit 55bd8aff3d

View file

@ -15,10 +15,10 @@
// Various defines / pins / etc // Various defines / pins / etc
// TWEAK THESE ACCORDINGLY // TWEAK THESE ACCORDINGLY
// ////////// // //////////
#define DEBUG true #define DEBUG false
#define INTERACTIVE_DEBUG false #define INTERACTIVE_DEBUG false
#define USE_SLEEP false #define USE_SLEEP true
#define SLEEP_INTERVAL 1000 // miliseconds #define SLEEP_INTERVAL 500 // miliseconds
#define ALERT_LEVEL 15 // battery alert level (%) [1-32% are valid values here] #define ALERT_LEVEL 15 // battery alert level (%) [1-32% are valid values here]
#define POT_BRIGHT A0 #define POT_BRIGHT A0
#define POT_COLOR A1 #define POT_COLOR A1
@ -32,7 +32,7 @@
// Objects / values / etc // Objects / values / etc
// ////////// // //////////
MAX1704 fuelGauge; MAX1704 fuelGauge;
Metro timer = Metro(1000); // Timer for battery level alert (flashes pixels red or yellow [if red set]) to alert Metro timer = Metro(2000); // Timer for battery level alert (flashes pixels red or yellow [if red set]) to alert
float charge_percent; float charge_percent;
uint8_t brightness; uint8_t brightness;
uint16_t raw_color; uint16_t raw_color;
@ -54,6 +54,7 @@ void print_debug(); // Print debugging info if debug if debugging output is enab
void read_values(); // Read values from various sensors/devices void read_values(); // Read values from various sensors/devices
void do_low_power(); // Enable sleep / low power mode(s) as appropriate void do_low_power(); // Enable sleep / low power mode(s) as appropriate
void pixel_update(); // Update pixel colors, on/off state, etc as appropriate void pixel_update(); // Update pixel colors, on/off state, etc as appropriate
bool show_low_battery_alert(); // Whether or not the low battery alert is to be shown
ISR(WDT_vect) { Sleepy::watchdogEvent(); } // Setup the watchdog -- For sleepy ISR(WDT_vect) { Sleepy::watchdogEvent(); } // Setup the watchdog -- For sleepy
// ////////// // //////////
@ -141,6 +142,10 @@ void read_values() {
// Update pixels appropriately (on/off, color, etc) // Update pixels appropriately (on/off, color, etc)
// /////////// // ///////////
void pixel_update() { void pixel_update() {
// Store temp variable for alert showing so it doesn't change mid-run
// Metro timer is checked and is a method call that can/will change during this code block / method
bool pix_show_alert = show_low_battery_alert();
// Set RGB array to values as appropriate // Set RGB array to values as appropriate
if (white) { if (white) {
rgb[0] = rgb[1] = rgb[2] = 255; rgb[0] = rgb[1] = rgb[2] = 255;
@ -150,20 +155,21 @@ void pixel_update() {
color = map(raw_color, 0, 1024, 0, 360); color = map(raw_color, 0, 1024, 0, 360);
hsvToRgb(color, 1, 1); // set rgb byte array hsvToRgb(color, 1, 1); // set rgb byte array
} }
// Set to red/yellow for alert if alerting and the timer has run out
if (pix_show_alert) {
if (color <= red_threshold && !white) {
rgb[0] = 0;
rgb[1] = rgb[2] = 255;
}
else {
rgb[0] = 255;
rgb[1] = rgb[2] = 0;
}
}
// Set color accordingly // Set color accordingly
for (uint8_t i=0; i<NEO_PIX_NUM; i++) { for (uint8_t i=0; i<NEO_PIX_NUM; i++) {
// Set to red/yellow for alert if alerting and the timer has run out
if (fuelGauge.isAlerting() && timer.check() == 1) {
if (color <= red_threshold) {
rgb[0] = 0;
rgb[1] = rgb[2] = 255;
}
else {
rgb[0] = 255;
rgb[1] = rgb[2] = 0;
}
}
neopix.setPixelColor(i, neopix.Color(rgb[0], rgb[1], rgb[2])); neopix.setPixelColor(i, neopix.Color(rgb[0], rgb[1], rgb[2]));
} }
@ -175,6 +181,11 @@ void pixel_update() {
// Apply changes // Apply changes
neopix.show(); neopix.show();
// Introduce brief delay so there is a visible flicker when alerting
if (pix_show_alert) {
delay(500);
}
} }
// ////////// // //////////
@ -202,6 +213,13 @@ void do_low_power() {
} }
} }
// //////////
// Figure out if the low battery alert needs to be shown
// //////////
bool show_low_battery_alert() {
return fuelGauge.isAlerting() && timer.check() == 1;
}
// ////////// // //////////
// Print debugging info // Print debugging info
// ////////// // //////////