我正在使用python工作来读取树莓派上的数字输入。我想将其中一个按钮变成一个切换按钮,因为只要按下它就会在1和0之间切换一个值。一切都工作正常,除了部分:
if(a == 0.0):
a = 1.0
if(a == 1.0):
a = 0.0
似乎这应该与剩下的代码一起使用,只要按下按钮就会使值在1和0之间切换,但每次打印为0.0,是否有人知道这是为什么?
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
GPIO.setup(24, GPIO.IN, pull_up_down = GPIO.PUD_UP)
a = 0.0
b = 0.0
c = 0
while True:
if(GPIO.input(4) ==1 and c ==0):
print 'Button 1 Pressed'
if(a == 0.0):
a = 1.0
if(a == 1.0):
a = 0.0
c = 1
print a
if(GPIO.input(4) !=1):
c = 0
if(GPIO.input(24) ==0):
print 'Button 2 Pressed'
答案 0 :(得分:6)
如果您从a = 0
开始,两个 if
语句都匹配,那么您最终会回到0
。
改用if .. elif
;这是一个语句,只有一个分支可以匹配:
if a == 0.0:
a = 1.0
elif a == 1.0:
a = 0.0
但是,我不确定您使用这些值的是什么。浮点比较很棘手,因为使用浮点计算可能会导致非常细微的差异,它可能看起来像1.0
但确实有0.9999999999999872545
。这不等于1.0
。也许你想用布尔代替?在这种情况下使用:
a = False
# toggle
a = not a
如果您确实需要使用浮点数,请测试您的值是否足够接近:
if abs(a - 0.0) < 1e-9:
a = 1.0
elif abs(a - 1.0) < 1e-9:
a = 0.0
如果您使用的是Python 3.5或更高版本,则可以使用新的math.isclose()
function:
from math import isclose
if isclose(a, 0.0):
a = 1.0
elif isclose(a, 1.0):
a = 0.0