아두이노 핀 번호 - adu-ino pin beonho

아두이노 핀 번호 - adu-ino pin beonho

[디지털 신호 입력핀]
아두이노 우노의 0~13 핀을 통해 디지털 신호를 입력할 수 있다.

[디지털 입력 함수]
pinMode(pin, mode)
pin : 디지털 신호 입력 설정을 위한 핀 번호
mode : INPUT, INPUT_PULLUP , 해당 핀의 입력 모드 설정

digitalRead(pin)
pin : 디지털 신호 입력 받을 핀 설정
return 값 : HIGH/LOW

[푸시버튼, 택스위치]

아두이노 핀 번호 - adu-ino pin beonho

버튼을 누르면 두 접점이 연결된다. 

[풀 다운 저항을 이용한 디지털 입력]
* 디지털 신호 입력핀 : 2
* 디지털 신호 출력핀 : 12

아두이노 핀 번호 - adu-ino pin beonho

스위치와 저항이 직렬 연결되어 있다.
저항이 GND와 연결되어 있다. 이런식으로 연결된 저항을 풀다운 저항이라고 한다. 스위치가 눌러지지 않은 Normal한 경우 0이 입력된다. 
스위치가 눌러지지 않은 상태는 스위치의 저항은 무한대이다. 따라서 2번 핀에 입력되는 전압은  전압 분배에 의해 5V이다. 
스위치가 눌러지면, 스위치의 저항은 0이다. 따라서 2번 핀에 입력되는 전압은 전압분배에 의해 0V이다.

아두이노 핀 번호 - adu-ino pin beonho

스위치를 누르고 있는 동안 LED가 점등되고,
스위치를 놓으면 1초간만 LED 점등이 유지된 후 꺼지는 프로그램을 작성하시오.

1: // 풀다운 저항을 이용한 디지털 신호의 입력 2: #define LED 12 3: #define SW 2 4: 5: void setup() { 6: pinMode(LED, OUTPUT); 7: pinMode(SW, INPUT); 8: } 9: 10: void loop() { 11: int sw_in; 12: sw_in = digitalRead(SW); //2번핀으로 디지털 신호 읽음 13: if(sw_in == HIGH) // 스위치 누르면 HIGH 14: { 15: digitalWrite(LED, HIGH); 16: delay(1000); 17: } 18: else 19: digitalWrite(LED, LOW); 20: }

아두이노 핀 번호 - adu-ino pin beonho

저항이 Vcc와 연결되어 있다. 이런식으로 연결된 저항을 풀업 저항이라고 한다. 스위치가 눌러지지 않은 Normal한 경우 1이 입력된다. 
스위치가 눌러지지 않은 상태는 스위치의 저항은 무한대이다. 따라서 2번 핀에 입력되는 전압은  전압 분배에 의해 0V이다. 
스위치가 눌러지면, 스위치의 저항은 0이다. 따라서 2번 핀에 입력되는 전압은 전압분배에 의해 5V이다.

아두이노 핀 번호 - adu-ino pin beonho

1: // 풀업 저항을 이용한 디지털 신호의 입력 2: #define LED 12 3: #define SW 2 4: 5: void setup() { 6: pinMode(LED, OUTPUT); 7: pinMode(SW, INPUT); 8: } 9: 10: void loop() { 11: int sw_in; 12: sw_in = digitalRead(SW); //2번핀으로 디지털 신호 읽음 13: if(sw_in == LOW) //스위치를 누르면 LOW 14: { 15: digitalWrite(LED, HIGH); 16: delay(1000); 17: } 18: else 19: digitalWrite(LED, LOW); 20: }

[내부 풀 업 저항을 이용한 디지털 입력]
pinMode(pin, INPUT_PULLUP)
아두이노 내부의 풀업 저항을 이용하여 회로를 구성한다. 동작은 풀업저항을 이용한 디지털 회로와 동일하다. 

아두이노 핀 번호 - adu-ino pin beonho

아두이노 핀 번호 - adu-ino pin beonho

1: // 내부 풀업 저항을 이용한 디지털 신호의 입력 2: #define LED 12 3: #define SW 2 4: 5: void setup() { 6: pinMode(LED, OUTPUT); 7: pinMode(SW, INPUT_PULLUP); // 내부 풀업저항 사용으로 설정 8: } 9: 10: void loop() { 11: int sw_in; 12: sw_in = digitalRead(SW); //2번핀으로 디지털 신호 읽음 13: if(sw_in == LOW) //스위치를 누르면 LOW 14: { 15: digitalWrite(LED, HIGH); 16: delay(1000); 17: } 18: else 19: digitalWrite(LED, LOW); 20: }

7행의 설정 - pinMode(SW, INPUT_PULLUP) : 내부 풀업저항으로 설정

[예제] 퀴즈 부저 만들기 - 두개의 스위치 입력
두 스위치 중 먼저 눌러진 스위치에 해당하는 LED 2초간 점등
다른 LED가 점등되어 있는 동안, 다른 스위치 입력 무시

아두이노 핀 번호 - adu-ino pin beonho

아두이노 핀 번호 - adu-ino pin beonho

1: // 두개의 스위치 중 먼저 눌러진 쪽의 LED가 2초가 점등 2: #define SW1 2 3: #define SW2 3 4: #define LED1 11 5: #define LED2 12 6: 7: void setup() { 8: pinMode(SW1, INPUT_PULLUP); 9: pinMode(SW2, INPUT_PULLUP); 10: pinMode(LED1, OUTPUT); 11: pinMode(LED2, OUTPUT); 12: } 13: 14: void loop() { 15: int sw1_in = LOW; 16: int sw2_in = LOW; 17: 18: digitalWrite(LED1, LOW); 19: digitalWrite(LED2, LOW); 20: 21: sw1_in = digitalRead(SW1); 22: sw2_in = digitalRead(SW2); 23: 24: if(sw1_in == LOW && sw2_in == HIGH) 25: { 26: digitalWrite(LED1, HIGH); 27: digitalWrite(LED2, LOW); 28: delay(2000); 29: } 30: else if(sw1_in == HIGH && sw2_in == LOW) 31: { 32: digitalWrite(LED1, LOW); 33: digitalWrite(LED2, HIGH); 34: delay(2000); 35: } 36: else 37: { 38: digitalWrite(LED1, LOW); 39: digitalWrite(LED2, LOW); 40: } 41: }