从传感器获取值的正确方法

问题描述 投票:0回答:0

我正在编写一个与压力传感器一起工作的设备(使用 RPi 并通过 MCP3008 ADC)。 在寻找它的价值

MCP3008(0).value
时,程序可能会冻结。 我正在寻找一种方法来克服它。 我认为一个不错的选择是在线程中调用它,但我很难正确编写代码,而且我不确定这是最好的方法。

到目前为止,我测试了很多方法,但没有一个每次都能给出好的结果。 请让我知道你将如何处理这件事。

下面是我当前的代码:

class PressureMeasurementThread(threading.Thread):
    def __init__(self):
        super().__init__()
        self.stop_event = threading.Event()
        self.pressure = None

    def run(self):
        try:
            x = 0
            p_list = []
            while x < 5:
                p = 0
                error = 0
                while not 0.05 <= p <= 0.99:
                    if error != 0:
                        time.sleep(0.02)
                    p = MCP3008(0).value
                    error += 1
                x += 1
                p_list.append(p)
                time.sleep(0.01)
            self.pressure = p_list
        except Exception as e1:
            print(f"Error while measuring pressure: {e1}")

    def stop(self):
        self.stop_event.set()

    def reset(self):
        self.pressure = None
        self.stop_event.clear()


measurement_thread = PressureMeasurementThread()


def pressure_measure():
    if measurement_thread.is_alive():
        measurement_thread.stop()
    measurement_thread.reset()
    measurement_thread.start()
    return measurement_thread.pressure

然后我调用 pressure_measure() 并删除异常值。 使用该代码,我收到错误消息,指出线程只能启动一次。

multithreading raspberry-pi freeze sensors adc
© www.soinside.com 2019 - 2024. All rights reserved.