티스토리 뷰

반응형



# 아두이노 시리얼 통신


아두이노 시리얼 통신 방법은 간단합니다.

AVR 코딩에서 레지스터를 일일히 설정할 필요가 없습니다.

UART 시리얼 통신을 위한 Serial 클래스를 제공하기 때문 입니다.

void setup()
{
      Serial.begin(9600);                        // UART 시리얼 통신 초기화
}

void loop()
{
      while(Serial.available())                  // 수신된 데이터가 있는 경우
      {
          byte data = Serial.read();             // 수신된 데이터 읽기
          Serial.write(data);                    // 에코 백
      }
}      





  void begin(unsigned long baud)

  void begin(unsigned long baud, byte config)

  

     - 매개변수

          baud : 속도

          config : 데이터 비트 수, 패리티, 정지 비트 설정


     - 반환 값 : 없음

 


아두이노에서는 디폴트 값으로 8비트 데이터, 패리티 사용 안 함, 1비트 정지 비트를 사용하며

필요한 경우 매개변수 config를 통해 설정할 수 있다.

디폴트 값은 SERIAL_8N1 이다.


8 : 데이터 비트 (5, 6, 7, 8)

N : 패리티 비트 없음 (E : 짝수 패리티, O : 홀수 패리티)

1 : 정지비트 (1, 2)



수신도힌 데이터를 읽어 오는 함수는 read로 바이트 단위의 데이터를 반환한다.


  int read(void)

  

     - 매개변수 : 없음

     - 반환 값 : 시리얼 통신 수신 버퍼의 첫 번째 문자 또는 -1



다만 수신된 데이터가 없는 경우에는 -1의 값을 반환하므로 수신된 데이터가 존재하는지 여부를 확인한 이후 읽어야 한다.

수신된 데이터의 존재 여부는 available 함수를 통해 알아낼 수 있다.


  int available(void)


     - 매개변수 : 없음

     - 반환 값 : 시리얼 포트 수신 데이터 버퍼에 저장된 데이터의 바이트의 수



데이터를 송신하기 위해 사용할 수 있는 함수는 write로 read 함수와 마찬가지로 바이트 단위로 데이터를 전송하지만

오버라이딩(이미 있던 메소드를 쓰는 것)을 통해 바이트 배열 역시 전송할 수 있다.


  size_t write(uint8_t ch)

  size_t write(const char *str)

  size_t write(const uint8_t *buffer, size_t size)

  

     - 매개변수 

             ch : 출력 문자

             str : 출력 문자열

             buffer : 출력 데이터열

             size : 버퍼의 크기

     - 반환 값 : 출력한 바이트의 수



Serial 클래스에서 write 함수가 바이트 단위의 데이터 전송에 사용된다면,

print 함수는 문자 단위로 데이터를 전송한다. 


예를들어, Serial.Write(78)은 1바이트 데이터 78을 전송하지만, Serial.print(78)은 숫자 78을 문자열 "78"의

2바이트로 변환하여 전송한다. 

Serial.println(78) 함수는 문자의 끝에 개행 문자를 추가로 전송하는 것을 제외하면 print 함수와 동일하다.


개행 문자는 carriage return (ASCII 13, '\r') new line (ASCII 10, '\n') 또는 이들 두 가지의 조합으로 이루어진다.


  

  size_t print(value, format)

  size_t println(value, format)

     - 매개변수 

            value : 출력 값(char, char 배열, String, 정수, 실수 등)

            format : 출력 형식

    - 반환 값 : 시리얼 포트로 출력된 바이트 수 

                


숫자를 출력하는 경우 print 함수의 두 번째 매개변수 format을 통해 정수의 경우 진법을,

실수의 경우 소수점 이하 자릿수를 지정할 수 있도록 해주면 된다.


void setup()
{
  Serial.begin(9600);         // UART 시리얼 통신 초기화
}

void loop()
{
  // 정수
  Serial.println(78, BIN);    // "1001110"
  Serial.println(78, OCT);    // "116"
  Serial.println(78, DEC);    // "78"
  Serial.println(78, HEX);    // "4E"

  // 실수
  Serial.println(1.23456, 0); // "1"
  Serial.println(1.23456, 2); // "1.23"
  Serial.println(1.23456, 4); // "1.2346"

  // 문자
  Serial.print('C');
  Serial.print('\n');

  // 문자열
  Serial.println("Serial Class Test...");

  while(true);
}



 Ref. 아트멜 스튜디오와 아두이노로 배우는 ATmega328 프로그래밍 (출판사 - 제이펍)


반응형
댓글