Определение переменной, затем изменение ее статуса в программе - PullRequest
0 голосов
/ 01 декабря 2018

Я работаю над проектом с 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), и исправил опечатку, которая была указана.Измененный полный код теперь отражен выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...