私はこの単純なロボットを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だけを使用していることも忘れてしまいました。彼らは彼ら自身の別々のペアのピンを持っていたとしても、彼らはまだ同じ失速の問題を抱えていたので、違いはありません。
これを引き起こしていることについて誰かが考えている場合、私はそれを修正しようと時間を費やすので、私はとても幸せです。
'distance'メソッドの中に2つのループがある間に小さなスリープを追加することができます。現在、 'g.input'を引っ張るだけで多くのサイクルを消費します。 –
さて、最初のwhileループと2番目のwhileループの間にt.sleep(0.01)を追加して、出力を負の値0_oにめちゃくちゃにしました... –
私はwhileループの一部として、ループ。 –