brunch

You can make anything
by writing

C.S.Lewis

by Cylogic Aug 03. 2020

7. LED 깜빡이의 응용 및 스위치

깜빡이는 LED의 켜지고 꺼지는 주기는 무엇으로 조절할까?

앞서 만든 회로의 LED가 너무 늦거나 빠르게 켜지고 꺼진다면 우리는 아래와 같이 delay안의 숫자를 조절하여 그 주기를 빠르게 하거나 느리게 만들 수 있다.

마치 경찰차의 경광등처럼 빠르게 반짝이는 무언가를 만들고 싶다면 delay안의 숫자를 더 줄여서 테스트해보면 될 것이다.


만일 경찰차의 경광등과 같이 만들려면 하나의 색만으로는 부족함이 있다.

두 개의 LED를 켜보면 어떨까?

아래의 회로는 두 개의 LED를 각각 4번과 5번 핀에 연결하여 번갈아 켜지고 꺼지게 만든 회로이다.

0.5초마다 번갈아 켜지고 꺼지게 만들었다.


지금까지 잘 따라오신 독자들은 별문제 없이 이해하리라 생각하지만 다시 한번 한국어로 번역해 보자.


void setup() {

    pinMode(4, OUTPUT);    ----- 디지털 4번 핀을 출력 핀으로 지정한다.

    pinMode(5, OUTPUT);    ----- 디지털 5번 핀을 출력 핀으로 지정한다.

}


void loop() {                         ----- 이 괄호로 싸인 부분을 계속 반복하라

    digitalWrite(4, HIGH);     ----- 디지털 4번 핀에 연결된 LED를 켜라

    digitalWrite(5LOW);      ----- 디지털 5번 핀에 연결된 LED를 꺼라

    delay(500);                       ----- 0.5초 동안 기다려라

    digitalWrite(4, LOW);      ----- 디지털 4번 핀에 연결된 LED를 꺼라

    digitalWrite(5, HIGH);     ----- 디지털 5번 핀에 연결된 LED를 켜라          

   delay(500);                         ----- 0.5초 동안 기다려라

}



이제 스위치를 이용하여 LED를 켜고 끄는 방법을 공부해 보자.


일반 전기의 경우 스위치가 전류가 흐르는 길을 막거나 끊어서 불을 켜고 끄는 작업을 하게 되지만, 아두이노를 응용한 회로에서는 스위치가 디지털 신호를 만들어서 이를 바탕으로 전구를 켜고 끄거나 모터를 돌리는 등의 작업을 수행하게 된다.


디지털 핀 중 하나에 스위치를 연결하고 다른 한편은 GND에 연결하여 아래와 같은 회로를 만들어 본다.


tinkercad의 부품 영역에서 "누름 버튼"이라고 하는 부품을 화면과 같이 연결하고 코드에 아래의 내용을 입력하여 보면 버튼이 눌릴 때 LED가 켜지는 것을 확인할 수 있다.


이 프로그램에는 몇 가지 못 보던 문장이 있다.


pinMode(2, INPUT_PULLUP); 


if (digitalRead(2)==LOW)

else

이다. 


첫 번째 pinMode(2, INPUT_PULLUP) 은 디지털 2번 핀을 입력용으로 지정하는 것인데, 만일 2번 핀에 연결된 부품이 스위치(또는 푸시버튼)이고 위의 도면처럼 2번 핀과 GND 사이에 스위치가 연결된 경우, 스위치가 눌리면 GND와 2번 핀이 연결되는 구조로 되어 있는 경우 GND에 연결되는 순간이 LOW이고 눌리지 않은 평상시가 HIGH 이므로 해당 핀 2번에 내부 저항이 있는 것처럼 사용됨을 알려주는 명령이다.

당장은 이해하기 어려울 것이고 일단은 스위치 연결의 다양한 방법 중 가장 회로를 간단히 만들 수 있는 방법이라고 이해하고 넘어가길 바란다. 차차 새로운 보기가 나오면 설명하도록 하겠다.


두 번째 if ~~~~~ else~~~~ 형태의 명령이다.

이러한 명령어를 조건문이라고 하고, 영어의 뜻처럼 만약에~~~의 의미를 갖는다.

문법은 아래와 같다.



if (조건) {

    // 이곳에 조건이 참일 경우 수행할 명령어를 둔다.

else {

    // 이곳에 조건이 거짓일 경우 수행할 명령어를 둔다.

}


지금 조건은 디지털 핀 2번에 연결된 전선에 + 전기가 연결되는지 아니면 GND(-)가 연결되는지를 확인하는 것이다.


 if (digitalRead(2)==LOW)는 디지털 핀 2번이 LOW일 경우 참이 된다.

따라서 버튼이 눌려서 GND와 연결이 되면 이 부분이 참이 되는 것이다.


이를 기반으로 위의 코드를 한국어로 번역해 보겠다.


void setup() {

    pinMode(4, OUTPUT);               ----- 4번 핀을 출력 핀으로 지정

    pinMode(2, INPUT_PULLUP);  ----- 2번 핀을 입력 핀으로 지정 (누를 때 LOW)

}

void loop() {

    if (digitalRead(2)==LOW){         ----- 2번 핀의 버튼이 눌려서 GND가 연결된 경우

      digitalWrite(4, HIGH);              ----- 4번 핀의 LED를 켠다.

    }

    else {                                               ----- 위의 조건이 거짓인 경우(버튼 안 눌림)

      digitalWrite(4, LOW);                ----- 4번 핀의 LED를 끈다.

   }

}



[연습문제] 이상을 이해하셨다면 위의 전구 반짝이기 프로그램 응용 2의 회로에 아래와 같이 버튼을 연결하고 버튼을 누를 때 두 전구가 번갈아 반짝이는 프로그램을 만들어 보자.  

(질문이 있다면 댓글 또는 메일  codepage@daum.net으로 남겨주시길...)



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari