multibadge
This commit is contained in:
parent
99f961cec0
commit
dada03d770
21
multibadge/README.md
Normal file
21
multibadge/README.md
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# Multibadge
|
||||||
|
|
||||||
|
This is like the original Badge app that comes with the Badger, but with
|
||||||
|
some additional things:
|
||||||
|
|
||||||
|
* You can have multiple badges that you switch between with the up
|
||||||
|
and down arrow buttons.
|
||||||
|
* Each badge can have a rotating display of messages (think URLs,
|
||||||
|
contact info, cute messages, etc).
|
||||||
|
* The config file is in JSON to better support multiple badge data.
|
||||||
|
|
||||||
|
I removed the company field, because I had no use for it. I'd rather have more
|
||||||
|
space for the name shown on the badge. The image size is the same, so it's
|
||||||
|
easy to upgrade from `badge` to `multibadge`.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
* Customize `multibadge.json`
|
||||||
|
* Copy `multibadge.py` to `examples` on the Badger 2040
|
||||||
|
* Copy `multibadge.json` to `badges`
|
||||||
|
* Start `multibadge` from BadgerOS
|
BIN
multibadge/icon-multibadge.jpg
Normal file
BIN
multibadge/icon-multibadge.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
14
multibadge/multibadge.json
Normal file
14
multibadge/multibadge.json
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": [
|
||||||
|
"Badger",
|
||||||
|
"Mushroom"
|
||||||
|
],
|
||||||
|
"image": "/badges/badge.jpg",
|
||||||
|
"messages": [
|
||||||
|
["first part", "badger badger", "badger badger"],
|
||||||
|
["second part", "mushroom", "mushroom"],
|
||||||
|
["third part", "SNAAAAKE", ""]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
131
multibadge/multibadge.py
Normal file
131
multibadge/multibadge.py
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
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)
|
Loading…
Reference in New Issue
Block a user