120 lines
2.8 KiB
Python
120 lines
2.8 KiB
Python
from picographics import PicoGraphics, DISPLAY_TUFTY_2040, PEN_P4
|
|
from pimoroni import Button
|
|
import math
|
|
import time
|
|
|
|
"""
|
|
Tufty2040: Solarized
|
|
|
|
Sets up Tufty 2040 in 4-bit colour mode and fills the
|
|
16-bit palette with some nice Solarized colours.
|
|
|
|
See: https://ethanschoonover.com/solarized/
|
|
"""
|
|
|
|
|
|
# Background & Content Tones
|
|
BASE_03 = 0
|
|
BASE_02 = 1
|
|
BASE_01 = 2
|
|
BASE_00 = 3
|
|
BASE_0 = 4
|
|
BASE_1 = 5
|
|
BASE_2 = 6
|
|
BASE_3 = 7
|
|
|
|
# Accent Colours
|
|
YELLOW = 8
|
|
ORANGE = 9
|
|
RED = 10
|
|
MAGENTA = 11
|
|
VIOLET = 12
|
|
BLUE = 13
|
|
CYAN = 14
|
|
GREEN = 15
|
|
|
|
# Friendly names for light/dark backgrounds
|
|
BG_DARK = BASE_03
|
|
BG_LIGHT = BASE_2
|
|
|
|
|
|
def bargraph(ox, oy, w, h, value, colors, pips=32):
|
|
step = int(pips / len(colors))
|
|
filled = int(value * pips)
|
|
pip_width = int(w / pips)
|
|
for i in range(pips):
|
|
p = colors[int(i / step)]
|
|
lcd.set_pen(p)
|
|
x = i * pip_width
|
|
if i > filled:
|
|
lcd.rectangle(ox + x, oy + h - 1, pip_width - 2, 1)
|
|
else:
|
|
lcd.rectangle(ox + x, oy, pip_width - 2, h)
|
|
|
|
|
|
lcd = PicoGraphics(DISPLAY_TUFTY_2040, pen_type=PEN_P4)
|
|
|
|
lcd.set_backlight(0.8)
|
|
lcd.set_font("bitmap8")
|
|
|
|
button_up = Button(22, invert=False)
|
|
button_down = Button(6, invert=False)
|
|
|
|
|
|
# Prime the palette with Solarized 16-colours!
|
|
lcd.set_palette([
|
|
(0x00, 0x2b, 0x36), # Base 03
|
|
(0x07, 0x36, 0x42), # Base 02
|
|
(0x58, 0x6e, 0x75), # base 01
|
|
(0x65, 0x7b, 0x83), # Base 00
|
|
(0x83, 0x94, 0x96), # Base 0
|
|
(0x93, 0xa1, 0xa1), # Base 1
|
|
(0xee, 0xe8, 0xd5), # Base 2
|
|
(0xfd, 0xf6, 0xe3), # Base 3
|
|
(0xb5, 0x89, 0x00), # Yellow
|
|
(0xcb, 0x4b, 0x16), # Orange
|
|
(0xdc, 0x32, 0x2f), # Red
|
|
(0xd3, 0x36, 0x82), # Magenta
|
|
(0x6c, 0x71, 0xc4), # Violet
|
|
(0x26, 0x8b, 0xd2), # Blue
|
|
(0x2a, 0xa1, 0x98), # Cyan
|
|
(0x85, 0x99, 0x00), # Green
|
|
])
|
|
|
|
dark_mode = True
|
|
|
|
|
|
while True:
|
|
if button_down.is_pressed:
|
|
dark_mode = True
|
|
if button_up.is_pressed:
|
|
dark_mode = False
|
|
|
|
lcd.set_pen(BG_DARK if dark_mode else BG_LIGHT)
|
|
lcd.clear()
|
|
|
|
texts = [
|
|
"Vær så god",
|
|
"Testing. Testing. 123.",
|
|
"Helló Világ",
|
|
"Comment ça va",
|
|
"meine Straße hinauf",
|
|
"It's a spicy 25°C",
|
|
"What do you think?",
|
|
"éphéméréité"
|
|
]
|
|
|
|
for i, pen in enumerate([YELLOW, ORANGE, RED, MAGENTA, VIOLET, BLUE, CYAN, GREEN]):
|
|
lcd.set_pen(pen)
|
|
lcd.text(texts[i], 10, i * 22 + 10, 320)
|
|
|
|
v1 = (math.sin(time.ticks_ms() / 400.0 / math.pi) + 1.0) / 2.0
|
|
v2 = (math.sin(time.ticks_ms() / 650.0 / math.pi) + 1.0) / 2.0
|
|
v3 = (math.sin(time.ticks_ms() / 900.0 / math.pi) + 1.0) / 2.0
|
|
|
|
bargraph(10, 188, 300, 8, v1, [VIOLET, BLUE, CYAN, GREEN])
|
|
bargraph(10, 200, 300, 8, v2, [GREEN, YELLOW, RED, MAGENTA])
|
|
bargraph(10, 212, 300, 8, v3, [CYAN, GREEN, YELLOW, ORANGE])
|
|
|
|
lcd.update()
|