3색 LED 제어하기(함수 사용)

발행일 : 2018-12-27 21:52  

  • 안녕하세요~
    오랜만에 글을 남깁니다. 학기 말이 되니 처리해야 할 업무로 너무 바쁘시죠? 
    조금만 더 힘을 내시고 오늘 학습을 시작해보겠습니다. 
    지난 시간에는 3색 LED를 사용하여 다양한 색깔을 구현하였습니다. 
    그러나 프로그램 코드 상 동일한 기능을 하는 코드가 반복 사용되어 약간 단순, 무식하다는 느낌이 들었습니다. 
    이와 같이 어떤 기능을 반복해서 사용할 필요가 있을 때 '함수'를 선언하여 깔끔하게 코드를 정리할 수 있습니다. 
  • #define REDPIN 11
    #define GREENPIN 10
    #define BLUEPIN 9

    void setup() {
      // put your setup code here, to run once:
      pinMode(REDPIN, OUTPUT);
      pinMode(GREENPIN, OUTPUT);
      pinMode(BLUEPIN, OUTPUT);
    }

    void color(int red, int green, int blue)
    {
      analogWrite(REDPIN, red);
      analogWrite(GREENPIN, green);
      analogWrite(BLUEPIN, blue);
    }

    void loop() {
      // put your main code here, to run repeatedly:
      //빨간색 출력
      analogWrite(REDPIN, 255);
      analogWrite(GREENPIN, 0);
      analogWrite(BLUEPIN, 0);
      delay(1000);

      //초록색 출력
      analogWrite(REDPIN, 0);
      analogWrite(GREENPIN, 255);
      analogWrite(BLUEPIN, 0);
      delay(1000);

      //보라색 출력
      analogWrite(REDPIN, 255);
      analogWrite(GREENPIN, 0);
      analogWrite(BLUEPIN, 221);
      delay(1000);
    }
  • 위 코드는 지난 시간 학습했던 코드입니다. 
    loop 함수 내에 analogWrite가 반복적으로 사용되면서 코드가 복잡해지고 길어지는 느낌이 옵니다. 
    아래 코드는 함수를 사용하여 loop 함수를 간단하게 정리한 코드 입니다. 
  • #define REDPIN 11
    #define GREENPIN 10
    #define BLUEPIN 9

    void setup() {
      // put your setup code here, to run once:
      pinMode(REDPIN, OUTPUT);
      pinMode(GREENPIN, OUTPUT);
      pinMode(BLUEPIN, OUTPUT);
    }

    void color(int red, int green, int blue)
    {
      analogWrite(REDPIN, red);
      analogWrite(GREENPIN, green);
      analogWrite(BLUEPIN, blue);
    }

    void loop() {
      // put your main code here, to run repeatedly:
      //빨간색 출력
      color(255,0,0);
      delay(1000);

      //초록색 출력
      color(0,255,0);
      delay(1000);

      //보라색 출력
      color(255,0,221);
      delay(1000);
    }
  • color 라는 이름의 함수를 loop 함수 위에 만들었습니다. 
    color 함수를 간단하게 살펴보면 int red, int green, int blue는 함수를 호출할 때 빨강, 녹색, 파랑의 값을 함께 작성하라는 의미입니다. 
    여기서 함수 호출은 loop 함수 안에서 color 함수를 호출하게 됩니다. 
    color 함수를 호출할 때 콤마(,)로 구분하여 3가지 색상에 대한 값을 함께 작성합니다. 
     color(255,0,0); 로 호출하면 color 함수에서 red 변수에 255가 저장되고 green, blue 변수에는 0이 저장됩니다.  
    그리고 중괄호 {   } 사이의 코드가 실행됩니다.
    analogWrite함수를 사용하여 각 핀에 호출된 값들이 적용되도록 합니다. 

    이 프로그램을 실행시키면 지난 프로그램과 동일한 결과를 얻게 됩니다. 
    첫 번째, 두 번째 프로그램을 비교하면 두 번째 프로그램은 color라는 함수를 정의한 결과 loop 함수 안 코드가 간략하게 정리가 된 것을 확인할 수 있습니다. 
    이와 같이 loop 함수 안에서 어떤 기능을 수행하는 코드가 반복되어 사용될때는 함수를 따로 만들면 코드의 정리 뿐만 아니라 관리 또한 수월하다는 것을 알 수 있습니다. 

    다음 시간에는 스피커에 대해 알아보고 컨베이어 벨트에서 추가 기능을 넣어보도록 하겠습니다. 
    갑자기 날씨가 많이 추워졌습니다. 감기 조심하시고 한 해 마무리 잘 하시길 바랍니다.

댓글(0)

이모티콘