콘텐츠로 건너뛰기

아두이노 함수 작성, 함수 선언과 호출하기

    들어가며

    이번 글에서는 아두이노에서 함수(Function)를 작성하고 사용하는 방법에 대해 소개하겠습니다. 함수는 반복되는 코드의 모음을 하나의 이름으로 정의하여 필요할 때마다 호출할 수 있게 해주는 유용한 도구인데요. 이 함수를 이용하면 코딩이 좀 더 수월해 질 수도 있습니다. 코딩 초보자도 쉽게 이해할 수 있도록 단계별로 한번 알아볼게요.

    함수란 무엇인가?

    함수는 특정 작업을 수행하는 코드의 블록입니다. 프로그래밍에서 함수는 여러 번 재사용될 수 있으며, 적절한 함수 사용은 코드를 더 간결하고 이해하기 쉽게해주죠. 아두이노에서도 함수를 사용하면 코드의 재사용성을 높이고, 유지보수를 용이하게 하며, 프로그램의 구조를 더 명확하게 파악할 수 있습니다.

    함수의 기본적인 형태는 다음과 같습니다.

    반환형 함수명(매개변수) {
      // 실행할 코드
      return 값; // 반환형이 void일 경우 생략 가능
    }

    함수를 선언하는 방법

    함수가 무엇인지, 어떤 형태인지 알았으니 실제로 함수를 선언하는 법도 알아야겠죠. 함수를 선언하는 것은 함수의 이름, 반환형, 매개변수(필요한 경우) 및 실행할 코드를 정의하는 것을 의미합니다. 아두이노에서 함수를 선언하려면 setuploop 함수 밖에서 정의해 주어야 합니다.

    예를 들어, LED를 켜고 끄는 간단한 함수를 선언한다면 아래와 같은 모양이 됩니다.

    void setup() {
     // 아두이노 기본 함수
    }
    
    void loop() {
     // 아두이노 기본 함수
    }
    
    void turnOnLED() {
      digitalWrite(13, HIGH); // 13번 핀에 HIGH 신호 (LED 켜기)
    }
    
    void turnOffLED() {
      digitalWrite(13, LOW); // 13번 핀에 LOW 신호 (LED 끄기)
    }

    여기서 void는 함수가 값을 반환하지 않음을 의미합니다. turnOnLEDturnOffLED 함수는 각각 LED를 켜고 끄는 역할을 합니다.

    함수를 호출하는 방법

    이제 함수를 선언했으니 호출해서 사용해 보겠습니다. 함수를 호출하는 것은 매우 간단합니다. 선언된 함수명을 사용하여 호출하면 되는데요. 예를 들어, turnOnLED 함수를 호출하려면 다음과 같이 작성하면 됩니다:

    void setup() {
      pinMode(13, OUTPUT); // 13번 핀을 출력으로 설정
    }
    
    void loop() {
      turnOnLED(); // LED 켜기 함수 호출
      delay(1000); // 1초 대기
      turnOffLED(); // LED 끄기 함수 호출
      delay(1000); // 1초 대기
    }
    
    // 기존에 선언한 함수들....
    
    void turnOnLED() {
      digitalWrite(13, HIGH); // 13번 핀에 HIGH 신호 (LED 켜기)
    }
    
    void turnOffLED() {
      digitalWrite(13, LOW); // 13번 핀에 LOW 신호 (LED 끄기)
    }

    이 코드에서 setup 함수는 13번 핀을 출력 모드로 설정합니다. loop 함수에서는 turnOnLEDturnOffLED 함수를 반복적으로 호출하여 LED를 켜고 끄는 동작을 수행합니다.

    매개변수가 있는 함수 만들고 호출하기

    또한, 매개변수가 있는 함수를 사용할 수도 있습니다. 매개 변수를 통해 함수가 하는 일을 조금씩 변형하여 수행시킬 수 있죠. 예를 들어, 다음과 같이 매개변수가 있는 함수를 선언하고 호출할 수 있습니다.

    매개변수는 함수가 작업을 수행할 때 필요한 데이터를 전달받기 위한 변수입니다. 함수 호출 시 인수(Argument)를 통해 매개변수에 값을 넘겨주며, 함수 내부에서 이 값을 사용하여 작업을 수행합니다. 예를 들어, `int addNumbers(int a, int b)` 함수에서 `a`와 `b`는 매개변수로, 함수가 호출될 때 전달된 두 숫자를 받아 더하는 역할을 합니다.
    void blinkLED(int pin, int delayTime) {
      digitalWrite(pin, HIGH); // 핀에 HIGH 신호 (LED 켜기)
      delay(delayTime); // 주어진 시간만큼 대기
      digitalWrite(pin, LOW); // 핀에 LOW 신호 (LED 끄기)
      delay(delayTime); // 주어진 시간만큼 대기
    }
    
    void setup() {
      pinMode(13, OUTPUT); // 13번 핀을 출력으로 설정
    }
    
    void loop() {
      blinkLED(13, 500); // 13번 핀을 500밀리초 간격으로 깜빡이기
    }
    

    여기서 blinkLED 함수는 두 개의 매개변수, pindelayTime을 가집니다. loop 함수에서는 blinkLED 함수를 호출할 때 매개변수를 전달하여 호출합니다. 이 값을 받은 함수는 13번 핀을 500밀리초 간격으로 깜빡이게 하는거죠.

    값을 리턴하는 함수

    값을 반환하는 함수는 작업을 수행한 후 결과값을 호출한 곳으로 반환합니다. 값을 반환하는 함수는 함수명 앞에 반환값의 자료형을 선언해 주어야 하는데요. 다음은 두 개의 숫자를 더한 결과를 반환하는 함수의 예제입니다.

    아두이노 자료형에 대해 잘 모르겠다면?

    int addNumbers(int a, int b) {
      int sum = a + b;
      return sum; // 두 숫자의 합을 반환
    }
    
    void setup() {
      Serial.begin(9600); // 시리얼 통신 시작
    }
    
    void loop() {
      int result = addNumbers(5, 7); // addNumbers 함수를 호출하고 결과를 result에 저장
      Serial.println(result); // 결과를 시리얼 모니터에 출력
      delay(1000); // 1초 대기
    }
    

    여기서 addNumbers 함수는 두 개의 정수 매개변수 ab를 받아서 그 합을 계산한 후 sum을 반환합니다. setup 함수에서는 시리얼 통신을 시작하고, loop 함수에서는 addNumbers 함수를 호출하여 두 숫자의 합을 계산한 후 결과를 시리얼 모니터에 출력합니다.

    마무리

    이번 글에서는 아두이노에서 함수를 정의하고 호출하는 방법에 대해 알아보았습니다. 함수를 사용하면 코드의 반복을 줄이고, 가독성을 높이며, 유지보수를 쉽게 할 수 있습니다. 처음에는 생소하게 느껴질 수 있지만, 함수를 활용하면 더 복잡한 프로젝트도 체계적으로 관리할 수 있게 될 것입니다. 아두이노 프로젝트를 진행하면서 함수 사용을 자연스럽게 익혀 보세요. 코딩의 재미와 성취감을 느낄 수 있을 것입니다.