John's 개발자의 관심노트

아두이노 IDE 파헤치기 [3 / 3], 아두이노 라이브러리 사용법 본문

[개발]/Arduino

아두이노 IDE 파헤치기 [3 / 3], 아두이노 라이브러리 사용법

John-Co 2022. 10. 4. 17:58

라이브러리와 관련해서 하나 더 추가할 내용이 있어서 "+ TIP" 이라는 내용으로 글을 추가했다.

 

여기저기 호기심 가득하고, 궁금증이 가득한 나와 같은 사람이라면,

라이브러리를 누군가가 만들어둔 것이라면, 나도 만들 수 있는거 아닌가?  어떻게 만드는거지?

하고 의문이 생기는 분들이 있을 것이라고 생각한다. 나 또한 그렇기 때문에 ...

라이브러리 만드는 방법에 대해 알아보았고, 그 내용을 공유해보려고 한다.

내가 자주 사용하는 수식의 함수들을 내가 직접 만들어서 나만의 라이브러리를 만들 수 있는 방법에 대해 알아보자.

라이브러리 만드는 방법!

먼저 라이브러리화 할 코드를 찾는다.

이 전에 작성해둔 글에서, "cds" 코드를 가져올건데, 아래 링크를 참고해서 보면 해당 코드가 있으니 참고!

 

[기본] 아두이노 IDE 파헤치기 [2 / 3]

"[기본]" 단계의 두 번째 글에서는 첫 번째 글에서 배운 프로젝트 생성하는 방법을 베이스로, 간단한 회로 구성부터, 실제 동작시키는 코드를 작성해보며 Arduino IDE 툴과 더 친해져 보고자 한다.

johnconomics.tistory.com

이 직전에 글에서 라이브러리는 "라이브러리 파일"과 "헤더 파일"이 쌍으로 존재한다고 이야기했다.

그러면 우리는 자주 사용하는 코드를 작성하고, 이 코드가 무슨 기능을 담고있는지 헤더파일에 기술하면 된다.

( * 라이브러리 작성시에는 "C++" 언어를 다룰 줄 알아야하니, 간단한 문법정도는 익히고 읽기!)

 

일단 아두이노 code를 확인해보면,

const int ANALOGPIN = A1;
const float f_VRef = 5.0;
const float f_Sample = 1024;
float f_VoltPerStep = 0.0;

void cds_setup()
{
  f_VoltPerStep = (5.0 / 1024);
}

float cds_read()
{
  int val = 0;
  float result = 0;
    
  val = analogRead(ANALOGPIN);
  result = val * f_VoltPerStep;
    
  return result;
}

이렇고, cds 센서의 값을 읽어 전압 (Volt) 값으로 변환해주는 함수를 라이브러리로 만들어 볼 것이다.

 

Library 파일 생성하기 (.cpp, .h)

코드를 작성하기위한 파일을 먼저 생성해볼건데, CDS 라는 파일을 라이브러리화 시킬 예정이니깐

"Cds" 라는 폴더를 생성하고,

폴더 안에 파일 2개를 생성하고, 파일명은 이렇게 작성한다.

.cpp : Cds.cpp

.h : Cds.h

라이브러리 폴더 및 파일 생성

모두 완료가 되면 위와 같이 "Cds" 폴더안에 "Cds.cpp", "Cds.h" 파일이 생성된 모습을 볼 수 있다.

 

코드 작성하기

우리가 필요한 내용은, Pin 을 설정하고,

그 Pin 으로부터 ADC 값을 읽어 Voltage 값으로 변환해서 넘겨주는 함수를 작성하면 된다.

 

Class 명은 "Cds" 로 작성할 것이고,

아두이노에서 const 변수로 선언 된 내용은, define 으로 정의해서 사용한다.

 

먼저 헤더파일(.h) 작성 먼저 시작해보자.

#ifndef CDS_H
#define CDS_H

#include "Arduino.h"

// ADC Sample Rate 1024 bits
#define SAMPLE_COUNT    1024
// ADC Reference Voltage 5.0 V
#define REF_VOLTAGE    5.0
// Voltage of 1 adc value
#define VOLT_PER_STEP    (SAMPLE_COUNT / REF_VOLTAGE)

class Cds
{
  public:
    Cds(int pin);
    float readVolt();
		
  private:
    int _pin;
};

#endif

ADC Sample Count (SAMPLE_COUNT) 와, Reference Voltage(REF_VOLTAGE) 값을 define 하고,

ADC 값 1당 의미하는 Voltage 값(VOLT_PER_STEP)을 사전에 define 해두었다.

 

Class 정의에서는,

외부에서 설정 된 핀을 마음대로 바꾸지 못하도록 Private 변수로 선언했고,

이 Private 변수 설정을 위해서 생성자 "cds(int pin)" 를 사용했다.

 

그리고 설정된 Pin으로 부터 Volt 값을 읽어들일 수 있는 "float readVolt()" 함수를 그 아래 선언했다.

 

최 상단에 있는 "#ifndef CDS_H" 구문은, 여기저기서 헤더파일을 include 할 때

반복될 수 있는 중복 선언을 방지하는 코드라고 생각하면 된다.

 

이제 실제 동작 코드(.cpp) 를 작성해보자.

#include "Arduino.h"
#include "cds.h"

Cds::Cds(int pin)
{
  _pin = pin;
}

float Cds::readVolt()
{
  int val = 0;
  float result = 0.0;
  
  val = analogRead(_pin);
  result = val * VOLT_PER_STEP;
  
  return result;
}

생성자에서 cds 센서 전용 핀 값을 받아 내부 private 변수(_pin) 에 저장 하는 역할을 하고,

float readVolt() 함수에서는 ADC 값을 읽어, 이를 Voltage 값으로 환산해서 반환하는 함수를 작성했다.

 

이렇게 코드 작성은 마무리 했고, 이전에 우리가 알아본 라이브러리 적용방법을 참고해서 똑같이! 적용하면 끝난다!

이전에 다른 사람이 만든 라이브러리를 다운로드 받으면 .zip 파일로 되있었으니깐,

우리도 우리가 만든 "Cds" 폴더를 압축해서, .zip 파일을 만든다.

라이브러리 파일 생성

라이브러리 적용하기

이렇게 해서 "Cds" 라는 라이브러리를 우리가 직접 만들고, 다른사람이 배포하는 형식처럼 압축파일 형태까지 만들었다.

이제 해당 라이브러리를 직접 적용해보자.

적용하는 방법은 이전 글에서 설명했으니 자세한 내용은 아래 링크 참고!

 

[기본] 아두이노 IDE 파헤치기 [3 / 3]

아두이노 개발에 있어서 기본적으로 익혀야할 기능들에 대해 "[기본]" 이라는 카테고리로 글을 작성하고있다. 그 기본의 마지막 글로 라이브러리에 대해서 이야기를 해보고자 한다. 라이브러리(

johnconomics.tistory.com

 

라이브러리추가

".ZIP 라이브러리 추가..." 를 클릭해서, 우리가 만든 라이브러리를 추가시켜준다.

정상적으로 완료가 되었다면, "스케치 → 라이브러리 포함하기 → Cds" 항목이 보일 것이고,

이를 클릭해서 라이브러리를 포함시켜주자.

라이브러리 설치완료모습

라이브러리 포함하기를 통해 "Cds" 를 추가하면, 아래와 같이 "#include <Cds.h>" 라인이 생성되고,

우리가 만든 라이브러리에 코드가 이상이 없는지 확인하기위해 바로 Complie 을 진행해본다.

 

라이브러리 컴파일 완료화면

컴파일이 성공적으로 완료 되었고, 우리는 이제 그대로 가져다 쓰기만 하면 된다.

 

 이제 실제 아두이노 코드에 직접 적용해보면, 아래와 같다.

#include <Cds.h>

Cds cds(A1);

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  float volt = cds.readVolt();
  Serial.print("sensor value : ");
  Serial.print(volt);
  Serial.println(" volt");
}

이렇게해서 직접 라이브러리를 만들어서 적용해보는 방법까지 모두 알아보았다.

 

물론, 위 방법은 약식으로 아주 간단하게 생성해서 적용하는 방법을 살펴본 것이라 부족한 부분이 분명히 있다.

 

다른사람이 만든 Library 폴더를 참고해서, readme 파일과, Examples 코드 등도 함께 포함시켜주면 더 완성도 있는

나만의 라이브러리를 만들 수 있으니 따라해보는 것도 좋을 것 같다.

 

끝!

 

* 글에 잘못된 부분이나, 수정할 부분이 있다면, 언제든지 댓글 남겨주세요!

반응형