analogRead (0) 또는 analogRead (A0)


14

아두 이노 참조 상태 는 아날로그 핀에서 값을 읽기 위해 다음 코드를 사용할 것이라고 # 5 :

int val1 = analogRead(5);

그러나 디지털 핀 # 5에서 읽으려면 동일한 핀 번호를 digitalRead다음으로 전달합니다 .

int val2 = digitalRead(5);

analogRead(A5)대신에 사용해서는 안 analogRead(5)됩니까?

그렇지 않은 경우 다음 코드의 기능은 무엇입니까?

int val3 = analogRead(A5);

답변:


28

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의 아날로그 핀을 디지털로 사용할 수 있습니까?


1
나는 당신이 설명 한 것과 똑같지 만, 잘못된 정보가 들어있는 Arduino 참조에 혼란 스러웠습니다.
Tyilo

1
또한 당신은 할 수 있습니다 analogRead아날로그 핀에! 반면, analogWrite아날로그 및 PWM 핀 모두에 사용할 수 있습니다.
Tyilo

1
@Tyilo 소스 코드에서 가져온 더 정확한 정보로 응답을 업데이트했습니다.
Kevin Mark

3
analogWrite ()는 모든 핀에서 호출 할 수 있지만 PWM 핀에서만 수행됩니다. 비 PWM ditial 핀 및 모든 아날로그 핀에서는 단순히 digitalWrite ()를 호출합니다.
baldengineer

3
@powtac-일반적으로 arduino 문서는 적어도 여기에서 상당히 가증합니다. 당신이 무언가를 놓치고 있다고 생각하지 마십시오. 그것은 당신이 아닙니다. arduino 사람들입니다.
코너 울프

3

나는 이것에 몇 시간을 보냈다. 하드웨어 문제가 있다고 생각했습니다. 내가 analogRead()잘못 전화 한 것으로 나타났습니다 .

잘못됨 ( DFRobot 😣의 잘못된 샘플 코드 ) :

val = analogRead(0); //connect sensor to Analog 0

옳은:

val = analogRead(A0); //connect sensor to Analog 0

업데이트 : analogRead()GPIO 핀 번호를 사용합니다. A0Arduino 핀 번호는 #defines입니다 A0 == 36.

주의 : (GPIO36) "IO36 / A0"로 표시된 FireBeetle ESP32, 핀이 아두 이노를 동일 예에 A0, 그러나 "IO39 / A1"(GPIO39)는 아두 이노 같다 A3(안 A1) "IO34 / A2"(GPIO34)는 아두 이노 같다 A6(안 A2) 등

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.