답변:
Tyilo의 특정 질문에 대답하려면 :
analogRead(5)
그리고 digitalRead(5)
두 개의 서로 다른 곳에서 읽습니다. 전자는 아날로그 채널로부터 읽 5
거나 A5
, 후자는 핀 (5)으로부터 판독 할 일어나는 디지털 핀한다. 예, 아날로그 핀을 읽으려면을 digitalRead
사용해야합니다 A5
.
왜?
analogRead
내부적으로 채널 번호가 필요하지만 핀 번호도 제공 할 수 있습니다. 핀 번호를 지정하면 해당 채널 번호로 변환됩니다. 내가 알 analogRead
수있는 한 내부적으로 채널 번호를 사용하는 유일한 기능이며, 채널 번호를 허용하는 유일한 기능 이며이 문서화되지 않은 핀 대 채널 변환의 유일한 기능입니다. 이를 이해하기 위해 몇 가지 예부터 시작하겠습니다.
당신이 사용하려는 경우 analogRead
첫 번째 아날로그 핀에 A0
당신이 할 수있는 analogRead(0)
채널 번호를 사용하거나 analogRead(A0)
핀 번호를 사용합니다. 핀 번호 변형을 사용하는 analogRead
경우 핀 번호 A0
를 적절한 채널 번호 로 변환하십시오 0
.
당신이 사용하려는 경우 digitalWrite
첫 번째 아날로그 핀 A0
을 수행 할 수 있습니다 만 할 digitalWrite(A0, x)
. digitalWrite
내부에서 아날로그 채널을 사용하지 않으며 채널 번호를 전달할 수 없습니다. 글쎄, 그것은 당신을 허락 하지만 잘못된 핀을 선택할 것입니다. digitalRead
에도 동일하게 적용됩니다 analogWrite
.
핀-채널 변환은 analogRead
어떻게됩니까? 해당 기능의 소스 hardware/arduino/avr/cores/arduino/wiring_analog.c
는 보드 유형에 따라 간단한 감산을 수행하는 것을 볼 수 있습니다 . A0
/ A1
/ A2
/ 등. 상수는 아날로그 채널의 핀 번호를 나타내며 아날로그 입력을 참조해야하는 모든 곳에서 사용할 수 있습니다. 따라서 다른 기능을 사용하는 경우에도 동일한 물리적 포트를 사용하고 있기 때문에 Arduino 코드에서 사용하는 것이 가장 좋습니다. 이러한 상수의 정의는 보드에 따라 다릅니다.
예를 들어 Arduino Uno의 아날로그 핀 정의 코드는 다음과 같습니다. hardware/arduino/avr/variants/standard/pins_arduino.h
static const uint8_t A0 = 14;
static const uint8_t A1 = 15;
static const uint8_t A2 = 16;
static const uint8_t A3 = 17;
static const uint8_t A4 = 18;
static const uint8_t A5 = 19;
static const uint8_t A6 = 20;
static const uint8_t A7 = 21;
비교를 위해 Arduino Mega의 아날로그 핀 정의 코드는 다음과 같습니다.
static const uint8_t A0 = 54;
static const uint8_t A1 = 55;
static const uint8_t A2 = 56;
[...]
static const uint8_t A13 = 67;
static const uint8_t A14 = 68;
static const uint8_t A15 = 69;
아날로그 핀에 대한 추가 EE 토론 : 프로젝트에 Arduino의 아날로그 핀을 디지털로 사용할 수 있습니까?
analogRead
아날로그 핀에! 반면, analogWrite
아날로그 및 PWM 핀 모두에 사용할 수 있습니다.
나는 이것에 몇 시간을 보냈다. 하드웨어 문제가 있다고 생각했습니다. 내가 analogRead()
잘못 전화 한 것으로 나타났습니다 .
잘못됨 ( DFRobot 😣의 잘못된 샘플 코드 ) :
val = analogRead(0); //connect sensor to Analog 0
옳은:
val = analogRead(A0); //connect sensor to Analog 0
업데이트 : analogRead()
GPIO 핀 번호를 사용합니다. A0
Arduino 핀 번호는 #defines입니다 A0 == 36
.
주의 : (GPIO36) "IO36 / A0"로 표시된 FireBeetle ESP32, 핀이 아두 이노를 동일 예에 A0
, 그러나 "IO39 / A1"(GPIO39)는 아두 이노 같다 A3
(안 A1
) "IO34 / A2"(GPIO34)는 아두 이노 같다 A6
(안 A2
) 등