HOWTO · Arduino

Arduino 직렬 인쇄 다중 변수

Serial.print() 및 Serial.println() 함수를 사용하여 직렬 모니터에 변수 값을 표시 할 수 있습니다.

이 페이지의 내용

Arduino Serial Monitor에 여러 변수 값을 표시하려면 Serial.begin()으로 직렬 통신을 초기화하고 Serial.print() 또는 Serial.println()으로 각 값을 전송합니다. Serial.print()를 연속해서 호출하면 현재 줄에 계속 출력되고, Serial.println()은 값을 출력한 뒤 줄바꿈을 합니다. 값을 더 알아보기 쉽게 표시하려면 값 사이에 텍스트를 넣으세요. Serial Monitor의 전송 속도는 Serial.begin()에 지정한 값과 같게 설정해야 합니다.

아래의 전체 예제는 한 줄에 구분자를 넣어 값을 출력하는 방법, 부동 소수점 표시 자릿수 지정, 값을 각각 다른 줄에 출력하는 방법, 그리고 값이 바뀌는 쌍을 보여 줍니다. 간단한 호스트용 셤을 사용하면 같은 소스 코드를 표준 C++로 실행할 수 있습니다. Arduino에서는 보드 코어가 Serial과 delay()를 제공하고, 컴퓨터에서는 셤이 표준 출력에 쓰며 예제를 두 번 반복합니다. 보드에서 사용할 때는 Serial Monitor의 전송 속도를 Serial.begin()에 지정한 값과 맞추세요.

Serial.print()로 여러 값을 한 줄에 출력하기

Serial.print()는 값을 텍스트로 변환해 줄바꿈 없이 출력합니다. 각 항목마다 이 함수를 연달아 호출하고 항목 사이에 구분자를 출력하세요. 예제에서는 온도와 습도 값 사이에 탭("\t")을 넣습니다. 따라서 출력에는 백슬래시와 t라는 두 문자가 아니라 탭 문자가 들어갑니다.

부동 소수점 값은 선택 사항인 두 번째 인수로 소수점 뒤에 표시할 자릿수를 지정할 수 있습니다. 여기서 Serial.print(temperature, 2)는 소수점 아래 두 자리를 표시하도록 지정합니다. 이는 표시 형식만 바꾸며 변수에 저장된 값은 바꾸지 않습니다. 마지막에 Serial.println()을 호출하면 해당 행이 줄바꿈으로 끝납니다. 자릿수 인수는 부동 소수점 형식에 적용되며 정수는 정수 그대로 출력됩니다.

Serial.println()으로 값을 각각 다른 줄에 출력하기

각 값을 새 줄에서 시작하게 하려면 Serial.println(value)를 사용하세요. 값을 출력한 다음 줄바꿈을 하므로 연속해서 호출하면 세로 목록이 됩니다. 예제 스케치에서는 각 레이블에 Serial.print()를 사용하고 그에 해당하는 값에는 Serial.println()을 사용하므로 레이블과 값이 같은 줄에 표시됩니다.

Serial.begin(9600)에 맞춰 Serial Monitor를 9600 baud로 설정하세요. 모니터의 전송 속도가 다르면 스케치가 의도한 값을 보내더라도 수신한 문자가 깨져 보일 수 있습니다. Serial.println()을 호출할 때마다 값 뒤에 줄바꿈이 들어가므로 다음 호출은 새 행에서 시작합니다.

두 함수를 함께 사용해 바뀌는 값의 형식 지정하기

값을 반복해서 읽을 때는 첫 번째 값과 구분자를 Serial.print()로 출력하고, 해당 행의 마지막 값은 Serial.println()으로 출력하세요. 아래 루프는 값 사이에 탭을 넣고 각 쌍 뒤에 줄바꿈을 하면서 값이 바뀌는 쌍을 출력합니다. 다음 반복 전에 습도 값을 증가시키므로 두 번째 값은 항상 첫 번째 값보다 5 큽니다. 보드에서는 루프가 반복되고 행 사이에 잠시 멈춥니다. 호스트용 셤은 값의 변화를 보여 주기 위해 두 번 반복합니다. 위의 같은 줄 출력과 여러 줄 출력 설명은 변수 선언과 직렬 설정을 한곳에 둔 이 전체 예제를 기준으로 합니다.

스케치를 다른 프로그램에서 읽을 행을 출력하도록 수정한다면 항목 순서와 구분자를 일관되게 유지하세요. 둘 중 하나가 바뀌면 해당 프로그램에 영향을 줄 수 있습니다. 호스트용 셤은 출력 형식만 보여 주며 보드나 Serial Monitor를 에뮬레이션하지 않습니다.

예제를 실행하면 호스트용 셤은 표준 출력에 결과를 표시합니다. 보드에서는 Arduino 코어가 같은 Serial 호출과 반복되는 loop()를 제공합니다. 코드 블록의 레이블과 출력 문자열은 원문 보존을 위해 영어로 표시됩니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

#ifndef ARDUINO
#include <iostream>
class HostSerial {
public:
  void begin(unsigned long) {}
  void print(const char* value) { std::cout << value; }
  void print(int value) { std::cout << value; }
  void print(double value, int digits = 2) {
    std::cout.setf(std::ios::fixed);
    std::cout.precision(digits);
    std::cout << value;
    std::cout.unsetf(std::ios::fixed);
  }
  void println(const char* value) { print(value); std::cout << '\n'; }
  void println(int value) { print(value); std::cout << '\n'; }
  void println(double value, int digits = 2) { print(value, digits); std::cout << '\n'; }
};
HostSerial Serial;
void delay(unsigned long) {}
#endif

int humidity = 40;

void setup() {
  Serial.begin(9600);
}

void loop() {
  float temperature = 23.456;

  Serial.print("Temperature: ");
  Serial.print(temperature, 2);
  Serial.print("\t");
  Serial.print("Humidity: ");
  Serial.println(humidity);

  Serial.print("Temperature on its own line: ");
  Serial.println(temperature, 2);
  Serial.print("Humidity on its own line: ");
  Serial.println(humidity);

  int first = humidity;
  int second = humidity + 5;
  Serial.print(first);
  Serial.print("\t");
  Serial.println(second);

  humidity++;
  delay(1000);
}

#ifndef ARDUINO
int main() {
  setup();
  loop();
  loop();
}
#endif
Temperature: 23.46	Humidity: 40
Temperature on its own line: 23.46
Humidity on its own line: 40
40	45
Temperature: 23.46	Humidity: 41
Temperature on its own line: 23.46
Humidity on its own line: 41
41	46