我是python新手,但我正在做一个项目,我需要同时连接3个或更多个超声波传感器。我阅读了所有关于线程和多处理的例子。我知道代码必须从命令提示符或PI2终端运行。但是,我写的多处理代码不能工作,我也不知道为什么。有人能帮帮我吗。在
from multiprocessing import Process
from gpiozero import DistanceSensor
ultrasonic = DistanceSensor(echo=18, trigger=23)
ultrasonic_B = DistanceSensor(echo=25, trigger=24)
ultrasonic_C = DistanceSensor(echo=12, trigger=16)
ultrasonic.max_distance = 1
ultrasonic_B.max_distance = 1
ultrasonic_C.max_distance = 1
def A(name):
while True:
ultrasonic.wait_for_in_range()
print('Distance')
if ultrasonic.wait_for_out_of_range():
print('Out of range')
def B(name):
while True:
ultrasonic_B.wait_for_in_range()
print('Distance_B')
if ultrasonic_B.wait_for_out_in_range():
print('Out of range_B')
def C(name):
while True:
ultrasonic_C.wait_for_in_range()
print('Distance_B')
if ultrasonic_C.wait_for_out_in_range():
print('Out of range_B')
if __name__ == "__main__":
p = Process(target=A)
p1 = Process(target=B)
p2 = Process(target=C)
p.start()
p1.start()
p2.start()
我考虑了你的建议,并能够使第一个循环工作,但其他两个循环给我什么都没有。这是更新的代码
^{pr2}$结果来自第一个循环 距离 超出范围 距离 超出范围
好吧,这就是我所拥有的
from multiprocessing import Process
from gpiozero import DistanceSensor
ultrasonic = DistanceSensor(echo=18, trigger=23)
ultrasonic_B = DistanceSensor(echo=25, trigger=24)
ultrasonic_C = DistanceSensor(echo=12, trigger=16)
ultrasonic.max_distance = 1
ultrasonic_B.max_distance = 1
ultrasonic_C.max_distance = 1
def A():
while ultrasonic.wait_for_in_range():
print('Distance')
if ultrasonic.wait_for_out_of_range():
print('Out of range')
def B():
while ultrasonic_B.wait_for_in_range():
print('Distance_B')
if ultrasonic_B.wait_for_out_in_range():
print('Out of range_B')
def C():
while ultrasonic_C.wait_for_in_range():
print('Distance_B')
if ultrasonic_C.wait_for_out_in_range():
print('Out of range_B')
if __name__ == "__main__":
p = Process(target=A)
p1 = Process(target=B)
p2 = Process(target=C)
p.start()
p1.start()
p2.start()
你没有说“不工作”是什么意思,所以我在这里做一些猜测。在
这里明显的失败是:
因为函数
A
、B
和C
都有一个参数name
,而您没有在Process(target=A)
中提供它。如果您只是从函数中删除参数,它就起作用了,因为您甚至没有使用它。在您也可以在调用中提供如下参数:
另一个可能是缩进错误,至少在代码粘贴中,每行都有一个额外的空格,直到def B
相关问题 更多 >
编程相关推荐