import machine
import utime
from machine import Pin
# ── Pin setup ──────────────────────────────────────
BTN = Pin(9, Pin.IN, Pin.PULL_DOWN)
LED_GREEN = Pin(6, Pin.OUT)
LED_RED = Pin(7, Pin.OUT)
BUZZER = Pin(8, Pin.OUT)
# ── LCD setup (4-bit) ──────────────────────────────
RS = Pin(0, Pin.OUT)
E = Pin(1, Pin.OUT)
D4 = Pin(2, Pin.OUT)
D5 = Pin(3, Pin.OUT)
D6 = Pin(4, Pin.OUT)
D7 = Pin(5, Pin.OUT)
def pulse():
E.value(1); utime.sleep_us(500)
E.value(0); utime.sleep_us(500)
def send_nibble(n):
D4.value((n >> 0) & 1)
D5.value((n >> 1) & 1)
D6.value((n >> 2) & 1)
D7.value((n >> 3) & 1)
pulse()
def lcd_cmd(cmd):
RS.value(0)
send_nibble(cmd >> 4)
send_nibble(cmd & 0xF)
utime.sleep_ms(2)
def lcd_char(ch):
RS.value(1)
send_nibble(ord(ch) >> 4)
send_nibble(ord(ch) & 0xF)
utime.sleep_us(200)
def lcd_print(text):
for c in text:
lcd_char(c)
def lcd_pos(row, col):
lcd_cmd(0x80 | (col + (0x40 if row else 0)))
def lcd_clear():
lcd_cmd(0x01); utime.sleep_ms(5)
def lcd_init():
utime.sleep_ms(50)
RS.value(0)
for _ in range(3):
send_nibble(0x3); utime.sleep_ms(5)
send_nibble(0x2); utime.sleep_ms(1)
lcd_cmd(0x28)
lcd_cmd(0x0C)
lcd_cmd(0x06)
lcd_clear()
def beep(duration=0.2):
BUZZER.value(1); utime.sleep(duration); BUZZER.value(0)
# ── Fake palm database (simulated) ─────────────────
REGISTERED_PALMS = ["PALM_001", "PALM_002"]
def scan_palm():
return "PALM_001" if BTN.value() else None
def match_palm(scan_id):
return scan_id in REGISTERED_PALMS
# ── Main loop ──────────────────────────────────────
lcd_init()
LED_GREEN.value(0)
LED_RED.value(0)
while True:
lcd_clear()
lcd_pos(0, 0); lcd_print(" PalmPay Ready ")
lcd_pos(1, 0); lcd_print(" Press btn=scan ")
utime.sleep(0.1)
if BTN.value():
lcd_clear()
lcd_pos(0, 0); lcd_print(" Scanning Palm ")
lcd_pos(1, 0); lcd_print(" Please wait.. ")
utime.sleep(1.5)
scan_id = scan_palm()
if scan_id and match_palm(scan_id):
LED_GREEN.value(1)
LED_RED.value(0)
beep(0.2)
lcd_clear()
lcd_pos(0, 0); lcd_print("Payment Approved")
lcd_pos(1, 0); lcd_print(" Thank You! ")
utime.sleep(3)
LED_GREEN.value(0)
else:
LED_RED.value(1)
LED_GREEN.value(0)
beep(0.6)
lcd_clear()
lcd_pos(0, 0); lcd_print(" Auth Failed! ")
lcd_pos(1, 0); lcd_print(" Try Again... ")
utime.sleep(3)
LED_RED.value(0)Loading
pi-pico
pi-pico