Detect full charge and improve watchface display
This commit is contained in:
parent
6f9f0e8b0e
commit
fd52ca8fe6
9 changed files with 75 additions and 26 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue