Временные метки Python в циклах while ведут себя странно - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь создать анемометр с ультразвуком на моем Raspberry Pi 4. Я действительно новичок в Python, так что это моя первая попытка. Я действительно расстроен и застрял с моей настройкой. Я не уверен, почему мой код просто не работает.

print("Sending pulse 1")
GPIO.output(Trig1, True)
time.sleep(0.00001)
GPIO.output(Trig1, False)

while GPIO.input(Echo1)==0:
    start_timeX = time.time()

while GPIO.input(Echo1)==1:
    end_timeX = time.time()

Проблема, которую я получаю с этим кодом, заключается в том, что когда я print((end_timeX - start_timeX)*1000) (преобразовываю разницу в секунды), я обычно получаю около 0,3 секунды, что является высоким, но разумным (расстояние между Trig1 и Trig2 составляет около10 см. Код всегда работает намного быстрее, чем эти 0,3 секунды, но иногда это генерирует случайное число (обычно около 22 с или какое-то чрезвычайно большое число в миллиардах). Поскольку эти числа настолько случайны, я думаю, код простосломался, а не моя проводка.

Я выложу весь файл python внизу этого поста, потому что это может быть что-то еще, просто странное.

import RPi.GPIO as GPIO
import time
import math
GPIO.setmode(GPIO.BCM)

Trig1 = 23
Trig2 = 24
Echo1 = 14
Echo2 = 15

print("Testing towers")

GPIO.setup(Trig1, GPIO.OUT)
GPIO.setup(Trig2, GPIO.OUT)
GPIO.setup(Echo1, GPIO.IN)
GPIO.setup(Echo2, GPIO.IN)

sound_time = 0.0095 / 343

def removeSound(speed):
        return speed - sound_time

GPIO.output(Trig1, False)
GPIO.output(Trig2, False)
print("Wainting for sensor")
time.sleep(2)

print("Sending pulse 1")
GPIO.output(Trig1, True)
time.sleep(0.00001)
GPIO.output(Trig1, False)

while GPIO.input(Echo1)==0:
    start_timeX = time.time()

while GPIO.input(Echo1)==1:
    end_timeX = time.time()

timeX = removeSound(end_timeX - start_timeX)

print("Waiting for sensor 2")
time.sleep(2)

print("Sending pulse 2")
GPIO.output(Trig2, True)
time.sleep(0.00001)
GPIO.output(Trig2, False)

while GPIO.input(Echo2)==0:
       start_timeY = time.time()

while GPIO.input(Echo1)==1:
        end_timeY = time.time()

timeY = removeSound(end_timeY - start_timeY)
#timeY = removeSound(0.00037872352600098)

distanceX = timeX * timeX
distanceY = timeY * timeY

print(timeX * 1255, "KM/H")
print(timeY * 1255, "KM/H")

distance = math.sqrt(distanceX + distanceY)

print(distance * 1255, "KM/H")
GPIO.cleanup()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...