from machine import Pin, I2C
import utime
from i2c_lcd import I2cLcd
# Wait for debugger to attach
utime.sleep(0.1)
## Setup pin layout
run_led = Pin(0, Pin.OUT)
button_pin = Pin(1, Pin.IN, Pin.PULL_DOWN)
print("GO!")
def initialize_i2c_lcd(sda_pin, scl_pin, i2c_freq):
"""Initialize the I2C LCD display with the given parameters."""
i2c_controller_id = (sda_pin//2) % 2
i2c_bus = I2C(i2c_controller_id, sda=Pin(sda_pin), scl=Pin(scl_pin), freq=i2c_freq)
i2c_address = i2c_bus.scan()[0]
print(i2c_address)
return I2cLcd(i2c_bus, i2c_address, 2, 16), i2c_address
lcd, i2c_address = initialize_i2c_lcd(sda_pin=26, scl_pin=27, i2c_freq=100_000)
#lcd.backlight_off()
def display(s):
print(":".join("{:02x}".format(ord(c)) for c in s) + " " + s)
lcd.putstr(s)
display("A")
#display("ab01")
class RPI_Pico_I2C_Layout:
def __init__(self, data_pin):
self.data_pin = data_pin
self.clock_pin = data_pin + 1
self.i2c_channel = (data_pin // 2) % 2
class Lcd(I2cLcd):
def __init__(self, data_pin, baud_rate=100_000):
self.pin_layout = RPI_Pico_I2C_Layout(data_pin)
sda = Pin(self.pin_layout.data_pin)
scl = Pin(self.pin_layout.clock_pin)
i2c_chan = self.pin_layout.i2c_channel
i2c = I2C(i2c_chan, scl=scl, sda=sda, freq=baud_rate)
i2c_addr = i2c.scan()
if not i2c_addr or len(i2c_addr)==0:
print(f"COULD NOT FIND I2C LCD on pin {data_pin}")
return
I2cLcd.__init__(self, i2c, i2c_addr[0], 2, 16)
mylcd = Lcd(16)
mylcd.putstr('YEAH!')
#lcd.writeto(lcd_addr, bytes([0]))
msg = b'Hello'
#print(msg)
#lcd.writeto(0x27, msg)
run_led.value(1)
button_down = False
while True:
#print(str(button_pin.value()) + " " + str(button_down))
button_value = button_pin.value()
if button_value != button_down:
button_down = button_value
run_led.value(not button_value)
print("DOWN" if button_value else "UP")
if button_value:
mylcd.putstr("Hello you!")
utime.sleep(0.1)