"""
TinyBlue for Raspberry Pi Pico is licensed under the MLT License.
Created by Saranomy 2024.
"""
# import has been modified for wokwi.com, please check out github.com/saranomy/tinyblue
from machine import I2C, Pin
from utime import sleep
from pico_i2c_lcd import I2cLcd
from tinyblue import TinyBlue, Screen, Item
# led
led_pin = Pin(2, Pin.OUT)
led_pin_value = 0
led_pin.off()
# setup display and pins
i2c = I2C(0, scl = Pin(17), sda = Pin(16), freq = 400000)
i2c_devices = i2c.scan()
lcd = I2cLcd(i2c, i2c_devices[0], 2, 16)
scroll_up = Pin(22, Pin.IN, Pin.PULL_UP)
scroll_down = Pin(6, Pin.IN, Pin.PULL_UP)
select = Pin(13, Pin.IN, Pin.PULL_UP)
back = Pin(10, Pin.IN, Pin.PULL_UP)
# initialize TinyBlue
num_lines = 2
num_columns = 16
tm = TinyBlue(lcd, num_lines, num_columns)
# interrupt buttons
def interrupt_scroll_up(pin):
if pin.value() == 0:
tm.scroll(direction = -1)
scroll_up.irq(trigger=Pin.IRQ_FALLING, handler=interrupt_scroll_up)
def interrupt_scroll_down(pin):
if pin.value() == 0:
tm.scroll()
scroll_down.irq(trigger=Pin.IRQ_FALLING, handler=interrupt_scroll_down)
def interrupt_select(pin):
if pin.value() == 0:
tm.select()
select.irq(trigger=Pin.IRQ_FALLING, handler=interrupt_select)
def interrupt_back(pin):
if pin.value() == 0:
tm.back()
back.irq(trigger=Pin.IRQ_FALLING, handler=interrupt_back)
item_led_back = Item('Back / LED: OFF', is_back_button = True)
def on_click_toggle_led():
global led_pin_value
led_pin_value = (led_pin_value + 1) % 2
led_pin.toggle()
if led_pin_value:
item_led_back.set_text('Back / LED ON')
else:
item_led_back.set_text('Back / LED OFF')
led_screen = Screen([
item_led_back,
Item('Toggle', on_click = on_click_toggle_led)
])
tm.add_screen('/led', led_screen)
# about screen
about_screen = Screen([
Item('Back', is_back_button = True),
Item('GitHub/Saranomy'),
Item('TinyBlue')
])
tm.add_screen('/about', about_screen)
# main screen
def on_click_led():
tm.open_screen('/led')
def on_click_about():
tm.open_screen('/about')
item_led = Item('LED', on_click = on_click_led)
main_screen = Screen([
item_led,
Item('Temp 36.34C'),
Item('Free 105KB'),
Item('About', on_click = on_click_about)
])
tm.add_screen('/', main_screen)
tm.render()