在pyfirmata中读取的arduino将输出视为无

时间:2017-03-27 19:32:41

标签: python python-3.x arduino-uno firmata

我在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之间变化,并且相对比这大得多。

3 个答案:

答案 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()")