# 4.2 아두이노 입출력 핀 구성

**아두이노 보드의 하드웨어적 입출력 핀 구성을 쉽게 이해하려면 두 가지만 기억**하면 됩니다. **디지털/아날로그의 두 종류로 구분되고, 각각은 다시 입력/출력으로 구분된다는 것입니다. 아두이노 보드의 사용방법을 익힌다는 것은 결국 디지털 입/출력, 아날로그 입/출력 사용법을 배운다는 것**입니다. 각 핀의 상세 위치는 아래의 그림에서 확인할 수 있는데, 눈여겨 보실 것은 총 14개의 디지털 핀들은 입/출력을 공용으로 사용할 수 있고, 아날로그 입/출력은 별도로 각각 입력용 6개와 출력용 6개로 구분된다는 것입니다.

한 가지 **의아하게 생각되실 것은 그림 상 디지털 입출력 핀과 아날로그 출력핀이 함께 핀을 공유하는 것**이 보이실 것입니다.   맞습니다. 그 **이유는** [**3.3장**](../../coding_start/digital_analog#undefined-1)**에서 이미 언급했듯이 아날로그는 실제 아날로그 그 자체라기 보다 디지털화된 아날로그 방식으로 표현되는 것이라 아두이노 상에서 아날로그 출력도 결국은 디지털이기 때문에 0\~13까지 총 14개 핀 중 일부(6개, 핀에 아날로그를 의미하는 \~무늬로 표기)를 아날로그 출력용으로 공용**할 수 있습니다.&#x20;

이전 [3.6장](../coding_start/code_transform)의 C++ 코드에서 pinMode라는 함수를 기억나시나요? 그 함수가 필요했던 이유가 이제 이해되실덴테 이렇게 공용되는 핀들이 존재하기 때문에 해당 핀을 사용하기 전 사전에 내가 이 핀은 어떤 용도로 사용하겠다고 미리 알려주어야만 하는 필요가 생겼던 것입니다. 그런데 블록코딩에서는 어떨까요? 이런 핀의 용도를 설정하는 블록은 따로 없습니다. 사용자들이 코딩을 어렵게 느끼지 않도록 내부적으로 숨겨놓은 것입니다.

![](https://1238842542-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MaoCrU7aM6SgouXppME%2F-Mb4S0osSpUh8VKZAEmp%2F-Mb4TwJSVfHUHGTDWzfW%2Fimage.png?alt=media\&token=49d3af7e-b77b-4c18-a3cd-20104db703b6)

지금까지 우리는 [3.3장](../coding_start/digital_analog)에서 디지털 출력/아날로그 출력 2가지를 익혔습니다. 자 그럼, 남은 2가지 디지털 입력과 아날로그 입력에 대해 알아볼까요?

### 디지털 입력 (Digital INPUT)

디지털 출력이 디지털 값을 보드 외부로 출력했다면, 디지털 입력은 말 그대로 디지털 값을 외부로부터 보드 안쪽으로 입력을 받아드린다(다른 말로 값을 read한)는 것입니다. 외부로부터 입력되는 값은 어떤 값일까요? 예상하실 수 있을텐데 디지털 값인 0(LOW, 0v) 또는 1(HIGH, 5v 또는 3.3v)이 입력됩니다.

### 아날로그 입력 (Analog INPUT)

아날로그 입력도 쉽게 이해되실텐데 외부로부터 보드 안쪽으로 아날로그 값 입력을 받아드린다(다른 말로 값을 read한다)는 것입니다. 외부로부터 입력되는 값은 어떤 값의 범위는 어떻게 될까요? 먼저, [3.3장](../../coding_start/digital_analog#undefined-1)에서 **아날로그 출력값의 범위는 0\~5v의 변화를 0\~255의 256개 값(1bytes=8bits=**$$2^8$$**으로 표현할 수 있는 최대값)으로 표현했던 것이 기억나세요? 그럼, 아날로그 입력값도 동일할까요? 만약 그랬다면, 저희가 외우기 쉬웠을텐데 그렇지 않고 아래 그럼처 0\~5v의 변화가 0\~1023까지의 1024개 값로 표현**됩니다. 이러한 아날로그를 디지털화하는 전자회로를 ADC(Analog to Digital Converter)라고 하고, 이두이노에 내장된 이 회로의 표현력이 최대 10비트(bits)라 2진수의 10비트(bits)인 $$2^{10}$$=1024 값까지 표현되는 것입니다.

![](https://1238842542-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MaoCrU7aM6SgouXppME%2F-Mb4PJaatCewMGozSYa_%2F-Mb4R79TG83h_Wmhjyx5%2Fimage.png?alt=media\&token=b224488a-7f38-4f85-9586-4097302f9499)

마지막으로 **C++코드에서도 위에서 우리가 배운 디지털 입/출력, 아날로그 입/출력을 위한 4종류의 함수가 있다**는 것으로 이 장을 마무리 하고자 합니다. **함수이름은 의미를 직관적으로 이해하실 수 있는데  digitalWrite / digitalRead, analogWrite / analogRead** 입니다.
