스위치로 LED 제어하기

발행일 : 2018-12-06 14:37  

  • 안녕하세요~ 
    지난 시간에는 아날로그 신호를 인가하여 LED를 제어해봤습니다. 오늘은 버튼을 사용하여 LED를 제어하려고 합니다. 
    버튼은 가정이나 산업 현장에서 많이 사용되고 있습니다. 가전 제품을 살펴보면 ON/OFF를 할 때 버튼을 사용하고 산업현장에서도 기계의 작동이나 위험한 상황이 발생했을 때 급정지를 할 때 많이 사용되고 있습니다. 
    버튼은 많은 종류가 있지만 오늘 소개시켜 드릴 버튼은 PUSH 버튼입니다. 
    손가락으로 버튼을 누르면 내부적으로 연결이 되고 손을 떼었을 때 연결이 끊어지는 버튼입니다. 
  • 회로의 연결은 위 그림과 같이 연결해줍니다. LED, 버튼에서 접지(Gnd) 처리를 해야하기 때문에 아두이노 Gnd를 브레드보드 파란색 라인에 연결하였습니다. 그리고 LED와 버튼에서 접지 처리를 해야하는 부분을 파란색 라인에 연결하였습니다. LED는 13번 핀으로 제어를 하려고 하고 버튼의 눌림 여부는 12번 핀을 통해 처리를 하려고 합니다. 버튼에는 10K 저항을 연결하였는데 이는 플로팅(순간적으로 버튼의 내부적인 상태가 연결과 떨어짐을 반복하는 것) 현상을 방지하기 위함입니다. 
  • void setup() {
      // put your setup code here, to run once:
      pinMode(13, OUTPUT);
      pinMode(12, INPUT);
    }

    void loop() {
      // put your main code here, to run repeatedly:
      bool flag = digitalRead(12);

      if(flag == HIGH)
      {
        digitalWrite(13, HIGH);
        delay(1000);
      }
      else
      {
        digitalWrite(13, LOW);   
      }
    }
  • setup 함수에서 13번 핀은 LED를 제어하기 때문에 OUTPUT으로 사용하고 12번은 스위치의 눌림 상태를 핀을 통해 읽어와야 하기 때문에 INPUT으로 사용해야 합니다. 
    loop 함수에서 12번 핀을 통해 스위치의 상태를 읽어옵니다. 만약 스위치가 눌러졌을 경우 1(HIGH), 누르지 않았을 경우 0(LOW) 상태가 됩니다. 즉 스위치를 눌렸을 때 flag라는 변수에 1이 저장되고 누르지 않으면 0이 저장됩니다. 

    bool flag는 boolean 자료형인 flag라는 이름을 가진 변수를 선언한 것입니다.  boolean 자료형은 1byte로 1 또는 0을 저장할 수 있습니다. 다시 정리하면 변수를 선언하면 하나의 저장 공간이 생기는데 이름은 flag이고 이 공간에는 1 또는 0을 저장하면 됩니다. 

    해당 프로그램에서 =, == 기호가 등장합니다. 수학에서 '같다'의 의미는 =이지만 프로그래밍 언어에서는 조금 다릅니다. '=' 기호는 해당 기호를 기준으로 오른쪽에서 처리된 데이터를 왼쪽에 대입(저장)하라는 의미를 가집니다. '==' 기호는 왼쪽과 오른쪽이 같다는 의미입니다. 

    if-else 문은 조건문으로 if의 조건이 참이면 if 아래 중괄호 { ... }가 실행되고 조건이 거짓이면 else 아래 중괄호 { ... }가 실행됩니다. 즉 스위치를 눌렀을 때 flag에는 1이 저장되기 때문에 if의 조건이 참이 되므로 digitalWrite(13, HIGH); , delay(1000); 문장이 실행됩니다. 다시 말하면 LED가 1초 동안 점등하게 됩니다. 
    스위치를 누르지 않으면 flag 변수에는 0이 저장되므로 if의 조건은 거짓이 되므로 else 아래 digitalWrite(13, LOW);  문장이 실행됩니다. LED는 소등됩니다. 
    직접 회로를 구현을 해보시고 반드시 결과를 확인하시길 바랍니다. 결과는 아래와 같이 나타나게 됩니다.
  • 지금까지 잘 따라오셨나요? LED 제어와 관련하여 하나의 작은 과제를 드릴려고 합니다. 영화 '헐크'를 보시면 주인공이 음료수 공장에서 일을 합니다. 일 도중에 날카로운 곳에 팔이 긁혀 피가 아래로 떨어지게 됩니다. 주인공은 재빨리 버튼을 누릅니다. 누름과 동시에 컨베이어 벨트는 멈추고 빨간색 LED가 깜빡이게 됩니다. 

    이와 같은 시스템 일부를 구현해보려고 합니다. LED는 빨간색과 녹색을 사용하고 버튼은 두 개를 사용합니다. 정상적인 경우에는 녹색 LED가 점등되어 있습니다. 비상용 버튼을 눌렀을 경우 녹색 LED는 소등되고 빨간색 LED가 점등됩니다. 또 다른 버튼을 누르면 빨간색 LED가 소등되고 녹색 LED가 점등됩니다. 

    해당 과제에 대해서 고민을 통해 직접 회로를 구현해보시고 결과를 확인하면 좋을 것 같습니다. 많은 시행착오를 겪는 것이 본인의 실력을 향상하는 지름길이라고 생각합니다. 다음 시간에는 해당 과제에 대한 답을 공유하도록 하겠습니다. 

    날씨가 많이 추워졌는데 감기 유의하시고 즐거운 하루 되세요^^

댓글(0)

이모티콘