아두이노 디지털 핀으로 LED 제어해보기
아두이노 디지털 핀(GPIO)를 제어하기 위한 방법과, LED 제어 예시
들을 설명합니다.용어정리
디지털 신호
디지털을 정의하는 여러가지 방법이 있지만, 디지털 신호는 1과 0으로 된 신호를 예기합니다. 1과 0만 존재한다는 것은, 어떤 신호의 구분이 HIGH 또는 LOW 만 존재 또는 TRUE(참) FALSE 값만 존재하는 것을 의미합니다.
Analog Knob Switch | Digital On/OFF Switch |
(꼭 이렇게 생긴게 아날로그 스위치는 아닙니다.) 왼쪽 그림과 같은 노브형태의 스위치는 최소 ~ 최대 사이에 중간 무수한 값을 가집니다. 이런 형태를 아날로그 형태로 말 할 수 있습니다. 오른쪽 그림은 자주 보게 되는 On/Off 스위치로, 이 스위치의 상태는 오로지 켜지거나, 꺼지는 상태만 존재하는 디지털과 같은 형태로 말 할 수 있습니다.
아두이노 우노 보드의 디지털 핀
아두이노 우노 보드에는 아래 사진처럼 핀 번호 0 ~ 13까지 총 14개의 디지털 핀이 존재합니다. 추가적으로 좌측의 A0 ~ A5 까지도 디지털 핀으로 사용이 가능합니다.
- 디지털핀 출력 사용 : HIGH(5V), LOW(0V) 의 두가지 전압 출력이 가능
- 디지털핀 입력 사용
- 3V 이상의 전압 입력 : HIGH(5V)로 판단
- 1.5V 이하의 전압 입력 : LOW(0V)로 판단
아두이노 디지털 핀
아두이노 우노 보드 내부 LED 회로도
아두이노 우노에는 내장 LED 가 3개가 있는데, 우측의 'L' 로 실크가 마킹된 LED는 13번 핀에 연결되어 있습니다. 아래의 내부 회로도와 같이 13번 포트로 HIGH(5V) 출력 될 경우 LED 가 켜지고, 13 번 포트가 LOW(0V) 로 출력 되면 LED가 꺼지게 됩니다.
아두이노 내장 LED 회로도
디지털 핀 관련 함수
디지털 핀을 사용하기 위해서는, 아래의 3가지 함수가 사용됩니다. 1
- pinMode(pinNumber, mode) 해당 핀 번호의 포트를 입력으로 사용할지 출력으로 사용할지 결정
- digitalWrite(pinNumber, HIGH or LOW) 해당 핀 번호에 HIGH 또는 LOW 를 출력
- digitalRead(pinNumber) 해당 핀에 인가 된 전압을 HIGH, LOW 로 판별하여 읽음
pinMode()
핀을 입력 또는 출력으로 설정하게 해줍니다.
- Syntax : pinMode(pin, mode)
- Parameter
- pin : 지정할 핀의 번호, Arduino Uno의 경우 일반적으로 0~13, A0 ~ A5 사용 가능
- mode
- INPUT : 입력으로 설정
- INPUT_PULLUP : 내부 풀업
- OUTPUT : 출력으로 설정
- Returns : 없음
- Example
- pinMode(13, INPUT) // 13번 핀을 입력으로 설정 합니다.
- pinMode(13, OUTPUT) // 13번 핀을 출력으로 설정 합니다.
digitalWrite()
해당 핀에 HIGH 또는 LOW 를 출력 합니다. 해당 핀은 사전에 pinMode() 함수로 출력 포트로 설정이 되어야 합니다.
- Syntax : digitalWrite(pin, value)
- Parameter
- pin : 지정할 핀의 번호, Arduino Uno의 경우 일반적으로 0~13, A0 ~ A5 사용 가능
- value
- HIGH : 5V 출력
- LOW : 0V 출력
- Returns : 없음
- Example
- digitalWrite(13, HIGH) // 13번 핀에 HIGH 출력
digitalRead()
- Syntax : digitalRead(pin)
- Parameter
- pin : 지정할 핀의 번호, Arduino Uno의 경우 일반적으로 0~13, A0 ~ A5 사용 가능
- Returns
- HIGH : 입력 전압이 3V 이상일 때
- LOW : 입력 전압이 1.5V 이하일 때
- Example
- value = digitalRead(13) // 13번 노드의 전압을 value 라는 변수에 저장 (HIGH, LOW 상태 값이 저장)
디지털 함수 써먹어 보기
ex1) setup() 함수 안에서 LED 켜기 초기화
아래와 같이 setup() 함수 안에 digitalWrite() 함수를 사용 할 경우 프로그램 초기에 LED 가 켜진 상태로 초기화 됩니다.
1 2 3 4 5 6 7 8 | // #1 setup() 에서 켜기 void setup(){ pinMode(13, OUTPUT); // 13번핀 출려 설정 digitalWrite(13, HIGH); // 13번핀 HIGH 출력 -> LED 점등 } void loop(){ } | cs |
ex2) digitalWrite() 로만 LED 깜빡이기
setup() 함수에서 13번핀을 출력으로 설정한 후 500ms 간격으로 LED를 점멸 합니다.
※ delay(ms) 함수는 ms 시간 동안 마이크로 프로세서가 멈추도록 지시하는 함수입니다.
1 2 3 4 5 6 7 8 9 10 | void setup(){ pinMode(13, OUTPUT); // 13번핀 출력 설정 } void loop(){ digitalWrite(13, HIGH); // 13번핀 HIGH 출력 delay(500); // 500ms 대기 digitalWrite(13, LOW); // 13번핀 LOW 출력 delay(500); // 500ms 대기 } | cs |
ex3) digitalRead() 와 digitalWrite() 로 LED 깜빡이기
setup() 함수에서 13번핀을 출력으로 설정한 후 digitalRead() 함수를 사용하여 500ms 간격으로 LED를 점멸 합니다. 바로 위의 예제와 동작과 동일합니다.
※ '!' 연산자는 NOT 을 의미하며 !(HIGH) 일 경우 LOW를 반환, !(LOW) 일 경우 HIGH를 반환합니다.
1 2 3 4 5 6 7 8 9 10 11 | // #3 Blinking2 void setup(){ pinMode(13, OUTPUT); // 13번핀 출력 설정 } void loop(){ // 13번핀 현재 전압의 반전된 값으로 출력 // HIGH 일경우 LOW로, LOW일 경우 HIGH 로 반전 출력 digitalWrite(13, !(digitalRead(13))); delay(500); } | cs |
마무리
디지털핀 제어는 아두이노 프로그래밍에서 가장 기본이 되는 기능입니다. 본 포스트에서는 LED 를 제어하는 용도로만 사용했지만 스위치 입력, 데이터 전송, 상태 전송, TR/FET 제어 등 다양한 용도로 사용 할 수 있습니다.
다음 포스트에서는 위에서 사용한 delay() 함수를 포함하여, 아두이노에서 제공되는 시간 관련 함수들을 정리할 예정입니다.
- Arduino Language Reference : https://www.arduino.cc/reference/en/ [본문으로]
'Embedded > Arduino' 카테고리의 다른 글
아두이노 강좌 #4 시리얼 통신 1. 개요 및 Hello World 출력 (0) | 2020.07.03 |
---|---|
아두이노 강좌 #3 시간 관련 함수 설명, delay() 없이 LED Blink 코드 작성 (1) | 2020.07.02 |
아두이노 강좌 #1 아두이노 개요 및 프로그래밍 구조 (0) | 2020.06.30 |
아두이노 팁 #1. Visual Studio Code 아두이노 환경설정 (5) | 2020.06.24 |
아두이노 환경설정 #2. Arduino IDE 다크테마, 폰트, 탭 간격 설정 +a (유용한 환경설정) (0) | 2020.06.20 |