아두이노 강좌 #2 디지털핀 GPIO 으로 LED 깜빡이기
Lucy Archive
Lucy 2023
2020. 7. 1. 02:22

Arduino GPIO LEDArduino GPIO LED

아두이노 디지털 핀으로 LED 제어해보기

본 포스트에서는

아두이노 디지털 핀(GPIO)를 제어하기 위한 방법과, LED 제어 예시

들을 설명합니다.

용어정리

디지털 신호

  디지털을 정의하는 여러가지 방법이 있지만, 디지털 신호는 1과 0으로 된 신호를 예기합니다. 1과 0만 존재한다는 것은, 어떤 신호의 구분이 HIGH 또는 LOW 만 존재 또는 TRUE(참) FALSE 값만 존재하는 것을 의미합니다.

Analog Knob SwitchAnalog Knob Switch   Digital On/OFF SwitchDigital 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 회로도아두이노 내장 LED 회로도


디지털 핀 관련 함수

[각주:1]디지털 핀을 사용하기 위해서는, 아래의 3가지 함수가 사용됩니다.

  • 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(pinvalue)
  • Parameter
    • pin : 지정할 핀의 번호, Arduino Uno의 경우 일반적으로 0~13, A0 ~ A5 사용 가능
    • value
      • HIGH : 5V 출력
      • LOW : 0V 출력 
  • Returns : 없음
  • Example
    • digitalWrite(13, HIGH) // 13번 핀에 HIGH 출력

digitalRead()

해당 핀의 노드 전압을 HIGH 또는 LOW로 읽어 들입니다.
  • 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(13OUTPUT); // 13번핀 출려 설정
    digitalWrite(13HIGH); // 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(13OUTPUT); // 13번핀 출력 설정
}
 
void loop(){
    digitalWrite(13HIGH); // 13번핀 HIGH 출력
    delay(500);             // 500ms 대기
    digitalWrite(13LOW);  // 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(13OUTPUT); // 13번핀 출력 설정
}
 
void loop(){
    // 13번핀 현재 전압의 반전된 값으로 출력
    // HIGH 일경우 LOW로, LOW일 경우 HIGH 로 반전 출력
    digitalWrite(13!(digitalRead(13))); 
    delay(500);
}
cs

마무리

  디지털핀 제어는 아두이노 프로그래밍에서 가장 기본이 되는 기능입니다. 본 포스트에서는 LED 를 제어하는 용도로만 사용했지만 스위치 입력, 데이터 전송, 상태 전송, TR/FET 제어 등 다양한 용도로 사용 할 수 있습니다. 

  다음 포스트에서는 위에서 사용한 delay() 함수를 포함하여, 아두이노에서 제공되는 시간 관련 함수들을 정리할 예정입니다.

관련포스트

👉 아두이노 전체글 목록 보기

👉 아두이노 디지털 입출력 관련글 목록 보기


  1. Arduino Language Reference : https://www.arduino.cc/reference/en/ [본문으로]