Arduino Read in pyfirmata 给出的输出为 none



我使用 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()")

最新更新