from machine import I2C, Pin, UART
from gpio_lcd import GpioLcd
import utime
import ds1307
lcd = GpioLcd(rs_pin=Pin(16),
enable_pin=Pin(17),
d4_pin=Pin(18),
d5_pin=Pin(19),
d6_pin=Pin(20),
d7_pin=Pin(21),
num_lines=2,
num_columns=16
)
i2c = I2C(0, scl=Pin(9), sda=Pin(8))
rtc = ds1307.DS1307(i2c, 0x68)
led = Pin(5, Pin.OUT)
#uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
button = Pin(15,Pin.IN,Pin.PULL_DOWN)
csv_filename1 = "data.csv"
csv_filename2 = "details.csv"
with open(csv_filename1, "a") as f:
f.write("Name,Date,Entry Time,Exit Time,RFID\n")
f.close()
with open(csv_filename2, "a") as f:
f.write("Name,RFID\n")
f.write("cactus,1234\n")
f.write("rose,6F0087C990B1\n")
f.close()
#set time (year, month, day, hours. minutes, seconds, weekday: integer: 0-6 )
#rtc.datetime = (2025, 3, 28, 13, 53, 5, 5)
while True:
x = button.value()
#data = uart.read()
#print("ENTER PASSWORD.")
#rfid_data = input()
#if data:
# rfid_data = data.decode("utf-8").strip()
# print("RFID SCANNED:", rfid_data)
if x==1:
lcd.clear()
lcd.putstr("ENTER NAME.")
print("ENTER YOUR NAME.")
new_name = input().strip()
if not new_name:
print("No input detected. Restarting.")
lcd.clear()
utime.sleep(1)
continue
print("ENTER PASSWORD.")
rfid_data = input().strip()
if not rfid_data:
print("No input detected. Restarting.")
lcd.clear()
utime.sleep(1)
continue
with open(csv_filename2, "a") as g:
g.write("{},{}\n".format(new_name,rfid_data))
lcd.clear()
lcd.move_to(0,1)
lcd.putstr("saved: "+new_name+" "+rfid_data)
utime.sleep(1)
lcd.clear()
elif x==0:
lcd.clear()
lcd.putstr("SCAN")
print("ENTER PASSWORD.")
rfid_data = input().strip()
if not rfid_data:
print("No input detected. Restarting.")
lcd.clear()
utime.sleep(1)
continue
name = None
with open(csv_filename2, "r") as g:
lines = g.readlines()[1:]
for line in lines:
sname, srfid = line.strip().split(",")
if srfid == rfid_data:
print("Data is correct")
name = sname
break
if name:
date_time = rtc.datetime
date_str = "{:02d}/{:02d}/{:04d}".format(date_time[2], date_time[1], date_time[0])
time_str = "{:02d}:{:02d}:{:02d}".format(date_time[3], date_time[4], date_time[5])
lines = []
with open(csv_filename1, "r") as f:
lines = f.readlines()
found = False
with open(csv_filename1, "w") as f:
for line in lines:
data = line.strip().split(",")
if len(data) >= 5 and data[4] == rfid_data and data[3] == "":
data[3] = time_str # Update exit time
line = ",".join(data) + "\n"
found = True
f.write(line)
if not found:
f.write("{},{},{},,{}\n".format(name, date_str, time_str, rfid_data)) # New entry
with open(csv_filename1, "r") as f:
print("\nUpdated CSV Data:\n" + f.read())
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr(time_str)
lcd.move_to(0, 1)
lcd.putstr("welcome "+sname)
led.value(1)
utime.sleep(2)
led.value(0)
utime.sleep(1)
lcd.clear()
else:
print("INVALID RFID")
lcd.move_to(0, 0)
lcd.putstr("invalid")
utime.sleep(1)
lcd.clear()