【问题标题】:Problems with reading analog values with pyfirmata on two Arduino Mega's在两个 Arduino Mega 上使用 pyfirmata 读取模拟值的问题
【发布时间】: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 已正确加载。但我设法解决了这个问题。

标签: python arduino


【解决方案1】:

我设法解决了这个问题,也许我当前的代码可以帮助其他人。 我写了以下代码,而不是线程部分:

if __name__ == "__main__":
    x = multiprocessing.Process(target=read_1)
    x.start()

    y = multiprocessing.Process(target=read_2)
    y.start()
    root.mainloop()

root.mainloop() 只是为了测试 tkinter 是否也可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    相关资源
    最近更新 更多