Detect full charge and improve watchface display
This commit is contained in:
@@ -19,6 +19,12 @@ void Battery::Update() {
|
||||
isCharging = !nrf_gpio_pin_read(chargingPin);
|
||||
isPowerPresent = !nrf_gpio_pin_read(powerPresentPin);
|
||||
|
||||
if (isPowerPresent && !isCharging) {
|
||||
isFull = true;
|
||||
} else if (!isPowerPresent) {
|
||||
isFull = false;
|
||||
}
|
||||
|
||||
if (isReading) {
|
||||
return;
|
||||
}
|
||||
@@ -65,12 +71,12 @@ void Battery::SaadcEventHandler(nrfx_saadc_evt_t const* p_event) {
|
||||
// p_event->data.done.p_buffer[0] = (adc_voltage / reference_voltage) * 1024
|
||||
voltage = p_event->data.done.p_buffer[0] * (8 * 600) / 1024;
|
||||
|
||||
if (voltage > battery_max) {
|
||||
if (isFull) {
|
||||
percentRemaining = 100;
|
||||
} else if (voltage < battery_min) {
|
||||
percentRemaining = 0;
|
||||
} else {
|
||||
percentRemaining = (voltage - battery_min) * 100 / (battery_max - battery_min);
|
||||
percentRemaining = std::min((voltage - battery_min) * 100 / (battery_max - battery_min), 99);
|
||||
}
|
||||
|
||||
nrfx_saadc_uninit();
|
||||
|
@@ -23,13 +23,19 @@ namespace Pinetime {
|
||||
}
|
||||
|
||||
bool IsCharging() const {
|
||||
return isCharging;
|
||||
// isCharging will go up and down when fully charged
|
||||
// isFull makes sure this returns false while fully charged.
|
||||
return isCharging && !isFull;
|
||||
}
|
||||
|
||||
bool IsPowerPresent() const {
|
||||
return isPowerPresent;
|
||||
}
|
||||
|
||||
bool IsFull() const {
|
||||
return isFull;
|
||||
}
|
||||
|
||||
private:
|
||||
static Battery* instance;
|
||||
nrf_saadc_value_t saadc_value;
|
||||
@@ -40,6 +46,7 @@ namespace Pinetime {
|
||||
uint16_t voltage = 0;
|
||||
uint8_t percentRemaining = 0;
|
||||
|
||||
bool isFull = false;
|
||||
bool isCharging = false;
|
||||
bool isPowerPresent = false;
|
||||
|
||||
|
Reference in New Issue
Block a user