Python pyfirmata中读取的arduino将输出为none

Python pyfirmata中读取的arduino将输出为none,python,python-3.x,arduino-uno,firmata,Python,Python 3.x,Arduino Uno,Firmata,我使用pyfirmata在python3中编写了一个基本代码,用于读取模拟管脚0的值(我有一个光传感器连接到它,输出来自模拟管脚0),但无论发生什么情况,它都以无输出的形式提供输出。我在ArduinoIDE中尝试了相同的代码,这给出了正确的答案。请帮忙 代码是: from pyfirmata import Arduino, util import time board = Arduino('/dev/cu.usbmodem1411') it = util.Iterator(board) it.

我使用pyfirmata在python3中编写了一个基本代码,用于读取模拟管脚0的值(我有一个光传感器连接到它,输出来自模拟管脚0),但无论发生什么情况,它都以无输出的形式提供输出。我在ArduinoIDE中尝试了相同的代码,这给出了正确的答案。请帮忙

代码是:

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之间变化,并且相对来说比这个值大。

您必须先执行if条件,类似这样的操作(并尝试运行analogfirmata):


Arduino的模拟引脚将输入电压在0和+5V之间线性转换为0 和1023。但是,在pyFirmata中,0和+5V之间的值是线性转换的 将浮点值转换为0和1.0。例如,如果模拟引脚上的电压为1V,则 Arduino程序将在204左右测量一个值,但您将收到
在Python中使用pyFirmata的read()方法时,浮点值为0.2。

在读取之前,需要启动迭代器线程

board=pyfirmata.Arduino(“COM5”)#更改com端口
board.digital[3]。mode=pyfirmata.INPUT
it=pyfirmata.util.Iterator(板)
it.start()
board.digital[3]。读取()

大多数情况下它都能工作,但有时没有一个会出现。有时时间。睡眠可以帮助你。

好消息!您的答案解释了(似乎)奇怪的值(例如0.29)。你知道为什么OP有时会将
None
视为输出值吗?为此,你必须将引脚定义为输入引脚。通过将引脚定义为输入,您将能够读取值。您还可以使用firmata GUI进行交叉检查。
while True:
 if board.analog[0].read() == None:
  pass
 else:
  print("board.analog[0].read()")