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-part では false と評価されます。

これを試して:

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 == 0pはそのままです。

上記はgpio.input0 または 1 を返すと仮定していることに注意してください。他の値を返すことができる場合は、0 または 1 以外の値にval ^ p評価される可能性もあります。

于 2013-09-19T08:58:55.973 に答える