Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python时间戳在循环中,而循环行为奇怪_Python_Loops_Raspberry Pi - Fatal编程技术网

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(

我想在我的树莓皮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()
这段代码的问题是,当我
打印((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时间戳,得到了完全相同的结果:(