在两个 Arduino Mega 上使用 pyfirmata 读取模拟值时出现问题

2024-01-05

对于我的项目,我需要读取两个 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(使用前将#替换为@)

在两个 Arduino Mega 上使用 pyfirmata 读取模拟值时出现问题 的相关文章

随机推荐