我正在与树莓派一起上学的项目。我们得到了一个pi,并被告知要用它创建一个项目。我带了NFC门锁。问题是我对Python的了解很少(大约5年以前参加过在线自学)。我虽然参加了100级别的软件开发课程。
我使用了一些示例脚本来为我的nfc芯片创建一个脚本,该脚本可以正常工作。我只是无法完全弄清跟踪门锁状态然后反转的必要条件。到目前为止,我的程序将在脚本启动时“锁住”大门,并不断读取卡片。 (对于学校项目,我仅点亮LED灯,而没有实际打开门的伺服器。)我将一张卡编程到“心脏”“数据库”中,并可以使用该卡成功“解锁”门。下一步是创建一个lockStatus,每次读取好卡时都可以更改它。这样,如果门未锁定,我可以将其重新锁定。
到目前为止,我所拥有的是:
def lockStatus(status):
return lockStatus
def doorStart():
print "Locking the door to start:"
gpio.output(lock, True)
time.sleep(2.0)
gpio.output(lock, False)
lockStatus(True)
def notAuth(status):
gpio.output(lock, status)
gpio.output(unlock, status)
def checkCard():
while 1:
# Scan for cards
(status,TagType) =
MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
# If a card is found
if status == MIFAREReader.MI_OK:
print "Card detected"
# Get the UID of the card
(status,uid) = MIFAREReader.MFRC522_Anticoll()
# If we have the UID, continue
if status == MIFAREReader.MI_OK:
idnumber = uid[0], uid[1], uid[2], uid[3]
#print idnumber
db = shelve.open('cardid')
idnumberdb = db['Card UID']
if idnumber == idnumberdb:
if lockStatus(True):
gpio.output(unlock, True)
time.sleep(2.0)
gpio.output(unlock, False)
lockStatus(False)
print "Door Unlocked"
else:
gpio.output(lock, True)
time.sleep(2.0)
gpio.output(lock, False)
lockStatus(True)
print "Door Locked"
else:
print "Card not authorized"
notAuth(True)
time.sleep(0.2)
notAuth(False)
time.sleep(0.2)
notAuth(True)
time.sleep(0.2)
notAuth(False)
time.sleep(0.2)
notAuth(True)
time.sleep(0.2)
notAuth(False)
# Stop
MIFAREReader.MFRC522_StopCrypto1()
doorStart()
checkCard()
我觉得我已经用notAuth
做过类似的事情,但是当我尝试通过定义lockStatus
来做同样的事情时,我不知道如何在if中进行设置声明。我想我希望它像这样。
if idnumber == idnumberdb
if lockStatus(True):
gpio.output(unlock, True)
time.sleep(2.0)
gpio.output(unlock, False)
print "Door Unlocked"
lockStatus(False)
else:
gpio.output(lock, True)
time.sleep(2.0)
gpio.output(lock, False)
print "Door Locked"
lockStatus(True)
else:
print "Card not authorized"
我将不胜感激。
编辑:我更改了代码,并添加了功能lockStatus(status)
似乎我的if lockStatus(True):
实际上并没有检查“ lockStatus == True”,因为它每次都运行解锁部分。
我将doorStart
更改为包括初始状态lockStatus(True)
并纠正了所指出的错字。
修改后的完整代码现在反映在上方。