1

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

3 回答 3

3

我的猜测是:gpio.input(i) 读取输入,然后输入消失,所以在 else 部分它评估为假。

尝试这个:

if gpio.input(i):
  if p == 0:
     p = 1
   else:
     p = 0
于 2013-09-19T08:58:39.673 回答
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 以外的某个值。

于 2013-09-19T08:58:55.973 回答
0

我已经破解了!!- 关键是让代码等待 gpio 输入,然后将 p 设置为 1,然后运行输出 while 循环,直到 gpio 输入从零(未按下)再次变为 1(即:按下按钮)

(感谢人们的输入):0)xx

见代码:<<

将 RPi.GPIO 导入为 gpio

导入时间作为时间

gpio.setmode(gpio.BOARD)

gpio.cleanup()

我 = 15

o = 11

t = 0.3

p = 0

gpio.setup(i, gpio.IN)

gpio.setup(o, gpio.OUT)

gpio.output(o, 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)
于 2013-09-21T09:19:55.217 回答