#Importing usefool libraries and tools that will help us in our task
from machine import Pin
from lcd import lcd_print , lcd_init
from time import sleep
from keypad import Keypad
#Define demux
demux = Pin(19, Pin.OUT)
selector = Pin(18, Pin.OUT)
selector2 = Pin(5 , Pin.OUT)
# Define GPIO pins for rows
row_pins = [Pin(12), Pin(13), Pin(32), Pin(33)]
# Define GPIO pins for columns
column_pins = [Pin(25), Pin(26), Pin(27), Pin(14)]
# Define keypad layout
keys = [
['1', '2', '3', 'A'],
['4', '5', '6', 'B'],
['7', '8', '9', 'C'],
['*', '0', '#', 'D']
]
# Initialize keypad
keypad = Keypad(row_pins, column_pins, keys)
demux.value(0)
lcd_init()
while True :
#selecting the device you want to control
lcd_print("select appliance")
key_pressed = None
while key_pressed not in ('1', '2', '3', '4'):
key_pressed = keypad.read_keypad()
sleep(0.02)
if key_pressed == '1':
selector.value(0)
selector2.value(0)
lcd_print("lighting selected")
elif key_pressed == '2':
selector.value(1)
selector2.value(0)
lcd_print("fan selected")
elif key_pressed == '3':
selector.value(0)
selector2.value(1)
lcd_print("door selected")
elif key_pressed == '4':
selector.value(1)
selector2.value(1)
lcd_print("alert selected")
sleep(0.5)
#Choosing the device state
lcd_print("choose stat")
key_pressed = None
while key_pressed not in ('A', 'B', 'C'):
key_pressed = keypad.read_keypad()
sleep(0.02)
if key_pressed == 'A':
demux.value(1)
lcd_print("stat: ON")
elif key_pressed == 'B':
demux.value(0)
lcd_print("stat: OFF")
elif key_pressed == 'C':
demux.value(0)
lcd_print("stat: RESET")
sleep(0.5)
# --sleep() function is used to prevent bouncing--