我正在编写一个与压力传感器一起工作的设备(使用 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() 并删除异常值。 使用该代码,我收到错误消息,指出线程只能启动一次。