我使用 pyfirmata 编写了一个基本代码,用于从 python3 中的模拟引脚 0(我有一个光传感器,输出来自模拟引脚 0(读取值,但它无论如何都会给出输出为无。我在arduino IDE中尝试了相同的代码,这给出了正确的答案。请帮忙。
代码是:
from pyfirmata import Arduino, util
import time
board = Arduino('/dev/cu.usbmodem1411')
it = util.Iterator(board)
it.start()
board.analog[0].enable_reporting()
while True :
print (board.analog[0].read())
time.sleep(1)
即使它在几秒钟后给出输出,它也给出 0.29,这实际上不是串行监视器上的传感器值。该值在 0 到 1023 之间变化,并且相对大于此值。
Arduino的模拟引脚将0至+5V之间的输入电压线性转换为0和 1023。 然而,在pyFirmata中,0到+5V之间的值是线性转换的。转换为浮点值 0 和 1.0。 例如,如果模拟引脚上的电压为 1V,则Arduino程序将测量一个大约204的值,但您将收到浮点值为 0.2,同时在 Python 中使用 pyFirmata 的 read(( 方法。
您需要在阅读之前启动迭代器线程
board = pyfirmata.Arduino("COM5") # change com port
board.digital[3].mode = pyfirmata.INPUT
it = pyfirmata.util.Iterator(board)
it.start()
board.digital[3].read()
大多数时候它有效,但有时 None 仍然会出现。有时time.sleep
可以提供帮助。
你必须先做一个 if 条件,像这样(并尝试运行 analogfirmata(:
while True:
if board.analog[0].read() == None:
pass
else:
print("board.analog[0].read()")