作为if语句的结果,如何为变量赋值?

时间:2013-09-19 08:52:27

标签: python variables if-statement set

当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)

3 个答案:

答案 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 == 1val ^ 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)