Я работаю над проектом с Raspberry Pi для школы.Нам дали пи и сказали создать проект с ним.Я пошел с дверным замком NFC.Проблема в том, что у меня очень мало опыта работы с Python (самостоятельные курсы онлайн около 5 лет назад).Я взял курс 100 уровня для разработки программного обеспечения, хотя.
Я использовал несколько примеров сценариев для создания сценария для моего чипа NFC, который в основном работает.Я просто не могу понять, что мне нужно, чтобы отследить состояние дверного замка, а затем повернуть назад.Пока моя программа будет «запирать» дверь при запуске скрипта и постоянно читать карты.(Для школьного проекта я только загораю светодиоды, вместо того, чтобы фактически включить сервопривод для двери.) У меня есть одна карта, запрограммированная в «базе данных» cardid, и я могу успешно «отпереть» дверь этой картой.Следующим шагом является создание 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)
, и исправил опечатку, которая была указана.Измененный полный код теперь отражен выше.