import board
import time
import busio
import digitalio
import lcd
import i2c_pcf8574_interface
# Setup I2C LCD
i2c_bus = busio.I2C(scl=board.GP5, sda=board.GP4)
i2c = i2c_pcf8574_interface.I2CPCF8574Interface(i2c_bus, 0x27)
display = lcd.LCD(i2c, num_rows=2, num_cols=16)
display.set_backlight(True)
display.set_display_enabled(True)
# Setup buttons
SW1 = digitalio.DigitalInOut(board.GP1)
SW1.direction = digitalio.Direction.INPUT
SW1.pull = digitalio.Pull.UP
SW2 = digitalio.DigitalInOut(board.GP2)
SW2.direction = digitalio.Direction.INPUT
SW2.pull = digitalio.Pull.UP
# Text to scroll
text = "EMERGENCY!"
text_len = len(text)
max_col = 16 - text_len # max start col = 16 - len
# Button debounce tracking
prev_SW1 = True
prev_SW2 = True
def scroll_clockwise():
# Line 1 left to right
for i in range(16 - len(text) + 1):
display.clear()
display.set_cursor_pos(0, i)
display.print(text)
time.sleep(0.2)
# Line 2 right to left
for i in reversed(range(16 - len(text) + 1)):
display.clear()
display.set_cursor_pos(1, i)
display.print(text)
time.sleep(0.2)
def scroll_counterclockwise():
# Line 2 left to right
for i in range(16 - len(text) + 1):
display.clear()
display.set_cursor_pos(1, i)
display.print(text)
time.sleep(0.2)
# Line 1 right to left
for i in reversed(range(16 - len(text) + 1)):
display.clear()
display.set_cursor_pos(0, i)
display.print(text)
time.sleep(0.2)
while True:
current_SW1 = SW1.value
current_SW2 = SW2.value
if not current_SW1 and prev_SW1:
scroll_clockwise()
time.sleep(0.2) # debounce
elif not current_SW2 and prev_SW2:
scroll_counterclockwise()
time.sleep(0.2) # debounce
prev_SW1 = current_SW1
prev_SW2 = current_SW2
SW1
SW2