0

LEGO を使用してこの単純なロボットを作成し、コンピューターとして Raspberry Pi を使用します。私が書いたコードはPythonで書かれており、基本的には超音波センサーを使用して距離を測定しています。コードは次のとおりです。

import RPi.GPIO as g
import time as t
g.setmode(g.BCM)
g.setwarnings(False)

# trig is the pin on the sensor which will emit a very fast pulse
trig = 21
# echo is the pin which will recieve the pulse from the trig 
echo = 20

g.setup(trig, g.OUT)
g.setup(echo, g.IN)

def distance(dur):
    global dis
    start = 0
    end = 0
    g.output(trig, False)
    t.sleep(0.01)
    g.output(trig, True)
    t.sleep(0.00001)
    g.output(False)
    while g.input(echo) == 0:
        start = t.time()
    while g.input(echo) == 1:
        start = t.time()
    duration = end - start
    dis = duration * 17150
    dis = round(dis,2)
    print "Distance: " + dis
    t.sleep(dur)

while True:
    # so the function is being called, and the time between outputs is 0.01 seconds so it is very 
    # fast and quickly showing on the screen. If the distance is less than 5, then the program 
    # will print out "Hi" to show that. s
    distance(0.01)
    if dis < 5:
        print "Hi"

かなり簡単ですよね?しかし、ご覧のとおり、コードは問題なく実行され、距離が表示されます。手をセンサーに近づけると、変数 dis が 5 未満になると、プログラムは「Hi」と出力します...これまで:

超音波センサー距離出力画像。 出力ストリームが停止していることがわかります。それは文字通り止まり、それだけです。エラーメッセージも何もありません。そして、それについての最悪の部分は、これがランダムに行われることです. 距離を印刷しているときに停止する可能性があり、「Hi」を印刷しているときに停止する可能性がありますが、「Hi」を印刷しているときはより頻繁に停止し、ランダムな数の出力の後に停止することに気付きました。次に、ctrl+c を押してプログラムを停止すると、次のようになります。また、3 つの超音波センサーが 1 つに接続されており、GPIO 21 と GPIO 20 のみを使用していることも忘れていました。それでも動作しますが、独自の個別のピンのペアがある場合でも、同じ失速の問題が発生するため、問題は発生しません。違い。

誰かがこれを引き起こしていることについて考えを持っているなら、私はそれを修正するために何時間も費やしているので、私はとても幸せです.

4

1 に答える 1