HW 공작소

아두이노7(1): 아두이노만으로 3가지 색 LED 차례로 켜고 끄기

kusson 2017. 6. 7. 22:24
반응형
728x170

 지난 시간에는 앱인벤터와 아두이노 보드로 3가지색의 LED를 차례로 동작시키는 방법에 대해서 알아 보았다. 그때는 3가지색의 LED가 계속 루프를 돌뿐 LED를 끄지 못했다. 이번 시간에는 루프를 돌고 있는 3가지색 LED를 켜고 끄는 방법에 대해 알아본다. 먼저는 아두이노 보드만으로 3가지색 LED를 제어하는 방법에 대해 알아보고 2번째 시간에는 앱인벤터와 아두이노의 통신을 이용해 3가지 색 LED를 제어하는 방법에 대해 설명하겠다.

 

 이번에는 아두이노 우노보드만으로 3가지색 LED를 제어하는 방법에 대해 설명하겠다. 어떤 대학생이 3색 LED를 제어할 수 있냐고 물어왔었는데 나는 3색 LED가 없어 LED 3개로 3색 LED의 흉내을 낼 것이다. 두가지 모두 똑같은 환경이므로 여기서 작성하는 프로그램으로 3색 LED를 제어하는데 쓸 수 있을 것이다. 먼저 아두이노 우노보드와 브레드 보드를 이용해 아래 그림과 같은 회로를 구성한다.

 

 

 

 우노보드의 3, 4, 5번핀을 출력으로 사용하고 2, 7번핀을 입력으로 사용할 것이다. 2, 3번핀은 인터럽트에 사용되는 핀이므로 필자는 2번만 인터럽트에 사용하고 3번은 출력으로 사용하기로 한다. 핀설정은 언제든 바꿀 수 있으므로 각자 좋을 대로 배치한다.

 

먼저 아두이노 쪽의 스케치 프로그램을 다음과 같이 작성한다.

 

void setup() { 
  pinMode(2, INPUT);                //여기서는 2, 7번핀을 입력으로 사용 할 것이다.
  pinMode(7, INPUT);
  pinMode(3, OUTPUT); 
  pinMode(4, OUTPUT);  
  pinMode(5, OUTPUT); 
        digitalWrite(3, LOW);        //초기에는 모든 LED가 꺼져 있는 상태로 시작한다.
        digitalWrite(4, LOW);
        digitalWrite(5, LOW);  
}

 

void loop(){
  int seven = digitalRead(7);          //7번핀에 연결된 스위치의 값을 읽어 seven이란 정수형 변수에 대입한다.
  if (seven ==1) {                        //7번핀의 스위치가 On되면 
      while(1){                             //1값이 들어온 것이 true이면  다음 루프를 돈다.
      digitalWrite(3, HIGH);            //3번 핀으로 5V를 출력한다.     
      digitalWrite(4, LOW);             //4번 핀으로 0V를 출력한다. 
      digitalWrite(5, LOW);             //5번 핀으로 0V를 출력한다.
      delay(1000);                        //1초간 지연 시간을 둔다.

                 
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);  
      delay(1000);


      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, HIGH);    
      delay(1000); 

   

    //여기가 LED Off 루틴이다.

       int two = digitalRead(2);       //2번핀에 연결된 스위치의 값을 읽어 two란 정수형 변수에 대입한다.
       if(two == 1){                      //2번핀의 스위치가 On되면 
        digitalWrite(3, LOW);
        digitalWrite(4, LOW);
        digitalWrite(5, LOW);
           break;                          //루프를 중지시킨다.
        }
       }
     }
}

 

 

 위와 같이 스케치 프로그램을 작성하고 컴파일과 업로드를 한 후 7번 핀과 연결된 스위치를 누르면 3가지 색 LED가 차례로 켜지면서 계속 루프를 도는 것을 확인할 수 있다. LED를 끄고 싶으면 2번 핀과 연결된 스위치를 누른다. 2번핀의 스위치는 5번핀의 LED가 켜진후까지 계속 누르고 있어야 한다. 루프 진행상 5번 LED가 켜져야 다음 LED를 끄는 루틴이 전개 되기 때문이다.

 

 이 실험의 동영상을 공개한다. 위의 설명대로 잘 동작하고 있음을 알 수 있다. 2번 스위치를 누르고도 5번 LED의 불이 켜져야 LED Off 루틴이 시작되기 때문에 조금 답답한 느낌이 있다. 더 빨리 LED를 끄고 싶다면 LED Off 루틴을 앞부분으로 당긴다면 원하는 부분에서 Off 시킬 수 있다.

 

 인터럽트를 이용해 계속 루프를 돌고있는 3색 LED를 제어하는 것은 어렵다. 인터럽트가 걸리면 3색 LED가 잠시 꺼졌다가 다시 켜지기때문이다. 그래서 완전히 LED를 Off시키기 위해서는 while문과 break를 이용해 루프를 빠져나오는 것이 이번 실험에서는 더 나은 방식이라고 필자는 생각한다.

 

 다음 시간에는 위의 실험을 앱인벤터를 이용해 똑같이 재현해 보겠다. 앱인벤터의 On버튼을 누르는 것으로 3가지색 LED를 구동시키고 또 Off 버튼을 누르는 것으로 LED를 끄는 실험을 해 보겠다.

 

반응형
그리드형