"""
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()
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT