제너럴공국

[아두이노] UART 시리얼 통신 함수 본문

전자전기공학/Arduino

[아두이노] UART 시리얼 통신 함수

제너럴3세 2021. 1. 14. 21:18
반응형

 오늘은 arduino의 UART 시리얼 통신 기본 함수들에 대해서 잠깐 정리해볼게요. 시리얼 함수에 대해 정리할 겁니다.

1. Serial.begin()

Serial.begin(9600);

먼저, 시리얼 통신을 진행할, Baud rate를 설정해주세요. 시리얼통신은 UART로 동기식 신호이므로 서로 클럭 수가 맞아야 통신이 가능해요. 기본적으로는 9600bps를 사용해주세요. 나중에 HC-06이라는 블루투스 모듈을 사용할 때, 기본 클럭이 9600bps라는건 추가정보~~ ㅎ


2. Serial.available()

while(Serial.available() > 0){
	//시리얼 데이터를 수신한다면?
}

 아두이노 내부에는 시리얼통신을 위한 시리얼 버퍼가 존재해요. 시리얼 정보가 수신되면 이 버퍼에 저장되며, 64bytes까지 보관된대요. 이 Serial.available()이라는 함수는 이 시리얼 버퍼에 몇 bytes가 있는지 읽어오는 함수입니다. 1 이상이 출력되면, 버퍼에 수신한 데이터가 존재한다는 말이겠죠? 그래서 보통 위와 같이 while이나 if 문과 함께 사용합니다.

3. Serial.read()

int received_data = Serial.read();

 이 함수는 시리얼 버퍼에 있는 데이터를 읽어오는 함수에요. 첫번째 byte를 읽어오고, 만약 읽어올 데이터가 없다면 -1을 int형으로 반환합니다.


4. Serial.print() & Serial.println()

Serial.print("Hello world!");

Serial.print()는 괄호 안의 데이터를 줄바꿈 없이 전송합니다.

Serial.println("Hello world!");

Serial.println()은 괄호 안의 데이터를 보내고 줄바꿈을 합니다!!

5. Serial.write()

Serial.write();

 Serial.write()는 Serial.print와 유사하지만, 숫자를 보낼때 큰 차이점을 가져요. Serial.print()는 숫자를 전송할때, (숫자 -> ASCII 코드)로 변환을 해서 전송하는 반면에, Serial.write(숫자 -> 숫자) 그대로 전송합니다. 

 하지만, 이때 시리얼 모니터가 숫자를 ASCII 코드라고 생각해, (ASCII표에 해당하는 문자로 변환)하여 표시하죠.
그래서, Serial.print()를 이용하면 원래 숫자를 그대로 시리얼모니터에서 확인할 수 있지만, Serial.write()에서는 그렇게 확인할 수 없죠. 필요에 따라, 잘 활용하면 많은 도움이 될거예요~


6. 전체 .ino로 좌라락~! 

int test = 45;

void setup() {
  //Baud rate 설정
  Serial.begin(9600);
}

void loop() {
  while(Serial.available() > 0){
    Serial.print("I`ve read");
    Serial.println(Serial.read());
  }
  Serial.write(test);
  Serial.println(test);
  
  delay(500);
}

직접 위 코드를 실행시켜보고, 어떤 결과가 나오는지 확인해보세요~!

반응형
Comments