아두이노 Arduino

[아두이노]시리얼 통신: 컴퓨터에서 보드로 메세지 주고 받기(Send, Recieve, Serial)

끄적끄적아무거나 2022. 5. 3. 08:38
반응형

 

목차

     

     

     

    Arduino : Serial Communication 으로 PC와 데이터 주고 받기

     

    이번 시간에는 Serial 통신 방법을 사용해서 컴퓨터의 USB 포트를 통해 메세지(Message)를 주고 받는 방법을 알아보겠습니다. 하드웨어 구성은 링크를 참조 하시면 됩니다. (https://scribblinganything.tistory.com/512)

     

    코드는 간단하기 때문에 아래 예제 코드를 통해 설명하겠습니다. 

     

     

    예제 코드>>

    void setup() {
      Serial.begin(9600);
      while (!Serial) {
        ;
      }
    }
    
    void loop() {
      if (Serial.available() !=0 )
      {
        String a_var = Serial.readStringUntil('\n');
        String b_var = "This is Arduino UNO board : ";
        Serial.println(b_var + a_var);
      }
    }

    1~6번 라인: Serial 통신을 연결합니다.

    9번 라인: available 함수를 통해서 버퍼(Buffer)에 값이 들어오면 if 문을 실행합니다.

    11번 라인: 들어오는 문자 (Char, Character)가 개행문자 엔터(Enter) 값인 '\n'이 들어오면 문자열 변수 a_var에 값을 채워서 보냅니다. 

    12번 라인: 보드에서 나오는 메세지에 추가합니다.

    13번 라인: PC로 해당 메세지를 보내 줍니다.

     

     

    결과>>

     

    Hello UNO라고 컴퓨터에서 입력하고 엔터키를 입력하였습니다. 그리고 보드에서 위와 같이 메세지를 보내 주었습니다.

     

     

    참고로 앞서 코드에서 11번 라인을 아래와 같이 작성할 경우 Warning이 발생합니다.

    String a_var = Serial.readStringUntil("\n");

    큰 따움표는 문자열(String)을 받기 위해 사용되기 때문에 위와 같이 작성하면 아래와 같은 에러 메세지가 발생하니 작은 따음표를 사용해서 문자(Character를 받도록 합니다.

    C:\Users\forgo\Documents\Arduino\sketch_may03a\sketch_may03a.ino: In function 'void loop()':
    C:\Users\forgo\Documents\Arduino\sketch_may03a\sketch_may03a.ino:11:47: warning: invalid conversion from 'const char*' to 'char' [-fpermissive]
         String a_var = Serial.readStringUntil("\n");
                                                   ^
    In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29:0,
                     from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:233,
                     from sketch\sketch_may03a.ino.cpp:1:
    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:108:10: note:   initializing argument 1 of 'String Stream::readStringUntil(char)'
       String readStringUntil(char terminator);
              ^~~~~~~~~~~~~~~
    반응형