해당 게시물에서는 VS Code PlatformIO를 사용합니다. 참고바랍니다.
안녕하세요 데브구일입니다!
이번에는 Serial을 통해 입력 받고 그대로 출력하는 에코 형태의 코드를 구현해보겠습니다.
다음과 같이 코드를 작성하도록 하겠습니다 :D
#include <Arduino.h> // PlatformIO를 사용하시는게 아니라면 이 라인은 지워주세요!
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
Serial.write(Serial.read());
}
}
새로운 함수 Serial.available()가 나왔습니다!
Serial.available()의 경우 Serial로 데이터 입력이 있는 경우 1의 반환값을 돌려주게됩니다.
그러니 if 문을 통해서 Serial.available()이 1의 반환값을 돌려준다면, 데이터가 들어왔다는 뜻이 되겠지요?
데이터가 들어오면 Serial.read()를 통해 데이터를 읽습니다.
Serial.read()의 경우 1byte의 데이터를 읽고, 읽은 데이터를 반환하게됩니다.
그리고 반환된 데이터를 그대로 Serial.write()를 통해서 출력합니다.
그리고 혹시 다른점을 찾으신 분이 계실 수도 있을 것 같은데요!
이전에는 Serial.println()를 사용하여 출력하였지만, 이번엔 Serial.write()를 사용하였습니다.
코드를 업로드하고 나서 데이터를 입력하면 입력한 데이터가 그대로 출력됩니다!
저는 coolterm을 사용해서 Hello를 입력해보았습니다!
순서를 간단히 정리 해보자면 다음과 같습니다.
데이터를 전송하는 순간!
Serial 입력 감지(available) -> Serial 데이터 읽기(read) -> 읽은 데이터 그대로 출력(write)
위와 같은 과정을 거치게됩니다
그리고 print()와 write()의 차이점은 아래 포스팅을 확인해주시면 되겠습니다!
print()와 write()는 상황에 따라 맞춰가며 사용하시면 됩니다.
그리고 Serial과 관련된 특수한 함수가 있습니다.
바로 SerialEvent() 인데요!
우선 아래 코드를 업로드하고 함수에 대해 알아보겠습니다!
#include <Arduino.h> // PlatformIO를 사용하시는게 아니라면 이 라인은 지워주세요!
void setup() {
Serial.begin(9600);
}
void loop() {
}
void serialEvent() {
Serial.write(Serial.read());
}
위 코드를 보시면 loop()에는 아무런 기능도 넣지 않았고, 대신 serialEvent()안에 기능을 넣어 추가하였습니다.
기존에는 loop()에서 Serial.available()를 통해서 데이터를 감지하였는데요!
serialEvent()는 데이터가 감지 되었을때 자동으로 호출되는 함수입니다!
그렇기 때문에 따로 available()를 사용하지 않아도 데이터를 감지할 수 있으며,
별도의 처리없이 serialEvent()를 생성하고 기능만 구현하면 사용이 가능합니다!
업로드하시고 이전과 동일하게 사용해보시면 동일한 기능이 구현되는 것을 확인하실 수 있습니다!
하지만 이 코드의 경우 지원이 안되는 보드들이 있으니 아두이노 공식 레퍼런스 문서를 참고하시기 바랍니다!
이번 포스팅은 여기서 마치도록 하겠습니다.
감사합니다 :D
'Arduino' 카테고리의 다른 글
[PlatformIO] 아두이노 PWM 사용하기 analogWrite() (0) | 2022.05.17 |
---|---|
[PlatformIO] 아두이노 가변저항 사용해보기 analogRead() (0) | 2022.05.16 |
[PlatformIO] 아두이노 Serial print()와 write() (0) | 2022.05.11 |
[PlatformIO] 아두이노 Serial 출력하기 (0) | 2022.05.03 |
[PlatformIO] 아두이노 Switch 구현하기 digitalRead() (Pull up 스위치) (0) | 2022.04.24 |