Files
2025-05-29 17:19:35 +08:00

50 lines
1.7 KiB
Python

"""
Simple Keypad
Micropython library for the Simple Keypad
=======================================================
#Based on Author: 'Teeraphat Kullanankanjana'
@dahanzimin From the Mixly Team
"""
from machine import Pin
from time import sleep
class Keypad:
def __init__(self, row_pins, column_pins, keys):
"""Initialize the keypad object."""
if not all(isinstance(pin, Pin) for pin in row_pins):
raise ValueError("Row pins must be instances of Pin.")
if not all(isinstance(pin, Pin) for pin in column_pins):
raise ValueError("Column pins must be instances of Pin.")
if not isinstance(keys, list) or not all(isinstance(row, list) for row in keys):
raise ValueError("Keys must be a 2D list.")
self.row_pins = row_pins
self.column_pins = column_pins
self.keys = keys
for pin in self.row_pins:
pin.init(Pin.IN, Pin.PULL_UP)
for pin in self.column_pins:
pin.init(Pin.OUT)
if len(self.row_pins) > len(self.keys) or len(self.column_pins) > len(self.keys[0]):
raise ValueError("Number of row/column pins does not match the key layout size.")
def read_keypad(self):
"""Read the keypad and return the pressed key."""
for col_pin in self.column_pins:
col_pin.value(0)
for i, row_pin in enumerate(self.row_pins):
if not row_pin.value():
key_pressed = self.keys[i][self.column_pins.index(col_pin)]
col_pin.value(1)
return key_pressed
col_pin.value(1)
return None