当gpio.input(i)= true时,我试图让“p”翻转/翻转0和1
有人能告诉我这段代码有什么问题 - 它不起作用!
import RPi.GPIO as gpio
import time as time
gpio.setmode(gpio.BOARD)
i = 15
o = 11
t = 0.3
p = 0
gpio.setup(i, gpio.IN)
gpio.setup(o, gpio.OUT)
gpio.output(o, True)
while True:
if gpio.input(i) and p == 0:
print("P = 1")
p = 1
time.sleep(2)
else:
if (gpio.input(i)) and p == 1:
p = 0
while True:
if p == 1:
gpio.output(o, False)
time.sleep(t)
gpio.output(o, True)
time.sleep(t)
答案 0 :(得分:3)
我猜是这样的:gpio.input(i)读取输入然后输入消失了,所以在else-part中它的计算结果为false。
试试这个:
if gpio.input(i):
if p == 0:
p = 1
else:
p = 0
答案 1 :(得分:1)
XOR运算符^
可用于触发值:
val = gpio.input(i)
p = val ^ p
注意^
的行为:
In [3]: 1 ^ 0
Out[3]: 1
In [4]: 1 ^ 1
Out[4]: 0
In [5]: 0 ^ 1
Out[5]: 1
In [6]: 0 ^ 0
Out[6]: 0
所以当val == 1
,val ^ p
触发器p
时。
当val == 0
时,p
保持不变。
请注意,上面假设gpio.input
返回0或1.如果它可以返回其他值,那么val ^ p
也可以评估为0或1以外的某个值。
答案 2 :(得分:0)
我已经破解了!! - 关键是让代码等待gpio输入,然后将p设置为1,然后在循环运行输出直到gpio输入从零(未按下)再次变为1(即:按下按钮)
(感谢人们的输入):0)xx
参见代码:<<
将RPi.GPIO导入为gpio
导入时间
gpio.setmode(gpio.BOARD)
gpio.cleanup()
i = 15
o = 11
t = 0.3
p = 0
gpio.setup(i,gpio.IN)
gpio.setup(o,gpio.OUT)
gpio.output(o,True)
而True:
if gpio.input(i):
if gpio.input(i) and p == 0:
p = 1
time.sleep(0.5)
while not(gpio.input(i)) and p == 1:
gpio.output(o, False)
time.sleep(t)
gpio.output(o, True)
time.sleep(t)
else:
while gpio.input(i):
p = 0
time.sleep(0.5)