【发布时间】:2021-01-21 09:00:27
【问题描述】:
对于我的项目,我需要读取两个 Arduino Mega 上的多个模拟引脚。 PWM 等其他任务运行良好,但在读取模拟引脚时,我只能从其中一个板上读取值。其他显示无:
A0 Board 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,而真正的循环和 tkinter。
最好的问候和感谢提前
【问题讨论】:
-
查看示例here 我可以看到与您的代码的唯一区别是需要在创建板后添加“同步等待”。也许在得到 board1 和 board2 之后尝试使用 sleep(1)?
-
第二块板上是否正确加载了 Firmata?
-
是的 Firmata 已正确加载。但我设法解决了这个问题。