from machine import Pin, SPI, PWM
import time
from ili9341 import Display
from mfrc522 import MFRC522
# TFT
spi_tft = SPI(0, baudrate=10000000, sck=Pin(18), mosi=Pin(19))
tft = Display(spi_tft, dc=Pin(20), cs=Pin(17), rst=Pin(21))
time.sleep(0.5)
# RFID
spi_rfid = SPI(1, baudrate=10000, sck=Pin(10), mosi=Pin(11), miso=Pin(12))
reader = MFRC522(spi=spi_rfid, gpioRst=15, gpioCs=13)
time.sleep(0.5)
# DONANIM
switch_pin = Pin(28, Pin.IN, Pin.PULL_DOWN)
servo = PWM(Pin(16))
servo.freq(50)
# RENKLER
YESIL = 0x07E0
KIRMIZI = 0xF800
SARI = 0xFFE0
SIYAH = 0x0000
MAVI = 0x001F
BEYAZ = 0xFFFF
# BLUE CARD = 01:02:03:04
# Şimdilik sadece ilk byte'a göre tanıyoruz
DOGRU_KART_ILK_BYTE = 1
son_mesaj = ""
def servo_aci(aci):
min_duty = 1638
max_duty = 8192
duty = int(min_duty + (aci / 180) * (max_duty - min_duty))
servo.duty_u16(duty)
def ekrana_yaz(mesaj, arkaplan, yazi=BEYAZ):
global son_mesaj
if mesaj != son_mesaj:
tft.clear(arkaplan)
tft.draw_text(20, 40, "AKILLI KASA", yazi, arkaplan, 2)
tft.draw_text(20, 140, mesaj, yazi, arkaplan, 2)
son_mesaj = mesaj
def kart_oku():
for _ in range(10):
stat, bits = reader.request(reader.REQALL)
print("request stat:", stat, "bits:", bits)
if stat == reader.OK:
time.sleep_ms(30)
stat, uid = reader.anticoll()
print("anticoll stat:", stat, "uid:", uid)
if stat == reader.OK and len(uid) >= 1:
return uid
time.sleep_ms(50)
return None
servo_aci(0)
ekrana_yaz("KART BEKLENIYOR", MAVI)
while True:
uid = kart_oku()
switch_durumu = switch_pin.value()
if uid is not None:
print("uid:", uid, "switch:", switch_durumu)
# Mavi kart kontrolü: ilk byte 1 ise doğru kart kabul et
if len(uid) > 0 and uid[0] == DOGRU_KART_ILK_BYTE:
if switch_durumu == 1:
ekrana_yaz("KILIT ACILDI", YESIL)
servo_aci(90)
else:
ekrana_yaz("ANAHTARI AC", SARI, SIYAH)
servo_aci(0)
else:
ekrana_yaz("HATALI KART", KIRMIZI)
servo_aci(0)
time.sleep(1.5)
servo_aci(0)
ekrana_yaz("KART BEKLENIYOR", MAVI)
else:
servo_aci(0)
if switch_durumu == 1:
ekrana_yaz("KART OKUT", MAVI)
else:
ekrana_yaz("BEKLEMEDE", SIYAH)
time.sleep(0.1)Loading
mfrc522
mfrc522