Adam PIppin
3 years ago
8 changed files with 156 additions and 4 deletions
@ -0,0 +1,76 @@ |
|||
#include "watchos.h" |
|||
#include "Module_UI.h" |
|||
|
|||
#define TASK_BATTERY_UPDATE_INTERVAL_MS 30000 |
|||
|
|||
class Task_Battery : public IRunnable, public IDrawable, public Task |
|||
{ |
|||
Module_UI* ui = nullptr; |
|||
kernel_handle_t window_handle; |
|||
int voltage = 0; |
|||
unsigned long last_update = 0; |
|||
|
|||
int getBatteryVoltage() |
|||
{ |
|||
float raw_value = (analogRead(HW_BATTERY_ADC_PIN) / 4096.0 * 7.23); |
|||
return (int)round(raw_value * 100); |
|||
} |
|||
|
|||
public: |
|||
void start() |
|||
{ |
|||
ui = static_cast<Module_UI*>(watchos::module(WATCHOS_MODULE_UI)); |
|||
window_handle = ui->createWindow(this, ui->getRoot()); |
|||
ui->setAbsolutePosition(window_handle, DISPLAY_WIDTH - 32, 2, 22, 10); |
|||
} |
|||
|
|||
void tick() |
|||
{ |
|||
if (millis() - last_update > TASK_BATTERY_UPDATE_INTERVAL_MS) |
|||
{ |
|||
int new_voltage = getBatteryVoltage(); |
|||
if (new_voltage != voltage) |
|||
{ |
|||
ui->setDirty(window_handle); |
|||
voltage = new_voltage; |
|||
} |
|||
last_update = millis(); |
|||
} |
|||
} |
|||
void draw(kernel_handle_t handle) |
|||
{ |
|||
delay(100); |
|||
voltage = getBatteryVoltage(); |
|||
// Main body
|
|||
ui->fillRectangle(0, 0, 20, 10); |
|||
// Pin
|
|||
ui->fillRectangle(20, 2, 2, 6); |
|||
|
|||
if (voltage >= 350) |
|||
{ |
|||
int bars = 0; |
|||
if (voltage > 410) |
|||
bars = 3; |
|||
else if (voltage > 395) |
|||
bars = 2; |
|||
else if (voltage >= 380) |
|||
bars = 1; |
|||
else |
|||
bars = 0; |
|||
|
|||
int bar_width = (20 - 8) / 3; |
|||
int x = 2; |
|||
|
|||
for (int i = 0; i < bars; i++) |
|||
{ |
|||
ui->fillRectangle(x, 2, bar_width, ui->getHeight() - 4, COLOUR_SECONDARY); |
|||
x += bar_width + 2; |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
ui->line(0, ui->getHeight(), ui->getWidth(), 0, COLOUR_SECONDARY); |
|||
} |
|||
} |
|||
|
|||
}; |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue