132 lines
3.2 KiB
Python
132 lines
3.2 KiB
Python
import badger2040
|
|
import jpegdec
|
|
import json
|
|
import time
|
|
import machine
|
|
|
|
# Global Constants
|
|
WIDTH = badger2040.WIDTH
|
|
HEIGHT = badger2040.HEIGHT
|
|
|
|
IMAGE_WIDTH = 104
|
|
CONFIG_PATH = "/badges/multibadge.json"
|
|
|
|
display = badger2040.Badger2040()
|
|
|
|
config = None
|
|
with open(CONFIG_PATH, "r") as file:
|
|
config = json.loads(file.read())
|
|
|
|
# [ ] Show an error if the config is missing
|
|
# [ ] Verify all of the images are available and show an error if they're not
|
|
|
|
current_badge_index = 0
|
|
current_messages_index = 0
|
|
sleep_count = 0
|
|
|
|
# Create a new Badger and set it to update NORMAL
|
|
display = badger2040.Badger2040()
|
|
display.led(128)
|
|
display.set_update_speed(badger2040.UPDATE_NORMAL)
|
|
display.set_thickness(2)
|
|
|
|
jpeg = jpegdec.JPEG(display.display)
|
|
|
|
def render_basics():
|
|
display.set_pen(15)
|
|
display.clear()
|
|
|
|
current_badge = config[current_badge_index]
|
|
badge_image = current_badge["image"]
|
|
|
|
jpeg.open_file(badge_image)
|
|
jpeg.decode(WIDTH - IMAGE_WIDTH, 0)
|
|
|
|
display.set_pen(0)
|
|
|
|
# border next to image
|
|
display.rectangle(WIDTH - IMAGE_WIDTH - 2, 0, 2, HEIGHT)
|
|
|
|
# your name
|
|
display.set_font("sans")
|
|
display.text(current_badge["name"][0], 10, 20, WIDTH, 1)
|
|
display.text(current_badge["name"][1], 10, 50, WIDTH, 1)
|
|
|
|
# border under name
|
|
display.rectangle(0, 70, WIDTH - IMAGE_WIDTH, 2)
|
|
|
|
display.set_update_speed(badger2040.UPDATE_NORMAL)
|
|
display.update()
|
|
|
|
def render_details():
|
|
current_badge = config[current_badge_index]
|
|
|
|
# details area
|
|
display.set_pen(14)
|
|
display.rectangle(0, 72, WIDTH - IMAGE_WIDTH - 2, HEIGHT - 72)
|
|
|
|
# details
|
|
current_message = current_badge["messages"][current_messages_index]
|
|
|
|
display.set_pen(0)
|
|
display.text(current_message[0], 10, 80, WIDTH, 0.5)
|
|
display.line(0, 88, WIDTH - IMAGE_WIDTH, 88)
|
|
display.text(current_message[1], 10, 100, WIDTH, 0.65)
|
|
display.text(current_message[2], 10, 116, WIDTH, 0.65)
|
|
|
|
display.set_update_speed(badger2040.UPDATE_FAST)
|
|
display.partial_update(0, HEIGHT - 56, WIDTH - IMAGE_WIDTH, 56)
|
|
|
|
def advance_details():
|
|
global current_messages_index
|
|
|
|
current_badge = config[current_badge_index]
|
|
current_messages_index += 1
|
|
current_messages_index %= len(current_badge["messages"])
|
|
|
|
def decrement_badge():
|
|
global current_badge_index, current_messages_index
|
|
|
|
current_badge_index -= 1
|
|
current_badge_index += len(config)
|
|
current_badge_index %= len(config)
|
|
current_messages_index = 0
|
|
|
|
def increment_badge():
|
|
global current_badge_index, current_messages_index
|
|
|
|
current_badge_index += 1
|
|
current_badge_index %= len(config)
|
|
current_messages_index = 0
|
|
|
|
MESSAGE_TIME_SEC = 10
|
|
MESSAGE_TIME_COUNT = MESSAGE_TIME_SEC * 100
|
|
|
|
def render_badge_start():
|
|
global sleep_count
|
|
|
|
render_basics()
|
|
render_details()
|
|
advance_details()
|
|
sleep_count = 0
|
|
|
|
render_badge_start()
|
|
|
|
while True:
|
|
if sleep_count >= MESSAGE_TIME_COUNT:
|
|
render_details()
|
|
advance_details()
|
|
sleep_count = 0
|
|
|
|
sleep_count += 1
|
|
|
|
if display.pressed(badger2040.BUTTON_UP):
|
|
decrement_badge()
|
|
render_badge_start()
|
|
|
|
if display.pressed(badger2040.BUTTON_DOWN):
|
|
increment_badge()
|
|
render_badge_start()
|
|
|
|
time.sleep(0.01)
|