아두이노 우노의 A0부터 A5 까지 6개의 핀을 이용하여 아날로그 입력을 받을 수 있는데 디지털 핀이 0과 1 두 값 만을 입출력으로 가지는 것과는 달리 아날로그 핀은 그 전압을 0~1023 의 정수값으로 변환하여 읽어들인다.


[그림 1] A0~A5 핀과 AREF핀

A0~A5핀으로 아날로그 입력을 받는다.

AREF핀은 아날로그 기준 전압을 설정한다.


아날로그 핀은 0~5V 사이의 전압 값을 0~1023 사이의 정수값으로 변환시킨다. 이것을 A/D변환(analog-to-digital conversion)이라고 한다. 따라서 분해능은 0.0049V (4.9mV = 5V/1024)이며 이 때 사용되는 함수가 analogRead()함수이다.


ananlogRead(pin)


입력 인수로 0(또는 A0), 1(또는 A1), … 5(또는 A5)를 주고 리턴값은 int형으로서 앞에서 언급한 대로 0~1023 값이다. 변환 시간은 100micro-sec 으로서 이론상으로는 1초에 10000번 정도 변환이 가능하다. 아날로그 핀은 디지털 핀과 달리 기본적으로 입력으로 설정되어 있으므로 별도로 입력을 설정하는 과정 없이 바로 위의 함수를 이용할 수 있다.


 한 가지 알아두어야 할 점은 아두이노 우노의 경우 다음 세 가지 방법은 같은 동작을 수행한다.


[표 1] 아두이노 우노의 analogRead()함수 동작에 사용되는 상수

방법1

방법2

방법3

비고

analogRead(0)

analogRead(A0)

analogRead(14)

A0 == 14

analogRead(1)

analogRead(A1)

analogRead(15)

A1 == 15

analogRead(2)

analogRead(A2)

analogRead(16)

A2 == 16

analogRead(3)

analogRead(A3)

analogRead(17)

A3 == 17

analogRead(4)

analogRead(A4)

analogRead(18)

A4 == 18

analogRead(5)

analogRead(A5)

analogRead(19)

A5 == 19


즉, analogRead(0)과 analogRead(A0) 그리고 analogRead(14) 는 내부적으로 같은 동작을 수행한다. 왜냐면 상수 A0, A1, …, A5 는 내부적으로 다음과 같이 14,15,...,19로 정의되어 있기 때문이다.


              #define A0  14

              #define A1  15

              ….

              #define A5  19


(필자는 처음에 상수 A0 는 내부적으로 0으로 정의되었을 것으로 짐작을 했었는데 그게 아니었다.) 보통은 [표 1]의 <방법1> 혹은 <방법2> 를 사용하고 <방법3>은 사용하지 않지만 내부적으로 A0상수가 14값을 갖는 다는 것은 알아두는 것이 좋은데 그 이유는 아날로그 핀을 디지털 핀으로 사용할 때 이 상수가 사용되기 때문이다. 디지털 핀이 13번 까지 있으므로 그 다음 숫자부터 아날로그 핀에 할당되었다는 것을 알 수 있다.


아두이노 강좌 전체 목록 (TOP) >>>

C++ 언어 전체 강좌 목록 >>>

c{ard},n{ad019}

Posted by 살레시오

댓글을 달아 주세요

  1. *** 2021.08.15 11:46  댓글주소  수정/삭제  댓글쓰기

    저도 A0이 0으로 되어있는 줄 알았는데 14였네요