2

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

4

3 回答 3

2

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

于 2017-12-27T17:48:57.297 回答
1

您需要在阅读之前启动一个迭代器线程

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可以提供帮助。

于 2020-06-27T21:42:38.337 回答
-1

你必须先做一个 if 条件,像这样(并尝试运行analogfirmata):

while True:
 if board.analog[0].read() == None:
  pass
 else:
  print("board.analog[0].read()")
于 2017-04-19T18:07:36.123 回答