使用pinMode时如何区分模拟和数字引脚?

时间:2017-10-10 20:39:10

标签: arduino signals

Arduino One上有两个标记为0到5的引脚。其中一个引脚是模拟的,另一个是数字引脚。如果我想从传感器读取模拟信号并且我将信号连接到例如模拟引脚0,但我也让我们说数字引脚0设置为打开LED的输出,我该如何分离这两个?

pinMode(A0, INPUT);
pinMode(0, OUTPUT);

因为我认为A0 = 0。

1 个答案:

答案 0 :(得分:1)

  

在arduino上有两个标记为0到5的引脚。

错了,有引脚0-5,有引脚A0-A5: Arduino Uno

  

因为我认为A0 = 0

错误,来自https://github.com/arduino/Arduino/blob/1.8.5/hardware/arduino/avr/variants/standard/pins_arduino.h#L56-L72

#define PIN_A0   (14)
#define PIN_A1   (15)
#define PIN_A2   (16)
#define PIN_A3   (17)
#define PIN_A4   (18)
#define PIN_A5   (19)
#define PIN_A6   (20)
#define PIN_A7   (21)

static const uint8_t A0 = PIN_A0;
static const uint8_t A1 = PIN_A1;
static const uint8_t A2 = PIN_A2;
static const uint8_t A3 = PIN_A3;
static const uint8_t A4 = PIN_A4;
static const uint8_t A5 = PIN_A5;
static const uint8_t A6 = PIN_A6;
static const uint8_t A7 = PIN_A7;

因此,正如您所看到的,Uno上的A0-A5(使用arduino:avr:标准变体)的值为14-19。

您也可以在不知道Arduino硬件定义系统如何​​工作的情况下轻松确定这一点:

void setup() {
  Serial.begin(9600);
  while (!Serial) {}

  byte analogPins[] = {A0, A1, A2, A3, A4, A5};
  for (byte element = 0; element < sizeof(analogPins) / sizeof(analogPins[0]); element++) {
    Serial.print("The value of A");
    Serial.print(element);
    Serial.print(" is: ");
    Serial.println(analogPins[element]);
  }
}

void loop() {}

但实际上这一切都无关紧要。只需调用A0 A0,A0的值无关紧要。