// education

아두이노 시리얼 통신 (UART 및 데이터 모니터링)

**시리얼 통신(Serial Communication)**은 아두이노와 PC, 센서, 또는 다른 마이크로컨트롤러 보드 간에 한 번에 1비트씩 순차적으로 데이터를 주고받는 표준 직렬 통신입니다.


1. 시리얼 통신 용어 사전 (Glossary)


2. 시리얼 데이터 수신 및 명령어 처리

/*
  시리얼 모니터에 'ON' 또는 'OFF' 텍스트 명령어를 입력 받아 LED 제어
*/

void setup() {
  Serial.begin(9600); // 통신 속도 9600bps 초기화
  pinMode(13, OUTPUT);
  Serial.println("명령어를 입력하세요: ON 또는 OFF");
}

void loop() {
  // 시리얼 버퍼에 데이터가 들어와 있는지 확인
  if (Serial.available() > 0) {
    String inputStr = Serial.readStringUntil('
'); // 줄바꿈(
)을 만날 때까지 문자열 읽기
    inputStr.trim(); // 양쪽 공백 및 개행문자 제거

    if (inputStr == "ON") {
      digitalWrite(13, HIGH);
      Serial.println("-> 결과: LED가 켜졌습니다.");
    } else if (inputStr == "OFF") {
      digitalWrite(13, LOW);
      Serial.println("-> 결과: LED가 꺼졌습니다.");
    } else {
      Serial.print("-> 알 수 없는 명령어: ");
      Serial.println(inputStr);
    }
  }
}

3. 시리얼 플로터 (Serial Plotter) 그래픽 활용

아두이노 IDE [툴] $ ightarrow$ [시리얼 플로터]를 이용하면 여러 센서 수치를 동시에 그래프 파형으로 비교할 수 있습니다.

void loop() {
  int val1 = analogRead(A0); // 조도 센서 수치
  int val2 = analogRead(A1); // 가변저항 수치
  
  // 라벨과 함께 출력하면 범례가 표시됨
  Serial.print("CDS:"); Serial.print(val1);
  Serial.print(",");
  Serial.print("POT:"); Serial.println(val2);
  delay(40);
}

4. 자주 묻는 질문 (Q&A)

Q. Serial.print()Serial.write()의 차이는 무엇인가요? A. Serial.print(65)는 숫자 65를 사람의 눈에 보이는 아스키 문자인 **"65" (2바이트 텍스트)**로 변환하여 보내지만, Serial.write(65)는 숫자 65의 아스키 바이너리 값 자체인 **'A' (1바이트 이진 데이터)**를 직접 보냅니다.

← 이전아두이노 입력 이해하기 (디지털 입력과 아날로그 입력) 다음 →디스플레이 활용 (Char LCD 및 OLED)