# Function: Rotate "EMERGENCY!" using shifting
# SW1 = clockwise (Line 1 → Line 2)
# SW2 = counterclockwise (Line 1 → Line 2, reverse direction)
import time
import board
import digitalio
import busio
import lcd
import i2c_pcf8574_interface
# Setup I2C dan 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 button
sw1 = digitalio.DigitalInOut(board.GP14)
sw1.direction = digitalio.Direction.INPUT
sw1.pull = digitalio.Pull.UP
sw2 = digitalio.DigitalInOut(board.GP15)
sw2.direction = digitalio.Direction.INPUT
sw2.pull = digitalio.Pull.UP
text = "EMERGENCY!"
lcd_width = 16
# Function clear row
def clear_row(row):
display.set_cursor_pos(row, 0)
display.print(" " * lcd_width)
# Function display shifting text
def display_text(row, position, text):
clear_row(row)
for i in range(len(text)):
col = position + i
if 0 <= col < lcd_width:
display.set_cursor_pos(row, col)
display.print(text[i])
# Paparan awal
display.clear()
display.set_cursor_pos(0, 0)
display.print("SW1:CW , SW2:CCW")
while True:
sw1_pressed = not sw1.value
sw2_pressed = not sw2.value
# 🔹 SW1 → CLOCKWISE
if sw1_pressed:
display.clear()
# Line 1: kiri → kanan
for pos in range(-len(text), lcd_width + 1):
display_text(0, pos, text)
time.sleep(0.1)
# Line 2: kanan → kiri
for pos in range(lcd_width, -len(text) - 1, -1):
display_text(1, pos, text)
time.sleep(0.1)
display.clear()
# 🔹 SW2 → COUNTERCLOCKWISE
elif sw2_pressed:
display.clear()
# Line 1: kanan → kiri
for pos in range(lcd_width, -len(text) - 1, -1):
display_text(0, pos, text)
time.sleep(0.01)
# Line 2: kiri → kanan
for pos in range(-len(text), lcd_width + 1):
display_text(1, pos, text)
time.sleep(0.01)
display.clear()
time.sleep(0.05)