Python时间戳在循环中,而循环行为奇怪
我想在我的树莓皮4上做一个超声波风速计。我对python非常陌生,所以这是我的第一次尝试。我真的很沮丧,我的设置被卡住了。我不知道为什么我的代码不起作用Python时间戳在循环中,而循环行为奇怪,python,loops,raspberry-pi,Python,Loops,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(
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()
这段代码的问题是,当我打印((end\u timeX-start\u timeX)*1000)
(将差值转换为秒)时,通常会得到0.3秒左右的时间,这是很高但合理的(Trig1和Trig2之间的距离约为10CM。代码的运行速度总是比这个快。3秒tho。但有时,这会生成随机数(通常约为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()
在计算
timeX
之前,start\u timeX
和/或end\u timeX
可能没有初始化;timeY
也有同样的情况。这难道不会导致start\u timeX和/或end\u timeX未定义的错误吗?如果它们没有正确初始化,我如何解决这个问题,只有一个If语句?time.time()
可能正在调用操作系统时钟,而操作系统时钟可能是出了名的不准确。在循环开始之前放置start\u timeX=time.time()
。在循环开始之前尝试,会得到同样奇怪的结果。还尝试了datetime时间戳,得到了完全相同的结果:(