1. 개요
이 글은 아두이노를 어느 정도 다룰 줄 아는 분들을 기준으로 정리하였기 때문에 클래스, 메서드의 개념을 미리 공부하는 것을 추천합니다.
2. Serial 클래스
2.1 if(Serial)
사용하고자 하는 시리얼 통신이 사용 가능한 상태인지 확인하고자 할 때 사용합니다. 예제 코드는 시리얼 모니터를 사용하는 경우 시리얼 모니터를 켜기(연결하기) 전까지 loop() 함수로 넘어가지 않습니다.
- 프로토타입
없음
- 매개변수
없음
- 반환 값
bool : 사용 가능하면 true 반환
- 예제 코드
void setup() {
Serial.begin(9600);
while(!Serial) { // 시리얼 통신 포트가 연결되기 전까지 대기
}
}
void loop() {
}
2.2 Serial.begin()
시리얼 통신을 사용하기 위해서는 사용하고자 하는 통신 포트를 초기화(레지스터 값 설정)를 해야 합니다. 아두이노에서는 이 기능을 Serial 클래스 begin() 함수로 구현되어 있습니다.
- 프로토타입
Serial.begin(speed)
Serial.begin(speed, config)
- 매개변수
speed : 초당 전송할 비트수(baud rate), 높을수록 빠르나 해당 보드 또 그 보드와 통신하고자 하는 보드(또는 기기)가 사용하고자 하는 통신속도를 지원하는지 알아야 합니다.
config : 데이터의 길의, 패리티 비트, 정지 비트를 설정, 따로 설정하지 않으면 SERIAL_8N1 가 기본값으로 설정되며 각 의미는 다음과 같습니다.
SERIAL_8N1
8 : 데이터의 길이를 설정한다. 단위는 비트수 5 ~ 8 비트로 설정
N : 패리티 비트 사용 안 함
E : E(Even) 짝수 패리티 비트 사용
O : O(Odd) 홀수 패리티 비트 사용
1 : 정지 비트 수를 설정한다. 단위는 비트수 1 또는 2 비트로 설정
- 반환 값
없음
- 예제 코드
void setup() {
// Serial.begin(9600, SERIAL_8N1);
Serial.begin(9600);
}
void loop() {
}
2.3 Serial.available()
시리얼 포트로부터 수신받은 데이터가 있는지 확인할 때 사용합니다.
- 프로토타입
byte Serial.available()
- 매개변수
없음
- 반환 값
byte : 읽을 수 있는 데이터의 byte 수
- 예제 코드
void setup() {
Serial.begin(9600);
}
void loop() {
// 수신받은 데이터가 0 초과라면, 즉 데이터가 존재한다면
if(Serial.available() > 0) {
// 코드 수행
}
}
2.4 Serial.print(), Serial.println()
시리얼 포트를 통하여 데이터를 출력시키는 데 사용합니다. Serial.print()와 Serial.println()를 묶어서 설명하는 이유는 기능이 거의 같기 때문입니다. 다른 점은 데이터 출력 후 줄 바꿈의 유무인데 Serial.print()는 줄 바꿈을 하지 않고 Serial.println()는 줄 바꿈을 합니다.
- 프로토타입
Serial.print(val)
Serial.print(val, format)
Serial.println(val)
Serial.println(val, format)
- 매개변수
val : 출력하고자 하는 값
format : 포맷 형식, 예제 코드 참조
- 반환 값
없음
- 예제 코드
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print("print 코드");
Serial.println("println 코드");
Serial.println();
Serial.println("Hello World");
Serial.println('A');
Serial.println(100);
Serial.println(1.23);
Serial.println();
Serial.println(10, BIN);
Serial.println(10, OCT);
Serial.println(10, DEC);
Serial.println(10, HEX);
Serial.println();
Serial.println(1.23456, 0);
Serial.println(1.23456, 1);
Serial.println(1.23456, 2);
Serial.println(1.23456, 3);
delay(5000);
}
2.5 Serial.read()
수신받은 데이터를 읽는 데 사용합니다.
- 프로토타입
int Serial.read()
- 매개변수
없음
- 반환 값
int : 수신받은 데이터의 맨 처음 1 byte, 수신받은 데이터가 없으면 -1 값을 반환
- 예제 코드
void setup() {
Serial.begin(9600);
}
void loop() {
int data;
// 수신받은 데이터가 존재하면
if (Serial.available() > 0) {
data = Serial.read(); // 데이터를 읽어드리고
Serial.println(data); // 읽어드린 데이터를 출력한다.
}
}
2.6 Serial.readBytes()
설정한 byte 만큼 데이터를 읽어옵니다. 수신받을 데이터의 길이가 정해져 있는 경우 유용하게 사용됩니다.
- 프로토타입
byte Serial.readBytes(buffer, length)
- 매개변수
buffer : 읽어드린 데이터를 저장할 버퍼(char[] 또는 byte[])
length : 읽어드릴 데이터의 길이(int)
- 반환 값
byte : 읽어드린 데이터의 byte 수(size_t)
2.7 Serial.readBytesUntil()
수신 종료를 의미하는 문자가 오거나 설정한 byte 만큼 데이터를 읽어옵니다. 수신받을 데이터의 길이가 정해져 있는 경우 유용하게 사용됩니다.
- 프로토타입
byte Serial.readBytesUntil(character, buffer, length)
- 매개변수
character : 수신 종료를 의미하는 문자(char)
buffer : 읽어드린 데이터를 저장할 버퍼(char[] 또는 byte[])
length : 읽어드릴 데이터의 길이(int)
- 반환 값
byte : 읽어드린 데이터의 byte 수(size_t)
2.8 Serial.readString()
버퍼에서 읽어드린 char의 데이터들을 String 형태로 반환합니다.
- 프로토타입
String Serial.readString()
- 매개변수
없음
- 반환 값
String : 읽어드린 데이터를 문자열로 반환합니다.
2.9 Serial.readStringUntil()
버퍼에서 읽어드린 char의 데이터들을 String 형태로 반환합니다. 읽어드리는 도중 terminator 매개변수에 설정된 문자가 발견되면 중지합니다.
- 프로토타입
String Serial.readStringUntil(terminator)
- 매개변수
terminator : 수신 종료를 의미하는 문자(char)
- 반환 값
String : 읽어드린 데이터를 문자열로 반환합니다.
2.10 Serial.end()
begin()을 통해 사용 중인 시리얼 포트를 비활성화시켜 일반 디지털 IO 핀으로 사용하게 합니다. 특수한 경우가 아니라면 사용하지 않습니다.
- 프로토타입
Serial.end()
- 매개변수
없음
- 반환 값
없음
3. 참조
Arduino(아두이노 공식 홈페이지)
'아두이노 관련 > 아두이노 기초' 카테고리의 다른 글
아두이노 기초 - I2C 통신 - 04. I2C 통신이란 (0) | 2020.01.25 |
---|---|
아두이노 기초 - 시리얼 통신 - 03. Serial 클래스 메서드 2 (0) | 2020.01.25 |
아두이노 기초 - 시리얼 통신 - 01. 시리얼 통신이란 (0) | 2020.01.24 |
댓글