취소

커뮤니티

가이드

서포트

전체

아두이노 기본 Serial 함수

아두이노와 아두이노, 아두이노와 PC의 통신에서 가장 많이 사용되는 방법은 RS232 시리얼 통신이다. 주로 사용되는 것은 별로 없으나 생각보다 많은 함수가 있다. 그 중 자주 사용되는 것들을 중심으로 정리해보겠다.

begin

통신을 시작하고 통신속도를 지정할 때 사용한다. 통신속도는 4800~250000 까지 있으며, 보통 평균적으로 9600~115200 사이로 사용된다. ( 참고로 L 사 같은 경우 4800 을 권장속도로 사용하고 있다. )

Serial.begin(speed)   // speed : 통신 속도 // 4800 / 9600 / 14400 / 19200 / 22800 / 38400 / 57600 / 115200

Serial.begin 예제

void setup() {   Serial.begin(9600); // 9600의 속도로 통신을 시작한다 }

available

통신 중 통신 값이 들어온 여부 파악시 사용한다. 이를 사용해서 통신 도중 잘 못 들어온 값에 의해서 동작하거나, 다른 신호가 들어와서 동작하는 경우를 예방 할 수 있다.

Serial.available()

Serial.available 예제

int readByte = 0;   void setup() {   Serial.begin(9600); // 9600의 속도토 통신을 시작한다 }   void loop() {   if(Serial.available() > 0) {     readByte = Serial.read(); // 통신을 통해 들어온 값을 readByte에 저장해라     Serial.print(“I Read : ”);     Serial.println(readByte, DEC); // readByte로 들어온 값 출력   } }

flush

시리얼 통신 후 시리얼 통신 할 때 들어오거나 남아있는 값을 제거할 때 사용한다.

Serial.flush()

Serial.flush 예제

void setup() {   Serial.begin(9600); // 9600의 속도토 통신을 시작한다   Serial.flush(); // 통신에 남아있는 쓰레기 값 제거 }

print / println

print 와 println 은 시리얼 통신으로 값을 송출할 때 사용한다. 또 이를 활용해 현재 진행상황 등을 확인 할 수 있다.

Serial.print(val)   val : 보낼 값, 이때 문자열을 송출하려면 “”을 사용해서 해야된다

Serial.print / Serial.println 예제

int x = 0;   void setup() {   Serial.begin(9600); }   void loop() {   Serial.print(“NO FORMAT \t”);   Serial.print(“DEC \t”);   Serial.print(“BIN \t”);   Serial.print(“OCT \t”);   Serial.print(“HEX \t”);     for(x=0; x<64; x++) {     Serial.print(x);     Serial.print(“\t”);     Serial.print(x, DEC);     Serial.print(“\t”);     Serial.print(x, BIN);     Serial.print(“\t”);     Serial.print(x, OCT);     Serial.print(“\t”);     Serial.print(x, HEX);     Serial.print(“\t”);     delay(200);   }   Serial.println(“”); }

read

시얼 통신에서 값을 수신 받을 때 사용한다.

Serial.read()

write

시리얼 통신으로 값을 보낼 때 사용한다. print 함수와 동일한 기능을 하지만 다르다.

Serial.write(val)

Serial.read & Serial.write 예제

void setup() {   Serial.begin(9600); // 9600의 속도토 통신을 시작한다. }   void loop() {   if(Serial.available() > 0) {     int readByte = Serial.read(); // 통신을 통해 들어온 값을 readByte에 저장해라     readByte *= 2; // readByte에 2를 곱하여라     Serial.write(readByte); // write를 통해서 출력해라     delay(100);   } }

write 와 print 의 차이점

write 와 print의 차이점은 한 문자를 출력하느냐, 한 문단을 출력하느냐의 차이이다. 간단하게 write 와 print 를 통해서 각각 한 문단을 송출해보면 손 쉽게 알 수 있다.

void loop() {   Serial.write(“Hello”);   Serial.print(“Hello”); }

우리가 만약 Hello 를 출력한다고 하자, write로 출력을 했을 경우 Hello 는 한 글자씩 끊어져서 H, e, l, l, o 로 출력되었을 것이다. 그에 비해서 print는 Hello 를 끊지 않고 한 문장으로 출력하고 있을 것이다. 이 둘 중 어떤 것이 틀렸다는 것은 없다. 상황에 따라서 write를 써야 될 수도 있으며, 반대로 print를 사용해야 될 수도 있다.