안경잡이개발자

728x90
반응형

  기본적으로 이용할 모든 기능을 스케치 파일(.ino)에 하나의 소스코드로 작성하는 것은 비효율적인 경우가 많습니다. 그래서 자주 사용하는 기능을 분리하여 사용자 라이브러리로 만들어서 관리하면 좋은 점이 많습니다. 특히 라이브러리를 직접 만들게 되면, 내가 만든 라이브러리를 다른 사람에게 쉽게 공유할 수도 있기 때문에, 여러모로 좋은 점이 많습니다.

 

  일반적으로 아두이노 라이브러리를 만들 때는 약속이 있습니다. 바로 다음의 위치(스케치북 위치)에 아두이노 라이브러리를 만든다는 것입니다.


  ▶ 아두이노 사용자 라이브러리 폴더: C:\Users\{사용자명}\Documents\Arduino\libraries

  저는 다음과 같이 MyLibrary라는 이름으로 하나의 라이브러리 폴더를 생성해 보았습니다.

 

 

  일반적으로 라이브러리 폴더는 다음과 같은 형식으로 구성됩니다. 아두이노 라이브러리 사용 경험이 많으신 분들에게는 익숙하실 수 있는데요, 라이브러리 폴더에는 소스코드 파일들을 제외하고도 examples라는 이름의 폴더도 포함하는 경우가 많습니다. examples 폴더는 어떤 라이브러리의 사용 방법 예시를 포함하는 폴더라고 할 수 있습니다. 그래서 보통 Hello World와 같은 코드를 담습니다.

 

 

※ 라이브러리 폴더의 구성 예시

  * MyLibrary.cpp

  * MyLibrary.h

  * examples

    * HelloWorld

        * HelloWorld.ino

 

  그러면 한 번 MyLibrary.h를 작성해 보겠습니다. 여기에서 사용되는 문법은 일반적인 C/C++과 같습니다. 저는 간단히 더하기 함수(add)와 빼기 함수(subtract)를 넣었습니다.

 

  참고로 #ifndef ~ #endif는 C/C++에서 자주 사용되는 전처리문입니다. 일반적으로 헤더 파일이 중복되어 초기화되지 않도록 막기 위해 사용합니다. 아래 코드에서는 MyLibrary_H이 초기화 되어 있지 않을 때에만, MyLibrary_H를 초기화 한 뒤에 두 함수를 선언할 수 있도록 해주고 있습니다.

 

#ifndef MyLibrary_H
#define MyLibrary_H

int add(int a, int b);
int subtract(int a, int b);

#endif

 

  이제 MyLibrary.cpp을 다음과 같이 작성할 수 있습니다. 헤더 파일에서 선언했던 함수를 실제로 구현한 것입니다.

 

#include "Arduino.h"
#include "MyLibrary.h"

int add(int a, int b) {
	return a + b;
}
int subtract(int a, int b) {
	return a - b;
}

 

  참고로 .cpp 파일을 작성할 때는 "Arduino.h" 헤더파일을 추가하도록 합니다. "Arduino.h" 파일은 아두이노의 기본적인 함수, 상수, 표준 타입을 포함하고 있습니다. 그래서 아두이노의 기본적인 기능을 이용하도록 우리의 라이브러리를 작성할 수 있습니다.

  일반적으로 아두이노 IDE를 이용해서 .ino 파일을 작성하여 코딩을 하면, 자동으로 "Arduino.h"가 추가됩니다. 하지만 우리가 만들 사용자 라이브러리 파일에서는 "Arduino.h" 헤더 파일이 자동으로 추가되지 않기 때문에, 소스코드상에서 직접 지정해주어야 합니다. 사실 아두이노의 기본적인 기능을 이용하지 않더라도, 관행적으로 "Arduino.h" 파일은 사용자 라이브러리에 포함될 수 있도록 합니다.

 

  이제 최종적으로 다음과 같이 examples 폴더 안에 하나의 예시 소스코드를 넣어 주도록 합시다. 저는 HelloWorld.ino라는 이름으로 하나의 소스코드를 만들어 주었습니다.

 

 

#include <MyLibrary.h>

void setup() {
  
}

void loop() {
  Serial.println(add(3, 4));
}

 

  이제 실제로 소스코드를 업로드하여 프로그램을 실행해 보면, 다음과 같이 함수를 실행한 결과가 정상적으로 출력되는 것을 확인할 수 있습니다. 만약에 함수를 찾을 수 없다거나 하는 오류가 발생한다면, 라이브러리 소스코드를 다시 한 번 살펴보세요.

 

728x90
반응형