定义变量,然后在整个程序中更改其状态

时间:2018-12-01 14:39:02

标签: python function

我正在与树莓派一起上学的项目。我们得到了一个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) 并纠正了所指出的错字。 修改后的完整代码现在反映在上方。

0 个答案:

没有答案