【问题标题】:How do you give a variable a value as the result of an if statement?作为 if 语句的结果,如何给变量赋值?
【发布时间】:2013-09-19 08:52:26
【问题描述】:

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

【问题讨论】:

  • 你看到了什么输出
  • 请注意,第二个循环将永远执行,因为您的第一个循环永远不会结束。
  • @MartijnPieters:这可能表明翻转不是真正的问题。
  • 另外,因为您在 else 子句中有第二次调用 gpio.input(),所以每个循环会调用一次或两次,具体取决于 p 的值。我怀疑这就是你想要的。

标签: python variables if-statement set


【解决方案1】:

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

试试这个:

if gpio.input(i):
  if p == 0:
     p = 1
   else:
     p = 0

【讨论】:

  • 有趣的是,'print("P = 1")' 行有效。 P = 1 显示在屏幕上。我会试试看 - 谢谢!
  • 是的,这是合乎逻辑的,因为问题只出在 else 部分。代码的另一个选项是这样的: if gpio.input(i): p = 1 - p 或者,当然,下面提到的 XOR 运算符。
【解决方案2】:

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 人字拖pval == 0 时,p 保持不变。

请注意,以上假设 gpio.input 返回 0 或 1。如果它可以返回其他值,则 val ^ p 也可能计算为 0 或 1 以外的某个值。

【讨论】:

  • 感谢您对 XOR 的提醒 - 将派上用场 - 我的问题似乎是,一旦满足逻辑,将 'p' 设置为 1 或 0 的结果操作不是'没有发生,但正在调用“打印”方法??
  • 您如何确定p 未被设置?也许尝试print(p) 看看p 的值在while-loop 中是什么。
【解决方案3】:

我破解了!! - 关键是让代码等待 gpio 输入,然后将 p 设置为 1,然后运行输出 while 循环,直到 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)

当真时:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-13
    • 2011-02-15
    • 2015-11-09
    • 2022-09-25
    • 2020-06-27
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    相关资源
    最近更新 更多