如何使用Arduino Uno模拟引脚作为带有pyfirmata的数字引脚

时间:2015-07-20 15:59:39

标签: python arduino pins firmata

我正在尝试将Arduino模拟引脚(A0-A5)用作带有pyfirmata的数字引脚(D14-D19)。我正在用D14(或A0)做一个简单的眨眼测试来测试这个:

#!/usr/bin/python

# Blink test with analog as digital pins

# Import required libraries
from pyfirmata import Arduino, util
from pyfirmata import INPUT, OUTPUT, PWM  
from time import sleep

# Associate port and board with pyFirmata
port = '/dev/cu.usbmodem1451'
board = Arduino(port)

# Pause to sync
sleep(1)

led = board.get_pin('d:14:o')
time = 1

while True:
    led.write(1)
    print ("On")
    sleep(time)
    led.write(0)
    print ("Off")
    sleep(time)

为了使模拟引脚能够充当数字引脚,我已经进入了pyfirmata的boards.py文件(如https://github.com/tino/pyFirmata/blob/master/pyfirmata/boards.py中的github repo中所示)并更改了#3中的第3行/ p>

digital': tuple(x for x in range(14)),

digital': tuple(x for x in range(20)),

当我运行我的python脚本时,我没有收到错误,但LED没有闪烁(不用担心,我是正确的,LED是正确的) 。

有谁知道如何有效地将数字引脚14实例化为带有pyfirmata的输出引脚(如行led = board.get_pin('d:14:o')中所示)

顺便说一句(不是我认为这会影响任何事情)但是我在Yosemite上运行Mac OSX。 谢谢!

1 个答案:

答案 0 :(得分:0)

我们在Arduino中使用的标准固件默认情况下使所有模拟引脚输入。因此,无需更改board.py文件中的任何内容,而是转到arduino ide中的标准firmata文件并找到此文件即可。

switch (mode) {
    case PIN_MODE_ANALOG:
      if (IS_PIN_ANALOG(pin)) {
        if (IS_PIN_DIGITAL(pin)8) {
         pinMode(PIN_TO_DIGITAL(pin), INPUT);

现在注释pinMode行,以便Firmata不会进行任何模拟引脚输入 现在转到void setup()函数并显式定义模拟引脚的性质,如下所示。

Firmata.begin(57600);
  while (!Serial) {
  }
  pinMode(14,OUTPUT);
  pinMode(15,INPUT);
  pinMode(16,INPUT);
  pinMode(17,INPUT);
  pinMode(18,INPUT);
  pinMode(19,INPUT);
  digitalWrite(14,LOW);