from machine import Pin, PWM, SPI
import time
from mfrc522 import MFRC522
# ======================
# SERVO
# ======================
servo = PWM(Pin(13), freq=50)
def set_angle(angle):
duty = int(30 + (angle / 180) * 90)
servo.duty(duty)
def feed(times):
print("FEED", times, "x")
for _ in range(times):
set_angle(60)
time.sleep(0.4)
set_angle(0)
time.sleep(0.4)
# ======================
# BUTTON (PIN DIUBAH KE 14)
# ======================
button = Pin(14, Pin.IN, Pin.PULL_UP)
last_button = 1
last_btn_time = 0
# ======================
# RFID SETUP
# ======================
spi = SPI(1,
baudrate=1000000,
polarity=0,
phase=0,
sck=Pin(18),
mosi=Pin(23),
miso=Pin(19))
rfid = MFRC522(spi=spi, gpioRst=22, gpioCs=5)
AUTHORIZED_UID = "0x12 0x34 0x56 0x78"
set_angle(0)
# ======================
# LOOP UTAMA
# ======================
while True:
# ======================
# BUTTON (STABLE EDGE DETECT)
# ======================
btn = button.value()
now = time.ticks_ms()
if last_button == 1 and btn == 0:
if time.ticks_diff(now, last_btn_time) > 600:
print("BUTTON PRESS")
feed(3)
last_btn_time = now
last_button = btn
# ======================
# RFID
# ======================
(stat, tag_type) = rfid.request(rfid.REQIDL)
if stat == rfid.OK:
(stat, uid) = rfid.anticoll()
if stat == rfid.OK:
uid_str = " ".join(["0x%02X" % i for i in uid])
print("RFID:", uid_str)
if uid_str == AUTHORIZED_UID:
feed(3)
time.sleep(0.05)