对于我的项目,我需要读取两个 Arduino Mega 上的多个模拟引脚。其他任务如PWM工作得很好,但在读取模拟引脚时,我只能读取其中一块板的值。其他显示无:
A0板1:0.5601
A0 板 2:无
如果我只使用一块板,那么它们都可以读取正确的值,但其中一块板总是无法显示正确的值。
这是一个简单的代码来测试它:
from pyfirmata.util import Iterator
import time
import threading
from pyfirmata import ArduinoMega
def read_1():
board1 = ArduinoMega("COM9")
iterator = Iterator(board1)
iterator.start()
analog_0_board1 = board1.get_pin("a:0:i")
while True:
time.sleep(0.5)
a = analog_0_board1.read()
print("A0 Board 1: " + str(a))
def read_2():
board2 = ArduinoMega("COM4")
iterator = Iterator(board2)
iterator.start()
analog_0_board2 = board2.get_pin("a:0:i")
while True:
time.sleep(0.5)
b = analog_0_board2.read()
print("A0 Board 2: " + str(b))
x = threading.Thread(target=read_1)
x.start()
y = threading.Thread(target=read_2)
y.start()
我读过有关多处理可以解决问题的信息,但我不知道如何在 pyfirmata、true 循环和 tkinter 中正确使用它。
预先致以最诚挚的问候和感谢
我设法解决了这个问题,也许我当前的代码可以帮助其他人。
我编写了以下代码,而不是线程部分:
if __name__ == "__main__":
x = multiprocessing.Process(target=read_1)
x.start()
y = multiprocessing.Process(target=read_2)
y.start()
root.mainloop()
root.mainloop() 只是为了测试 tkinter 是否也可行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)