본문 바로가기

Arduino/[1] Arduino introduction

[Arduino] #6. ⭐️아두이노 시리얼 입출력하기 ⭐️

728x90
반응형

아두이노 데이터 속도 설정하기:  문자 출력 선언(시리얼 모니터 사용 선언)

void setup(){
	Serial.begin(speed);
    // speed: 데이터의 속도값
    //일반적으로 아두이노 우노는 9600,아두이노 메가는 115200을 사용한다고 생각하면 된다.
}

void loop(){

}

문자/ 문자열 출력함수

아두이노에는 문자를 출력하는 다양한 종류의 함수들이 있다. 함수는 다음과 같다.

Serial.print(value);
// value값을 시리얼 모니터에 출력한다. 
//엔터는 함께 출력되지 않으므로 전에 출력된 끝 문자와 붙어서 출력된다.

Serial.println(value);
// value값을 시리얼 모니터에 출력한다. 가장 자주 사용되는 출력함수이다.
//엔터가 함께 출력되므로 시인성이 좋다.

Serial.write(value);
//value을 출력하는 함수. 하지만 value값에는 byte형과 문자열만 가질 수 있다.
//Serial.print 함수는 숫자를 넣으면 문자로 변환(아스키코드)되는 반면 write가 있으면 그대로 출력된다.

print의 형식

Serial.println(value);
//value의 형식에 따라 출력형식이 달라진다.
/* 예시
Serial.println(1234); != Serial.println("1234");
	 숫자(10진수)                  문자열
*/

Serial.println(value,format);
//format에 따라 여러 형식의 숫자을 출력할 수 있다.
/*
format의 종류

DEC: 10진수
HEX: 16진수
BIN: 2진수
*/

 

문자열 입력 확인하기

Serial.read();
//시리얼 모니터의 입력값을 확인하는 코드
//직관적으로 모니터의 값을 읽어온다(read)라고 생각하면 자연스럽게 이해가 될 것이다.
//일반적으로 입력된 값을 변수에 저장하여 사용한다.

String str = Serial.readString(); 
//시리얼 모니터의 문자열을 읽음.

char input = Serial.read();
//input이라는 변수에 시리얼 모니터에 입력된 값을 저장한다.

Serial.available();
//시리얼 모니터가 유효한지 확인하는 코드.
//시리얼 모니터에 문자가 적혔다면 참(0이 아닌 수), 아니면 거짓(0)를 반환한다.
//이 함수를 이용해 시리얼 모니터에 입력한(혹은 외부로부터 입력받은) 문자열을 출력할 수 있다.

 

시리얼 모니터에 값 입력하고 출력하기

void setup(){
	Serial.begin(speed);
    // speed: 데이터의 속도값
    //일반적으로 아두이노 우노는 9600,아두이노 메가는 115200을 사용한다고 생각하면 된다.
}

void loop(){
	if(Serial.available()){
    	//실행하고 싶은 코드
        char input = Serial.read(); // 입력받은 값을 input에 저장한다.
        //이때 저장한 값은 1바이트 (문자)임에 주의한다.
        Serial.println(input);//문자를 출력한다.
    }
}

 

이때 주의할 점은 입력한 값 중 문자 하나를 char형 변수에 저장한다는 점이다. 문자를 엔터가 끝날 때까지 받는게 아니라 엔터가 입력될 때 까지 출력을 한다는 점에 인간이 생각하는 프로그램 과정과 다르다는 것을 주의한다.

 

예를 들어 hello을 입력한다면 hello가 다 입력될때까지(엔터가 입력될 때 까지)기다린 후 출력하는 것이 아니라 h, e, l, l, o가 각각 출력되고 마지막에 엔터가 입력되어 출력됨을 주의하자. 이는 항상 헷갈리는 부분으로 나중에 반복문과 조건문에서 빈번하게 오류를 발생시키는 원인이된다.

시리얼 모니터 입력값 읽기(1): 문자열을 숫자로 변환

Serial.parseInt(data); //대문자 I(아이)임에 유의하자.
//시리얼 통신으로 입력되는 data가 문자열을 경우 그 값을 int형의 숫자로 변환하는 함수이다.
//문자열은 long형으로 변환되며, 예를 들어 문자열 "1000"시 숫자 1000으로 변환한다.
//입력값이 숫자형태인 문자열이 아닌 경우 0을 반환한다.

Serial.parseFloat(data);
//시리얼 통신으로 입력되는 data가 문자열을 경우 그 값을 float형의 숫자로 변환하는 함수이다.

 

시리얼 모니터 입력값 읽기(2): 정해진 바이트 만큼 입력받기

byte Serial.readByte(buffer,length);
//지정된 길이(개수)만큼 데이터를 읽어와 버퍼에 저장한다. 
//저장된 개수만큼 수신되지 않은 경우 읽어온 데이터만 저장 후 남은 데이터는 반환한다.
//구분문자와 같이 특정 값을 길이로 구분할 때 사용한다.

byte Serial.readByteUntil(point,buffer,length);
//지정한 문자가 수신될 때 까지 데이터를 읽어온다.

//point: 지정한 문자
//buffer: 데이터를 저장할 char형 배열 이름
//length: 읽어 올 데이터의 길이

 

기타 입출력함수

Serial.setTimeout(time);
//Serial.readByte()함수나 Serial.readByteUntil()함수에 사용되는 타임아웃 시간을 설정하는 함수.
//time: 지정한 길이만큼 데이터가 수신 중 수신이 원활하지 않은 경우 기다리는 시간. 기본 1초 설정(밀리초 단위).

Serial.end();
//시리얼 통신을 끊고 사용되던 핀(0,1)을 일반 디지털 핀으로 전환한다. 재사용시 Serial.begin()함수를 이용한다.

Serial.Event(); //시리얼 통신을 통해 데이터 수신시 자동으로 호출된다.

/*예시
Serial.Event(){
	//시리얼 통신 중 사용하고자 하는 코드 입력
}
*/​

Tip!

아두이노 시리얼 모니터를 키는 단축어는 다음과 같다.

 

Window : Shift + control + M

Mac: Shift + command + M

728x90
반응형
댓글