如何使用python多处理过程同时连接两个超声波传感器?

2024-10-17 06:31:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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()

Tags: ofinechoforifdefrangeprocess
2条回答

你没有说“不工作”是什么意思,所以我在这里做一些猜测。在

这里明显的失败是:

TypeError: A() takes exactly 1 argument (0 given)

因为函数ABC都有一个参数name,而您没有在Process(target=A)中提供它。如果您只是从函数中删除参数,它就起作用了,因为您甚至没有使用它。在

您也可以在调用中提供如下参数:

p = Process(target=A, args=('ultra_a',))

另一个可能是缩进错误,至少在代码粘贴中,每行都有一个额外的空格,直到def B

import multiprocess
from gpiozero import DistanceSensor


def A():

    ultrasonic = DistanceSensor(echo=18, trigger=23)
    ultrasonic.max_distance = 1

    while ultrasonic.wait_for_in_range():
        print('Sensor_1' ultrasonic.distance, 'm')

        if ultrasonic.wait_for_out_of_range():
            print('0')

def B():

    ultrasonic_B = DistanceSensor(echo=25, trigger=24)
    ultrasonic_B.max_distance = 1

    while ultrasonic_B.wait_for_in_range():
        print('Sensor_2', ultrasonic_B.distance, 'm')

        if ultrasonic_B.wait_for_out_in_range():
            print('0')

def C():
    ultrasonic_C = DistanceSensor(echo=12, trigger=16)
    ultrasonic_C.max_distance = 1

    while ultrasonic_C.wait_for_in_range():
        print('Sensor_3',ultrasonic_C.distance, 'm')

        if ultrasonic_C.wait_for_out_in_range():
            print('0')

if __name__ == "__main__":

    p = multiprocess.Process(target=A)
    p1 = multiprocess.Process(target=B)
    p2 = multiprocess.Process(target=C)

    p.start()
    p1.start()
    p2.start()

相关问题 更多 >