我在python3中使用pyfirmata编写了一个基本代码,用于读取模拟引脚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之间变化,并且相对比这大得多。
答案 0 :(得分:1)
Arduino的模拟引脚将0和+ 5V之间的输入电压线性转换为0 然而,在pyFirmata中,0和+ 5V之间的值是线性平移的 进入浮点值0和1.0。例如,如果模拟引脚的电压为1V,则为 Arduino程序会在204左右测量一个值,但你会收到 在Python中使用pyFirmata的read()方法时,将值浮动为0.2。
答案 1 :(得分:1)
在阅读之前,您需要启动Iterator线程
board = pyfirmata.Arduino("COM5") # change com port
board.digital[3].mode = pyfirmata.INPUT
it = pyfirmata.util.Iterator(board)
it.start()
board.digital[3].read()
大多数情况下它都起作用,但有时仍然没有出现。有时time.sleep
可以提供帮助。
答案 2 :(得分:0)
你必须首先执行if条件,类似这样(并尝试运行analogfirmata):
while True:
if board.analog[0].read() == None:
pass
else:
print("board.analog[0].read()")