diff --git a/micropython/examples/tufty2040/tufty2040_solarized.py b/micropython/examples/tufty2040/tufty2040_solarized.py new file mode 100644 index 00000000..3c97d9b7 --- /dev/null +++ b/micropython/examples/tufty2040/tufty2040_solarized.py @@ -0,0 +1,119 @@ +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()