from pdisplay import Display
from pbuzzer import PillBuzzer
from pinput import Input
from pmotor import Motor
from pled import Blinker
from prfid import RFID
from time import sleep, ticks_ms, ticks_diff
# Pin Definitions For Clarity
PIN_BUZZER = 16
PIN_DISPLAY_SDA = 18
PIN_DISPLAY_SCL = 19
PIN_MOTOR = 20
PIN_INPUT_HOUR = 13
PIN_INPUT_MIN = 12
PIN_INPUT_CONFIRM = 11
PIN_RFID_SPI_RST = 0
PIN_RFID_SCK = 2
PIN_RFID_MISO = 4
PIN_RFID_MOSI = 3
PIN_RFID_CS = 1
PIN_BLINKER = 15
GRACE = 10000
display = Display(PIN_DISPLAY_SDA, PIN_DISPLAY_SCL)
buzzer = PillBuzzer(PIN_BUZZER)
blinker = Blinker(PIN_BLINKER, 0.2)
display .display_pill_reminder()
motor = Motor(PIN_MOTOR)
pill_served = False
# rfid scan function
def scanned(card_id):
global pill_served
if pill_served:
return
if card_id is not 235795475:
print(f"Invalid card ID: {card_id}")
return;
print(f"Scanned card with ID: {card_id}")
# perform ID check
blinker.stop()
motor.push_pill() # push the pill
print ("SERVING PILL")
pill_served = True
countdown = 0 # Set countdown to 5 seconds for testing
delay_sec = 0
# input confirm function
def input_confirmed(hr, mn):
global delay_sec, countdown
print("Timer confirmed!")
print("Time set: {:02d}:{:02d}".format(hr, mn))
delay_sec = mn * 60 + hr * 3600
countdown = delay_sec
def timer_elapsed():
global pill_served
blinker.start()
display.display_pill_reminder()
since_last_tune = 0
while not pill_served:
buzzer.play_tune()
since_last_tune = ticks_ms()
while not pill_served:
rfid.update()
sleep(0.05)
if ticks_diff(ticks_ms(), since_last_tune) > GRACE:
break
pill_served = False
input = Input(PIN_INPUT_HOUR, PIN_INPUT_MIN, PIN_INPUT_CONFIRM, input_confirmed, display)
rfid = RFID(PIN_RFID_SPI_RST, PIN_RFID_SCK, PIN_RFID_MISO, PIN_RFID_MOSI, PIN_RFID_CS, PIN_RFID_SPI_RST, scanned) # the pins here need to be changed for both rfid and display to work
while True:
if input.confirmed:
if countdown > 0:
display.display_countdown(countdown)
countdown -= 1
sleep(1)
if countdown == 0:
timer_elapsed()
countdown = delay_sec
continue
sleep(1)
Loading
mfrc522
mfrc522
Set Hour
Set Minutes
Enter