2016-10-22 13 views
0

私はこの単純なロボットをLEGOで作成し、コンピューターとしてラズベリーパイを使用します。私が書いたコードは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未満になった場合、プログラムは「こんにちは」出力します... THIS UNTIL:

Ultrasonic Sensor Distance Output Picture. 出力ストリームが単に停止することがわかります。それは文字通り停止し、それはそれです。エラーメッセージなし、何もありません。そしてそれについての最悪の部分は、これをランダムに行うことです。それは単に距離を印刷しているときに停止する可能性があります。「Hi」を印刷しているときに停止することがありますが、「Hi」を印刷していて、それで私がする次のことは、プログラムを停止するためにctrl + cを押すことです。これは見た目です。like. 3つの超音波センサーが1つにまとめられ、GPIO 21とGPIO 20だけを使用していることも忘れてしまいました。彼らは彼ら自身の別々のペアのピンを持っていたとしても、彼らはまだ同じ失速の問題を抱えていたので、違いはありません。

これを引き起こしていることについて誰かが考えている場合、私はそれを修正しようと時間を費やすので、私はとても幸せです。

+0

'distance'メソッドの中に2つのループがある間に小さなスリープを追加することができます。現在、 'g.input'を引っ張るだけで多くのサイクルを消費します。 –

+0

さて、最初のwhileループと2番目のwhileループの間にt.sleep(0.01)を追加して、出力を負の値0_oにめちゃくちゃにしました... –

+0

私はwhileループの一部として、ループ。 –

答えて

0

短い答え:関数の後のwhileループで.01のスリープを追加します。 問題は、Piがセンサーよりも速くなっているため、エラーが発生せず、ただのタイムアウトになります。

Tammo Heerenが言ったように、睡眠を追加します。超音波センサーはデータを非常に速く(音の速さ)しか送信できませんが、Piは天文学的にわずかな量でも高速に計算できますが、Piとセンサーが同期しないため十分です。最初の違いは小さいですが、時間が経つにつれて大きくなります。あなたのプログラムは無作為に停止するでしょう。おそらく、CPUの速度が遅く(a.k.a.lag)、終了するのに少し時間がかかるからです。

+0

ありがとう、それはトリックを行うようだ。 –

関連する問題