KiCad를 맨 처음 실행시켜서 schematic을 열고 부품을 선택하려고 ([A]키를 눌러) 부품창을 열면 power 밖에 없어서 당황할 수 있다. 참고로 KiCad는 일반 부품과 전원 요소를 선택하는 창이 따로 분리되어 있다.


  • [A]키 : 일반 부품창 (전원 요소 포함)

  • [P]키 : 전원 요소 선택창


만약 부품창에 라이브러리가 텅 비어 있다면 그렇다면 부품 라이브러리를 추가해야 된다. 다음 그림과 같이 Preference>Component Libraries 를 선택한다.



여기서 [추가] 버튼을 누른다.



그러면 c:\Program Files\KiCad\share\kicad\library 폴더가 열리고 그 안의 .lib 파일들이 보이는데 이것을 모두 선택한 후 [열기] 버튼을 누른다.


그러면 위와 같이 부품 라이브러리들이 추가된다. 이제 [확인]버튼을 누르고 나간 다음 편집모든에서 [A]키를 눌러 부품창을 띄워보면 라이브러리들이 들어온 것을 확인할 수 있다.



'PCB설계' 카테고리의 다른 글

barebone arduino 예제  (0) 2018.04.10
layout 예제 01  (0) 2018.04.03
DipTrace Schematic 동영상 강의 1  (0) 2018.03.29
예제 #8, #9, #10  (0) 2018.03.20
무료 오픈소스 PCB 설계 프로그램의 종류  (1) 2015.06.19
Posted by 살레시오
,

 이전 포스트에서 작성한 라이브러리를 스케치에서 사용하는 방법을 알아보자.

#include <Morse.h> //라이브러리 인클루드
Morse morse(13);
void setup() {
}
void loop() {
   morse.dot(); morse.dot(); morse.dot();
   morse.dash(); morse.dash(); morse.dash();
   morse.dot(); morse.dot(); morse.dot();
   delay(3000);
}

이 파일은 원래의 스케치파일과 비교하여 몇 가지 다른 점이 있다. 먼저 라이브러리를 인클루드하기 위해서 #include <Morse.h>를 서두에 추가한 것이다. 이것으로 라이브러리에서 정의된 클래스를 이용할 수 있다. 두 번째로 클래스의 인스턴스를 다음과 같이 생성한다는 것이다.

Morse morse(13);

이것이 실행되면 Morse 클래스의 생성자가 실행되며 13이라는 핀번호를 넘겨주게 된다. 이 생성자 안에서 pinMode()함수를 실행했으므로 setup() 함수에서는 그럴 필요가 없다. 그리고 dot(), dash() 함수를 호출하기 위해서는 이 클래스 인스턴스를 매개로 해야 한다. 예를 들어서 13번 핀과 12번 핀에 LED가 연결되어 있다면 다음과 같이 하면 된다.

Morse morse(13);
Morse morse2(12);


멤버 함수 하이라이트 기능

 만약 아두이노 IDE를 사용한다면 추가로 keyword.txt 파일을 만들어서 하이라이트될 함수명을 지정해 줄 수 있다.


Morse KEYWORD1
dash KEYWORD2
dot KEYWORD2

 

각각의 줄은 함수명과 탭구분자 그리고 KEYWORD1/KEYWORD2 라는 지정어가 와야 한다. KEYWORD1은 클래스명을 지정하며 KEYWORD2 는 멤버함수임을 지정한다.

예제 파일 제공

 만약 다른 사용자들의 편의를 제공하기 위해서 예제를 제공하고 싶다면 Morse 폴더 밑에 examples 폴더를 생성한 후 그 안에 각각의 예제를 위한 폴더들을 만들고 그 안에 예제파일을 두면 된다. 이 예제들은 아두이노 IDE의 파일>예제 메뉴에 자동으로 나타난다.

#ifndef ~ #endif 전처리문의 이해

 동일한 헤더 파일(.h 파일)을 중복해서 선언하면 문법적으로 오류를 발생하게 되어 있다. 예를 들어서 MyLib.cpp 파일에서

#include “MyLib.h”
#include “MyLib.h”
....

와 같이 중복선언을 한다면 컴파일러 오류가 발생할 것이다. 사용자가 이런 식으로 작성하는 경우는 거의 없겠지만 개발자의 의도와 관계없이 이런 경우가 발생할 수도 있다. 예를 들어서 a.h 에서 b.h 를 인클루드 했는데 a.cpp 파일에서 이를 간과하고 a.h 와 b.h 둘 다 인클루드 했다면 결과적으로 b.h 는 두 번 포함되는 것이다.


 이 문제는 #ifndef _상수 ~ #endif 전처리문으로 회피할 수 있다. 전처리문은 컴파일이 수행되기 이전에 처리되며 이것의 동작은 이것으로 묶인 부분이 컴파일에 포함되려면 ‘_상수’ 가 정의되지 않은 상태여야 한다.(if not defined 가 조합된 명령어가 #ifndef 이다.)

해결책은 이전 포스트에서 언급한 바와 같이 헤더 파일 전체를 다음과 같이 이 전처리문으로 묶는 것이다.

#ifndef MYLIB_H
#define MYLIB_H
class MyLib {
   ...
};
#endif

이제는 MyLib.h 헤더파일을 아무리 중복해서 인클루드해도 오류가 발생하지 않는다. 그 원리는 맨 처음 인클루드 명령에서는 MYLIB_H라는 상수가 정의되지 않았기 때문에 #ifndef ~ #endif 안의 프로그램이 수행되는데 그 안에서는 MYLIB_H 상수가 정의된다. 즉 맨 처음 이 구문이 포함될 때 상수 MYLIB_H가 정의되므로 만약 중복되서 인클루드되는 경우가 발생하더라도 두 번째 부터는 #ifndef ~ #endif 안의 프로그램이 포함이 되지 않는 것이다.

 결과적으로 맨 처음에 수행되는  #include “MyLib.h” 문만 처리되며 그 이후의 중복되는 #inclde 명령은 처리되지 않게 되어 MyLib 클래스의 선언부가 한 번만 확장된다.



Posted by 살레시오
,

 본 포스트에서는 사용자 라이브러리를 작성하는 방법을 예제로 설명하도록 하겠다. 다음과 같이 간단한 LED로 모르스 부호를 표시하는 스케치 프로그램으로 시작한다.


int pin = 13;
void setup() {
   pinMode(pin, OUTPUT);
}
void loop() {
   dot(); dot(); dot();
   dash(); dash(); dash();
   dot(); dot(); dot();
   delay(3000);
}
void dot() {
   digitalWrite(pin, HIGH);
   delay(250);
   digitalWrite(pin, LOW);
   delay(250);
}
void dash() {
   digitalWrite(pin, HIGH);
   delay(1000);
   digitalWrite(pin, LOW);
   delay(250);
}

 

이것을 업로드하여 실행하면 내장 LED로 SOS신호를 3초 간격으로 반복하여 생성한다.

 이 프로그램에서 dot() 함수와 dash()를 라이브러리로 빼내서 만들어보도록 하겠다. 여기서는 내장 LED를 사용하였지만 라이브러리에는 LED가 연결한 핀을 생성자에서 지정할 수 있도록 할 것이다. 생성자 안에서는 pinMode()함수를 호출하여 지정된 핀을 출력으로 지정하도록 한다. 이제 변환을 시작해 보자.

 아두이노 라이브러리는 보통 두 개의 파일이 필요하다. 헤더 파일(.h 파일)에는 라이브러리에서 제공하는 클래스와 변수 등의 선언이 위치한다. 클래스 멤버함수 등의 실제 코드는 .cpp 파일에 작성하면 된다. 이렇게 작성해 놓으면 만약 다른 사용자가 이 라이브러리를 참고할 때에는 헤더 파일만 보면 될 것이다. 다른 사용자가 굳이 보지 않아도 되는 실제 코드 부분은 다른 파일로 분리시켜서 가독성을 향상시키는 것이다.

 헤더파일의 핵심은 다음과 같은 클래스 선언 부분이다.


class Morse {
   public:
       Morse(int pin);
       void dot();
       void dash();
   private:
       int _pin;
};

 

클래스에는 사용되는 함수와 변수의 선언이 있으며 외부에서 호출해야 하는 함수는 public 으로, 외부에 굳이 노출시킬 필요가 없는 함수/변수는 private 으로 선언한다. 클래스에는 생성자(constructor)라는 것이 있는데 이것은 클래스의 인스턴스가 생성되는 시점에서 호출되는 함수이다. C++의 생성자는 클래스와 이름이 같으며 출력형식은 지정해주지 않는다.

 헤더파일을 작성할 때 추가로 고려해야 되는 사항이 있는데 먼저 아두이노의 표준 함수들을 사용하기 위해서 다음과 같이 Arduino.h 헤더파일을 인클루드시켜야 한다. 이 헤더는 스케치파일의 경우 자동으로 인클루드되므로 별도로 작성할 필요는 없지만 라이브러리 파일의 경우에는 명시적으로 다음과 같이 포함시켜야 한다.

#include "Arduino.h“

또한, 전체 헤더파일을 다음과 같은 전처리문으로 둘러싸주는 것이 필요하다.


#ifndef Morse_h
#define Morse_h
// the #include statment and code go here...
#endif

이것은 C++에서 특정 헤더파일은 중복해서 인클루드되는 것을 방지하는 일반적인 방법이므로 이해가 가지 않아도 상관없지만 관련 부분을 검색에서 한 번 숙지하기를 권한다.

 마지막으로 주석문을 이용하여 라이브러리에 대한 간단한 설명을 헤더 파일 머리에 작성해주는 것이 좋다. 여기에는 보통 보통 작성자, 날짜, 버전, 라이센스에 대한 정보를 기록한다. 이러한 고려사항들을 모두 적용하면 헤더 파일은 다음과 같은 모양을 가질 것이다.

/*
Morse.h - Library for flashing Morse code.
Created by David A. Mellis, November 2, 2007.
Released into the public domain.
*/
#ifndef Morse_h
#define Morse_h
#include "Arduino.h"
class Morse {
   public:
       Morse(int pin);
       void dot();
       void dash();
   private:
       int _pin;
};
#endif

 이제 실제 코드가 위치하는 .cpp 파일의 작성법에 대해서 알아보자. 이 파일은 Arduino.h 와 방금 작성한 Morse.h 파일을 처음에 인클루드해야 한다.

#include "Arduino.h"
#include "Morse.h"

그 다음 생성자를 작성한다. 이 생성자는 클래스 인스턴스를 생성할 때 호출되므로 여기에서 pinMode()함수를 호출하여 사용자가 지정한 핀을 출력으로 설정하는 것이 좋다.


Morse::Morse(int pin) {
   pinMode(pin, OUTPUT);
   _pin = pin;
}

 

함수명 앞의 Morse:: 는 이 함수가 Morse라는 클래스의 멤버함수라는 것을 지정한다. 이 클래스의 다른 함수들을 정의할 때에도 같은 문법이 적용된다. 그리고 private 변수 _pin에서 맨 앞의 _은 이 변수가 private 변수라는 것을 관례적으로 표시하는 방법이며 또한 함수의 입력 인수 pin과도 구별시켜주는 역할을 한다.

 그 다음으로 원래의 스케치 파일에서 가져온 dot()함수와 dash()함수를 정의하면 된다. 이 함수의 내부에서는 스케치 파일과 다르게 클래스의 멤버 변수 _pin을 사용한다.

void Morse::dot() {
   digitalWrite(_pin, HIGH);
   delay(250);
   digitalWrite(_pin, LOW);
   delay(250);
}
void Morse::dash() {
   digitalWrite(_pin, HIGH);
   delay(1000);
   digitalWrite(_pin, LOW);
   delay(250);
}

또한 간단한 설명을 담고 있는 주석문을 파일 서두에 포함시키는 것이 좋다. 전체 .cpp 파일은 다음과 같다.

/*
Morse.cpp - Library for flashing Morse code.
Created by David A. Mellis, November 2, 2007.
Released into the public domain.
*/
#include "Arduino.h"
#include "Morse.h"
Morse::Morse(int pin) {
   pinMode(pin, OUTPUT);
   _pin = pin;
}
void Morse::dot() {
   digitalWrite(_pin, HIGH);
   delay(250);
   digitalWrite(_pin, LOW);
   delay(250);
}
void Morse::dash() {
   digitalWrite(_pin, HIGH);
   delay(1000);
   digitalWrite(_pin, LOW);
   delay(250);
}

이것으로 라이브러리의 작성은 끝났으며 이 파일들은 {내문서}\Arduino\libraries\MyLib 폴더에 위치하여야 아두이노 하프가 인클루드시킬 수 있다. 먼저 {내문서}\Arduino\libraries 밑에 Morse 폴더를 생성한 후 이 두 파일을 그 안에 복사해서 넣으면 된다. 폴도의 구성도를 그려보면 다음과 같다.


[그림 1] Morse 라이브러리의 폴더 구조

이제 아두이노 IDE를 재실행시키면 Sketch>Include library 메뉴의 하위에 Morse 항목이 새로 생긴 것을 확인할 수 있을 것이다.

[그림 2] 생성된 Morse 라이브러리

주의할 점은 헤더 파일과 본체 파일 모두 이름이 속한 폴더와 같아야 한다는 것이다. 그리고 확장자는 정확하게 .h와 .cpp 이어야 한다.



Posted by 살레시오
,

 본 포스트에서는 인터넷으로 내려 받은 사용자 라이브러리를 설치하는 방법과 직접 라이브러리를 작성하는 방법에 대해서 좀 더 자세히 설명하도록 하겠다.

 아두이노 IDE를 설치하면 {내문서}\Arduino\libraris 폴더가 생성되고 여기에 다운로드 받은 라이브러리를 복사하거나 사용자가 직접 작성한 라이브러리를 저장한다. 컴파일을 수행할 때 이 폴더는 자동으로 인클루드되어서 여기에 있는 라이브러리들이 링크된다.

 라이브러리는 기본적으로 폴더 단위로 저장되어야 한다. 예를 들어서 MyLib 라는 이름으로 (보통 라이브러리명은 대문자로 시작한다.) 라이브러리를 작성한다면 {내문서}\Arduino\libraris 폴더 밑에 MyLib라는 폴더가 있어야 하고 이 폴더 밑에 MyLib.h 헤더 파일과 MyLib.cpp 파일이 있어야 한다. 만약 예제 파일을 제공하고 싶다면 example 폴더 밑에 예제 파일의 이름과 같은 폴더를 두고 그 밑에 .ino 파일을 위치해 두어야 한다. 이를 도시하면 다음과 같다.


[그림 1] 윈도에서 아두이노 라이브러리 폴더의 구조

보통은 라이브러리는 클래스나 변수 등을 선언한 헤더 파일(.h)과 클래스 멤버함수의 정의부가 있는 .cpp 파일로 나뉜다. 그리고 헤더 파일에는 MyLib 클래스가 선언되어 있어야 한다. 보통은 헤더 파일과 본체 파일(.cpp 파일)로 나뉘지만 모든 선언과 정의를 헤더 파일에 둘 수도 있다. 하지만 헤더 파일에는 클래스의 선언부를 작성하고 그것을 구현한 cpp파일을 별도로 두는 것이 더 일반적이고 바람직하다. 이렇게 구성하면 이 라이브러리를 사용하는 스케치파일에서는 헤더 파일만 인클루드해서 사용할 수 있고, 여러 곳에서 중복해서 사용할 경우에도 헤더 파일만 인클루드 하면 되기 때문이다


 아두이노 홈페이지(http://arduino.cc/en/Reference/Libraries)에서 다양한 아두이노의 라이브러리에 대해서 설명하고 있다. 사용자는 여기에서 필요한 라이브러리를 다운로드 받아서 설치할 수 있다. 예를 들어서 OneWire 라는 라이브러리를 다운로드 받았다고 하자. 그러면 다운로드 폴더에 OneWire.zip 파일이 다운로드 되어 있을 것이다. 이 압축파일에는 OneWire.h, OneWire.cpp 파일이 들어 있다. 이 경우 이 압축파일을 이용하여 바로 사용자 라이브러리 폴더에 복사할 수 있는데 다음과 같이 Sketch>Include library > Add .ZIP Library 메뉴를 이용하여 압축파일을 선택해 주면 된다.

[그림 2] 아두이노 IDE의 라이브러리 관리 메뉴

이 메뉴를 선택한 후 OneWire.zip 파일을 선택하면 자동으로 사용자 라이브러리 폴더에 압축이 해제되서 복사해 들어가게 된다.

 OneWire.zip 파일은 다운로드 받은 압축파일에 필요한 라이브러리 파일이 직접 들어가 있는 경우이지만 경우에 따라서 인터넷에서 받은 파일이 여러 버전의 라이브러리를 가지고 있는 것도 있다. 예를 들어서 우노용과 두에용이 분리되어서 있는 경우이다. 이런 경우에는 사용자가 직접 압축을 해제한 후에 필요한 폴더만 사용자 라이브러리 폴더에 수동으로 복사해 주어야 한다.



Posted by 살레시오
,

 다음 예제들은 DFRobot사의 LCD쉴드를 이용하여 실험을 진행하였다.

[그림 2] 실험에 사용된 LCD쉴드와 회로도

회로도를 보면 RS가 8번 핀, RW가 9번핀, 그리고 D4~D7번 핀이 4번에서 7번핀까지로 결선되어 있음을 알 수 있다. 따라서 LiquidCrystal 클래스의 인스턴스는 첫 번째 생성자를 이용하여 다음과 같이 생성하면 된다.

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

이제 예제들을 작성해 보도록 하겠다.

첫 번째 예제

 첫 번째 예제로 간단한 문자열을 출력하는 프로그램이다.


// 헤더파일을 인클루드 시킨다.
#include <LiquidCrystal.h>
// 회로도를 참조하여 LCD 객체를 생성/초기화시킨다.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
   // LED의 행수와 열수를 주어 표시를 시작한다.
   lcd.begin(16, 2);
   // LDC에 문자열을 표시한다.
   lcd.print("hello, world!");
}
void loop() {
   // 커서의 위치를 0열, 1행(두 번재 행)으로 설정한다.
   lcd.setCursor(0, 1);
   // 초를 표시한다.
   lcd.print(millis()/1000);
}

두 번째 예제

 LiquidCrystal 라이브러리에는 blink() 와 noBlink() 함수가 있는데 깜박이는 직사각형의 커서를 표시할 것인지 아닌지를 설정하는 함수이다. 다음 예제를 이것을 이용한 것이다.


#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
   lcd.begin(16, 2);
   lcd.print("hello, world!");
}
void loop() {
   lcd.noBlink();
   delay(3000);
   lcd.blink();
   delay(3000);
}

유사한 함수로 cursor() 함수와 noCursor()함수가 있는데 이것은 밑줄 모양의 커서를 표시할 것인가 말 것인가를 설정하는 것이다. 이 경우 밑줄 커서는 깜박이지 않는다.

세 번째 예제

 LiquidCrystal 라이브러리의 공용 멤버함수 중에는 display()함수와 noDisplay()함수가 있다. 함수 명에서 알 수 있듯이 화면에 표시를 할 것인지 말 것인지를 설정하는 것이다.


#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
   lcd.begin(16, 2);
   lcd.print("hello, world!");
}

void loop() {
   lcd.display();
   delay(3000);
   lcd.noDisplay();
   delay(3000);
}


위 예제어서 noDisplay()함수가 실행되면 화면에 표시된 문자열이 사라지지만 그 내용은 내부 메모리에 여전히 남아있다. 따라서 display()함수가 호출되면 되살아나는 것이다. 또한 이 함수들을 이용하면 화면 전체를 깜박이는 효과를 줄 수도 있다.

네 번째 예제

문자열이 표시되는 방향을 바꾸는 함수로 rightToLeft()함수와 leftToRight()함수가 있다. 다음 예제는 이것을 이용한 것이다.


#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int thisChar = 'a';
void setup() {
   lcd.begin(16, 2);
   lcd.cursor();
}
void loop() {
   // ‘m’ 이 표시되면 방향을 바꾼다.
   if (thisChar == 'm') {
       lcd.rightToLeft();
   }
   // 's'가 표시되면 방향을 다시 바꾼다.
   if (thisChar == 's') {
       lcd.leftToRight();
   }
   // 'z'가 표시된 후 처음 조건으로 다시 리셋한다.
   if (thisChar > 'z') {
       lcd.clear(); // 화면을 지운 후 커서를 처음 자리로
       thisChar = 'a';
   }
   lcd.write(thisChar);
   delay(1000);
   thisChar++;
}


다섯 번째 예제

 이번에는 터미널에 입력한 문자를 LCD에 표시하는 프로그램을 작성해 보자.

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
   lcd.begin(16, 2);
   Serial.begin(9600);
}
void loop() {
   // 문자가 전송되면
   if (Serial.available()) {
       // 전체 문자열이 들어올 때까지 잠시 기다린다.
       delay(100);
       lcd.clear();
       // 전송된 모든 문자를 표시한다.
       while (Serial.available() > 0) {
           lcd.write(Serial.read());
       }
   }
}


여섯 번째 예제

 화면의 내용을 스크롤(scroll)하는 예제이다.


#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
void setup() {
   lcd.begin(16, 2);
   lcd.print("hello, world!");
   delay(1000);
}
void loop() {
   // 왼쪽으로 스크롤
   for (int cnt = 0; cnt < 13; cnt++) {
       lcd.scrollDisplayLeft();
       delay(150);
   }
   // 오른쪽으로 스크롤
   for (int cnt = 0; cnt < 29; cnt++) {
       lcd.scrollDisplayRight();
       delay(150);
   }
   // 다시 왼쪽으로 스크롤하여 제자리로
   for (int cnt = 0; cnt < 16; cnt++) {
       lcd.scrollDisplayLeft();
       delay(150);
   }
   delay(1000);
}


이 예제에서는 scrollDisplayLeft() 함수와 scrollDisplayRight() 함수를 이용하여 수동으로 이동시켰다. 반면 autoScroll()함수를 사용하면 문자가 표시되기 전에 왼쪽으로 자동으로 이동이 된다.




Posted by 살레시오
,

 가전제품이나 전자 장치에서 간단한 정보를 표시하는데 많이 사용되는 것이 바로 액정 표시기 (liquid crystal display, LCD)이다. 크게 문자만을 표시할 수 있는 문자형과 선이나 도형 등 그래픽을 그릴 수 있는 그래픽형으로 나뉜다.

[그림 1] LCD 장치의 예

아두이노의 LiquidCrystal 라이브러리는 텍스트 액정(liquid crystal) 표시장치를 구동하기 위한 라이브러리이다. 이 라이브러리를 이용하기 위해서는 다음과 같이 프로그램 서두에 해당 헤더파일을 인클루드시켜야 한다.


#include <LiquidCrystal.h>

이 헤더파일에는 LiquidCrystal 이라는 클래스가 정의되어 있으며 다음과 같은 공용(public) 멤버함수들이 정의되어 있어서 쉽게 사용할 수 있다.

  • 생성자 : LCD 모듈과 아두이노의 연결 방식에 따라서 생성자를 사용하면 된다. 다음과 같은 네 가지 함수가 오버로드되어 있다.

       ❶ LiquidCrystal(rs, enable, d4, d5, d6, d7)

       ❷ LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)

       ❸ LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)

       ❹ LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)

보통은 핀수를 가장 적게 차지하는 ❶번 방식이 많이 사용된다.  멤버함수는 다음과 같다.


[표 1] LiquidCrystal 클래스의 멤버 함수들

멤버 함수

기능

void begin(row, col)

LCD를 초기화 한다.

void clear()

화면을 지운 후 커서를 처음 자리로 옮긴다.

void home()

화면은 그대로 나둔채로 처서만 (0,0)자리로 옮긴다.

setCursor(col, row)

커서를 (col, row)자리로 옮긴다.

byte write(data)

한 문자를 출력한다.

print(data, BASE)

문자열이나 변수 값을 출력한다.

createChar()

사용자 (그림)문자를 생성한다. (8개까지 가능함)

void cursor()

(밑줄)커서를 표시한다.

void noCursor()

커서를 표시하지 않는다

void blink()

깜박이는 커서를 표시한다.

void noBlink()

커서를 표시하지 않는다.

void display()

내용을 표시한다.

void noDisplay()

내용을 표시하지 않는다.(메모리에 내용은 남아 있음)

scrollDisplayLeft()

표시된 내용을 왼쪽으로 한 칸 이동한다.(회전)

scrollDisplayRight()

표시된 내용을 오른쪽으로 한 칸 이동한다.(회전)

void autoscroll()

기존 내용을 좌로 이동시킨 후 현재 내용을 표시.

noAutoscroll()


void leftToRight()

문자 표시 방향을 왼쪽에서 오른쪽으로 설정한다.

void rightToLeft()

문자 표시 방향을 오른쪽에서 왼쪽으로 설정한다.

여기서 write()함수는 입력을 아스키(ASCII)값으로 받으며 print()함수는 문자열이나 상수(변수)값을 받는 것에 유의하자.



Posted by 살레시오
,

 아두이노는 주변 기기들을 간편하게 제어할 수 있는 다양한 라이브러리가 존재한다. arduino.cc 에서는 이들 라이브러리를 표준 라이브러리와 그외의 것들로 구분하는데 표준 라이브러리는 아두이노 IDE에 포함된 것으로 다음과 같은 것들이 있다.


[표 1] 아두이노 표준 라이브러리

라이브러리명

기능

비고

EEPROM

EEPROM에 읽고 쓰는 기능을 하는 함수들.

Ethernet

Arduino Ethernet Shield를 이용한 인터넷 접속.

Firmata

시리얼 프로토콜을 이용하여 PC와 연결하여 데이터를 주고 받기.

GSM

GSM shield를 이용하여 GSM/GRPS 네트워크에 접속하기.

LiquidCrystal

LCD 제어.

SD

SD카드에 읽고 쓰기.

Servo

서보모터 제어.

SPI

SPI(Serial Peripheral Interface) 통신.

SoftwareSerial

시리얼통신을 소프트웨어적으로 구현한 것.

Stepper

스테핑모터 구동.

TFT

Arduino TFT screen에 문자, 이미지, 도형 표시하기.

WiFi

Arduino WiFi shield를 이용하여 인터넷 접속하기.

Wire

TWI (I2C) 통신.


[표 2] 특수 라이브러리

라이브러리명

기능

비고

Audio

SD카드에 저장된 오디오파일 재싱.

Due

Scheduler

다중 non-blocking 태스크 관리.

USBHost

마우스와 키보드 같은 USB주변장치와의 통신.

Esplora

Esplora 보드의 센서와 작동기를 쉽게 접근하도록 함.

Esplora

Keyboard

연결된 컴퓨터에 키보드 입력 전송.

Leonardo, Micro,Due,Esplora

Mouse

연결된 컴퓨터의 마우스 커서 제어.


[표 3] 기타 라이브러리 (사용하기 위해서는 설치 과정이 필요함)

라이브러리명

기능

비고

Messenger

PC로부터의 텍스트기반 메시지 처리.

통신

NewSoftwareSerial

SoftwareSerial 라이브러리의 개선판

OneWire

1-wire protocol을 사용하는 장치 제어(Dallas Semiconductor)

PS2Keyboard

PS2 키보드로부터 문자 읽어들이기.

Simple Message System

아두이노와 PC간 메시지 보내기.

SSerial2Mobile

휴대폰을 이용하여 문자메세지나 이메일 보내기.

Webduino

확장가능한 웹서버 라이브러리(이더넷쉴드)

X10

AC전원선으로 x10신호 보내기.

XBee

XBee와의 통신.

SerialControl

시리얼 통신으로 다른 아두이노 제어하기


Capacitive Sensing

두 개 혹은 그 이상의 핀을 정전식 터치센서로 사용.

센싱

Debounce

(버튼으로부터) 바운싱을 제거하기.


GFX

기반 클래스(표준 그래픽 루틴)

디스플레이/LED

GLCD

KS0108 칩 기반의 그래픽 LCD 라이브러리

Improved LCD library

LCD라이브러리의 오류 수정 버전

LedControl

LED행렬/7세그먼트 제어 (MAX7221/MAX7219)

LedControl

여러개의 LED를 Maxim칩으로 제어하는 다른 라이브러리

LedDisplay

HCMS-20xx 스크롤링 LED디스틀레이 제어.

Matrix

기본적인 LED매트릭스를 제어하는 라이브러리.

PCD8544

Nokia55100 LCD 제어기(Adafruit ind.)

Sprite

LED매트릭스의 애니메이션 사용을 위한 기반 클래스

ST7735

1.8“ TFT 128x160 스크린 제어 라이브러리(adafruit)


FFT

오디오 혹은 다른 아날로그 신호의 주파수 해석.

audio

Tone

오디오 주파수의 구형파 생성.


TLC5940

16채널 12비트 PWM 제어기

PWM


DateTime

현재 날짜와 시간을 추적.

타이밍

Metro

정해진 시간 간격으로 수행.

MsTimer2

타이머2를 써서 매 N밀리초마다 정해진 일을 수행


PString

버퍼에 프린팅을 하기위한 가벼운 클래스

유틸

Streaming

프린트문을 간략히 하기위한 메쏘드

 여기에 소개된 리스트 외에도 사용자들이 작성한 수 많은 라이브러리들이 공유되고 있다. 따라서 본인이 필요한 기능을 구현하기 위해서 직접 작성하기 전에 그 기능을 지원하는 라이브러리가 있는지 검색해 보는 과정을 거쳐야 한다.



Posted by 살레시오
,