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

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

by Bugwhale 2020. 1. 25.

 

1. 개요

이 글은 아두이노를 어느 정도 다룰 줄 아는 분들을 기준으로 정리하였기 때문에 클래스, 메서드의 개념을 미리 공부하는 것을 추천합니다.

2. Serial 클래스

2.1 Serial.find()

수신받은 데이터에서 원하고자 하는 문자가 존재하는지 확인할 때 사용합니다.

  • 프로토타입

bool Serial.find(target)

  • 매개변수

target : 문자열에서 찾을 문자(char)

  • 반환 값

bool : 문자열에 존재하면 true 존재하지 않으면 false

  • 예제 코드
void setup() {
	Serial.begin(9600);
}

void loop() {
	// 수신받은 데이터가 존재하면
	if(Serial.available() > 0) {
		if(Serial.find('a')) {
			Serial.println("a 문자 존재함"); 
		}
		else {
			Serial.println("a 문자 존재하지 않음"); 
		}
	}
}

2.2 Serial.findUntil()

수신 종료를 의미하는 문자가 나올 때까지 수신받은 데이터에서 원하고자 하는 문자가 존재하는지 확인할 때 사용합니다. 아래 예제 코드에서 각각 123ab, 123ba 문자열을 수신받은 경우 123ab는 a 문자 존재함, 123ba는 a 문자 존재하지 않음이 출력됩니다.

  • 프로토타입

bool Serial.findUntil(target, terminal)

  • 매개변수

target : 문자열에서 찾을 문자(char)
terminal : 수신 종료를 의미하는 문자(char)

  • 반환 값

bool : 문자열에 존재하면 true 존재하지 않으면 false

  • 예제 코드
void setup() {
	Serial.begin(9600);
}

void loop() {
	// 수신받은 데이터가 존재하면
	if(Serial.available() > 0) {
		if(Serial.findUntil('a', 'b')) {
			Serial.println("a 문자 존재함"); 
		}
		else {
			Serial.println("a 문자 존재하지 않음"); 
		}
	}
}

2.3 Serial.flush()

현재 전송하고 있는 데이터가 전송완료가 될 때까지 기다립니다.
(아두이노 1.0 이전 버전에서는 수신 버퍼의 데이터를 삭제하는 함수)

  • 프로토타입

Serial.flush()

  • 매개변수

없음

  • 반환 값

없음

2.4 Serial.peek()

수신받은 데이터의 가장 첫 번째 byte가 뭔지 알고 싶을 때 사용합니다. 참고로 read()에서는 수신 버퍼에서 읽어온 데이터는 삭제되는데 peek()는 읽어오기만 합니다.

  • 프로토타입

Serial.peek()

  • 매개변수

없음

  • 반환 값

없음

2.5 Serial.setTimeout()

serial.readBytesUntil() 또는 serial.readBytes() 함수를 사용할 때 최대 얼마큼 기다릴 건지(타임아웃)를 설정합니다. 기본값은 1000ms입니다.

  • 프로토타입

Serial.setTimeout(timeout)

  • 매개변수

timeout : 설정할 타임 아웃 시간. 단위는 밀리초, 1초는 1000밀리 초(unsigned long)

  • 반환 값

없음

2.6 Serial.write()

위에서 Serial.print() 함수는 데이터를 출력시켜준다고 했습니다. 실제로는 시리얼 통신을 통하여 컴퓨터의 시리얼 모니터로 데이터를 "전송"하는 함수입니다. Serial.write() 역시 시리얼 데이터를 송신하는 함수이지만 byte 형과 문자열 밖에 전송할 수 없습니다.. 즉, 숫자를 넣어도 그 숫자가 문자로 변환되지 않습니다. 매개 변수로 byte 형 배열과 배열의 길이를 설정하여 송신할 수 있습니다.

  • 프로토타입

Serial.write(value)
Serial.write(buffer, length)

  • 매개변수

value : byte 형 데이터 또는 문자열
buffer : byte 형 배열의 이름
length : 전송할 배열의 길이 또는 전송할 데이터의 개수

  • 반환 값

int : 전송한 데이터의 byte 수

2.7 Serial.availableForWrite()

available()와 read() 함수를 합친 것과 비슷하지만 read()에서 byte를 읽어드리는 것과는 다르게 읽어드릴 수 있는 btye 수 만을 반환합니다. 실제로는 거의 쓰이지 않습니다.

  • 프로토타입

byte Serial.availableForWrite()

  • 매개변수

없음

  • 반환 값

byte : 읽어드릴 수 있는 데이터의 byte 수

2.8 Serial.parseInt()

수신된 데이터가 숫자로 구성된 문자열인 경우 문자열을 long 자료형의 숫자로 변환하여 반환합니다.
예을 들어 "123"라는 문자열을 수신받으면 123 long 타입의 값으로 반환됩니다.

  • 프로토타입

long Serial.parseInt()

  • 매개변수

없음

  • 반환 값

long : 변환된 long 형 데이터

2.9 Serial.parseFloat()

parseInt()와 거의 비슷하며 반환 값이 float 타입이라는 점에서 다릅니다. 레퍼런스 설명은 "수신받은 데이터에서 유효한 부동소수점 숫자(실수)를 반환한다"라고 돼있습니다. 숫자(또는 빼기 기호)가 아닌 문자는 건너뛰며 부동 소수점 숫자가 아닌 문자로 종료됩니다.

  • 프로토타입

float Serial.parseFloat()

  • 매개변수

없음

  • 반환 값

float : 변환된 float 형 데이터

2.10 Serial.serialEvent()

이 함수는 호출용이 아닌 데이터가 수신되었을 때 if(Serial.availvble() > 0)와 같은 상황에 기능을 추가할 함수입니다. 아두이노는 시리얼 통신으로 데이터가 수신되면 serialEvent() 함수를 호출하도록 되어 있습니다.

예제 코드는 시리얼 통신을 통하여 데이터를 전송받으면 a라는 문자를 출력시키는 코드입니다.

  • 프로토타입

Serial.serialEvent()

  • 매개변수

없음

  • 반환 값

없음

  • 예제 코드
void setup(){
	Serial.begin(9600);
}

void loop(){

}

void serialEvent() {
	Serial.println("a");
}

3. 참조

Arduino(아두이노 공식 홈페이지)

댓글