본문 바로가기
아두이노 관련/아두이노 기초

아두이노 기초 - 시리얼 통신 - 02. Serial 클래스 메서드 1

by Bugwhale 2020. 1. 25.

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(아두이노 공식 홈페이지)

댓글