Badger2040W: Use partial update for seconds on clock

pull/633/head
Mike Bell 2023-01-27 21:53:34 +00:00 zatwierdzone przez Phil Howard
rodzic 2109d7fb37
commit 26eeb2b042
1 zmienionych plików z 39 dodań i 3 usunięć

Wyświetl plik

@ -5,7 +5,7 @@ import badger2040w
display = badger2040w.Badger2040W()
display.set_update_speed(3)
display.set_update_speed(2)
display.set_thickness(4)
WIDTH, HEIGHT = display.get_bounds()
@ -14,7 +14,7 @@ try:
display.connect()
if display.isconnected():
ntptime.settime()
except RuntimeError:
except (RuntimeError, OSError):
pass # no WiFI
rtc = machine.RTC()
@ -23,6 +23,8 @@ display.set_font("gothic")
def draw_clock():
global second_offset, second_unit_offset
hms = "{:02}:{:02}:{:02}".format(hour, minute, second)
ymd = "{:04}/{:02}/{:02}".format(year, month, day)
@ -39,7 +41,35 @@ def draw_clock():
display.text(hms, hms_offset, 40, 0, 1.8)
display.text(ymd, ymd_offset, 100, 0, 1.0)
display.set_update_speed(2)
display.update()
display.set_update_speed(3)
hms = "{:02}:{:02}:".format(hour, minute)
second_offset = hms_offset + display.measure_text(hms, 1.8)
hms = "{:02}:{:02}:{}".format(hour, minute, second // 10)
second_unit_offset = hms_offset + display.measure_text(hms, 1.8)
def draw_second():
global second_offset, second_unit_offset
display.set_pen(15)
display.rectangle(second_offset, 8, 75, 56)
display.set_pen(0)
if second // 10 != last_second // 10:
s = "{:02}".format(second)
display.text(s, second_offset, 40, 0, 1.8)
display.partial_update(second_offset, 8, 75, 56)
s = "{}".format(second // 10)
second_unit_offset = second_offset + display.measure_text(s, 1.8)
else:
s = "{}".format(second % 10)
display.text(s, second_unit_offset, 40, 0, 1.8)
display.partial_update(second_unit_offset, 8, 75 - (second_unit_offset - second_offset), 56)
year, month, day, wd, hour, minute, second, _ = rtc.datetime()
@ -48,11 +78,17 @@ if (year, month, day) == (2021, 1, 1):
rtc.datetime((2022, 2, 28, 0, 12, 0, 0, 0))
last_second = second
last_minute = minute
draw_clock()
while True:
year, month, day, wd, hour, minute, second, _ = rtc.datetime()
if second != last_second:
draw_clock()
if minute != last_minute:
draw_clock()
last_minute = minute
else:
draw_second()
last_second = second
time.sleep(0.01)