0

问题是,变量t1在循环内,但我不能在外面使用它(因为它没有定义);所以程序返回"UnboundLocalError: local variable 't1' referenced before assignment"。我不知道测量这两个事件之间时间的其他方法,每次第一次开始时(用下面的代码自我解释)。

if status in STATUSON:
        t1 = 0
        GPIO.output(17,GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(17,GPIO.LOW)
        return statement('Ok')
        t1 = time.time()
    elif status in STATUSOFF and time.time() - t1 >= 5:
        GPIO.output(17,GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(17,GPIO.LOW)
        return statement('Ok')
    elif status in STATUSOFF and time.time() - t1 <= 5:
        GPIO.output(17,GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(17,GPIO.LOW)
        time.sleep(2)
        GPIO.output(17,GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(17,GPIO.LOW)
        return statement('Ok')
4

2 回答 2

0

你的问题在这里:

        return statement('Ok')
        t1 = time.time()

您在设置变量之前返回。t1尝试颠倒这两条线。

另外,当您使用return语句时,我猜您在一个函数中,然后您应该返回t1变量(也许使用元组?),或者将其设置为全局变量(不太推荐)以便能够进行计算您的主要/顶级功能。

于 2021-01-20T16:56:09.330 回答
0

解决了:

我已经习惯pickle了解决问题。它可以将 Python 对象转换为字符流,并将其保存,因此下一个循环可以随时访问此数据(下面的新代码)。

    if status in STATUSON:
        t1 = time.time()
        with open('time.pickle', 'wb') as f:
            pickle.dump(t1, f)       
        GPIO.output(17,GPIO.HIGH)
        time.sleep(0.5)
        GPIO.output(17,GPIO.LOW)
        return statement('Ok')
    elif status in STATUSOFF:
        with open('time.pickle', 'rb') as f:
            t1 = pickle.load(f)        
        if time.time() - t1 >= 15:
            GPIO.output(17,GPIO.HIGH)
            time.sleep(0.5)
            GPIO.output(17,GPIO.LOW)
            open("time.pickle", "w").close()
            return statement('Ok')
        elif time.time() - t1 <= 15:
            GPIO.output(17,GPIO.HIGH)
            time.sleep(0.5)
            GPIO.output(17,GPIO.LOW)
            time.sleep(2)
            GPIO.output(17,GPIO.HIGH)
            time.sleep(0.5)
            GPIO.output(17,GPIO.LOW)
            return statement('Ok')
        else:
            GPIO.output(17,GPIO.HIGH)
            time.sleep(0.5)
            GPIO.output(17,GPIO.LOW)
            return statement('Ok')

完整代码: 旧的新的

于 2021-01-21T04:39:31.723 回答