pinMode(pin, mode) 함수는 아두이노 보드의 pin을 입력 핀으로 사용할지 아니면 출력 핀으로 사용할지 설정하기 위하여 사용합니다. 동작 모드를 설정하는 mode 값은 INPUT, INPUT_PULLUP, OUTPUT 이렇게 3가지 모드 값을 가질 수 있습니다. INPUT_PULLUP은 INPUT과 같은 입력 모드이며, 아두이노 보드의 MCU 내부에서 풀업(Pull Up) 저항을 입력 핀에 달아 사용한다는 의미이며 보다 자세한 사항은 02.Digital | DigitalInputPullup을 참조하세요^^
MCU 내부 Internal Pull Up 회로
아두이노 보드에 전원을 넣거나 리셋 버튼을 눌러 보드가 초기화 상태일 때 기본으로 모든 핀들이 INPUT 모드로 동작하게 됩니다. 그리고 기본으로 INPUT 모드로 동작하는 핀에 digitalWrite(pin, HIGH)을 해주면 pinMode(pin, INPUT_PULLUP)과 같은 INPUT_PULLUP 모드로 동작하게 됩니다.
간단하게 pinMode() 함수를 사용하여 INPUT, INPUT_PULLUP 모드로 설정하고, 초기화 없이 INPUT 모드로, digitalWrite() 함수만 사용하여 INPUT_PULLUP 모드로 입력 핀 동작 모드를 설정하는 스케치를 만들어 동작 시켜 보았습니다.
1. 준비물과 회로 구성
준비물은 아두이노 보드만 있으면 됩니다. 그렇기 때문에 회로 구성이 필요치 않습니다.
2. pinMode 스케치 작성
setup()에서 시리얼 모니터 통신을 위한 Serial.begin() 함수로 시리얼 포트를 초기화하고, 핀 동작 모드를 설정하였습니다. loop()에서는 디지털 2 ~ 5번 핀들을 읽어 sprintf() 함수를 사용하여 buf에 먼저 문자열을 만들고 이를 Serial.println()으로 출력하게 만들었습니다.
setup() 함수:
디지털 2번 핀 : pinMode(2, INPUT)로 설정
디지털 3번 핀 : pinMode(3, INPUT_PULLUP)로 설정
디지털 4번 핀 : 초기화 없이 기본 INPUT 모드로 사용
디지털 5번 핀 : 초기화 없이 digitalWrite(5, HIGH)로 INPUT_PULLUP 모드로 사용
loop() 함수:
디지털 2~ 5번 핀들을 읽어 시리얼 모니터로 출력합니다.
스케치
=====
/*
* pinMode
*
* 이 스케치는 디지털 핀들의 입력 모드를 pinMode와 digitalWrite 함수로
* 설정하고 digitalRead 함수를 이용하여 디지털 핀 값들을 읽어 시리얼
* 모니터로 출력하는 예제입니다.
*
* 회로: 아두이노 보드만 사용하기 때문에 준비물과 연결이 필요치
* 않습니다.
*
* 이 예제 코드는 공유 저작물입니다.
*/
int pins[] = {2, 3, 4, 5};
char buf[32];
void setup() {
// 여기에 초기화 부분을 넣어 주세요. 이것은 한번만 실행됩니다.
// 시리얼 통신을 위하여 시리얼 포트를 9600bps로 초기화합니다.
Serial.begin(9600);
// 디지털 입력 핀들 초기화:
pinMode(2, INPUT); // 2 : INPUT 모드
pinMode(3, INPUT_PULLUP); // 3 : INPUT_PULLUP 모드
// 4 : INPUT 모드
digitalWrite(5, HIGH); // 5 : INPUT_PULLUP 모드
}
void loop() {
// 여기에 주 처리 부분을 넣어 주세요. 이것은 반복 실행됩니다.
// 디지털 2번 핀에서 5번 핀을 읽어 시리얼 모니터로 출력합니다:
for(int i = 0; i < sizeof(pins)/sizeof(int); i++) {
sprintf(buf, "디지털 %d번 핀 값: %d", pins[i], digitalRead(pins[i]));
Serial.println(buf);
}
Serial.println();
delay(1000);
}
3. 실행 결과
스케치를 업로드한 후에 시리얼 모니터 창을 열면, 각각의 디지털 핀들의 상태가 화면에 출력 됩니다. 디지털 2번 핀과 4번 핀이 INPUT 모드로 동작하고 있고, 3번 핀과 5번 핀이 INPUT_PULLUP 모드로 동작함을 볼 수 있습니다.