HOWTO · Arduino

Arduino에서 콘솔에 인쇄하는 방법

이 튜토리얼에서는 Arduino IDE의 시리얼 모니터를 사용하여 콘솔에 텍스트나 변수를 인쇄하는 방법에 대해 설명합니다.

이 페이지의 내용

흔히 시리얼 모니터라고 불리는 콘솔은 Arduino의 동작을 들여다보는 가상 창 역할을 합니다.

이를 통해 마이크로컨트롤러에서 컴퓨터로 정보를 보내고 그 대가로 데이터를 받을 수 있습니다. 이 양방향 통신은 초보자와 숙련된 Arduino 애호가 모두에게 강력한 도구입니다.

이 튜토리얼에서는 Arduino IDE의 시리얼 모니터를 사용하여 콘솔에 텍스트나 변수를 인쇄하는 방법에 대해 설명합니다. Serial.print()와 Serial.println() 사용의 기초부터 시작하여, 이진 데이터 전송을 위해 Serial.write()를 활용하는 것과 같은 고급 전략으로 나아갑니다.

Arduino에서 시리얼 모니터를 사용해 콘솔에 인쇄하기

Arduino IDE에는 하단에 콘솔이 있지만, 거기에는 아무것도 인쇄할 수 없습니다. 콘솔은 코드 검증 및 컴파일 시의 정보를 표시하기 위한 것입니다.

콘솔에는 코드의 메모리 사용량(바이트)과 코드를 검증하거나 업로드할 때의 오류가 표시됩니다. 변수 안에 저장된 값을 인쇄하거나 표시하려면 Arduino IDE의 시리얼 모니터를 사용할 수 있습니다.

시리얼 모니터는 Arduino 보드와 통신할 수 있게 해 주는 Arduino IDE의 내장 도구입니다. Arduino에서 컴퓨터로 데이터를 보내고 컴퓨터에서 Arduino로 데이터를 받는 편리한 방법을 제공합니다.

Arduino IDE 도구 모음의 Tools 탭을 사용하여 시리얼 모니터를 시작할 수 있습니다.

serial monitor in tools tab

Note
시리얼 모니터는 Arduino 보드가 Arduino IDE에 연결되어 있을 때만 실행할 수 있습니다.

시리얼 모니터에서 Serial.print() 및 Serial.println() 함수 사용하기

Serial.begin() 함수를 사용하면 특정 전송 속도(baud rate)로 시리얼 통신을 시작할 수 있습니다. Serial.print()와 Serial.println() 함수를 사용하면 시리얼 모니터에 텍스트와 변수를 인쇄할 수 있습니다.

Serial.print()와 Serial.println()의 구문:

Serial.print(data);
Serial.println(data);

매개변수:

  • data: 시리얼 포트로 보내려는 데이터입니다. 정수, 부동 소수점, 문자, 문자열 등 다양한 유형이 될 수 있습니다.

추가 매개변수(선택 사항):

  • format: 이 매개변수를 사용하면 데이터를 인쇄할 형식을 지정할 수 있습니다. 다음 중 하나가 될 수 있습니다.
    1. DEC: 10진수로 인쇄합니다.
    2. BIN: 2진수로 인쇄합니다.
    3. OCT: 8진수로 인쇄합니다.
    4. HEX: 16진수로 인쇄합니다.

Serial.print()와 Serial.println()의 차이점은 print() 함수는 변수를 인쇄하고 커서가 같은 줄에 머무르는 반면, println() 함수에서는 변수를 인쇄한 후 커서가 다음 줄로 이동한다는 것입니다.

예를 들어, 두 개의 변수를 같은 줄에 인쇄하고 세 번째 변수를 다음 줄에 인쇄하려 한다고 합시다. 이 경우 print() 함수를 사용해 첫 번째 변수를 인쇄한 다음, println() 함수를 사용해 두 번째 변수를 인쇄하고 커서를 다음 줄로 이동시킨 뒤, 다시 print() 함수를 사용해 세 번째 변수를 인쇄합니다.

몇 가지 변수를 정의하고 시리얼 모니터에 인쇄해 보겠습니다. 아래 코드를 참조하세요.

예제:

int My_Int = 10;
unsigned long My_TimeStamp = 1416803716;
const char *My_CharArray = {"This is My_CharArray"};
float My_Float = 3.14159266759;

void setup() {
  Serial.begin(9600);
  Serial.println(My_Int);
  Serial.println(My_TimeStamp);
  Serial.println(My_CharArray);
  Serial.print(My_Float, 5);  // prints to five places right of the decimal
}
void loop() {
  // put your code here to run repeatedly
}

이 코드는 서로 다른 데이터 유형의 변수를 여러 개 선언하는 것으로 시작합니다. setup()에서는 시리얼 통신이 9600의 전송 속도로 설정됩니다. 그런 다음 Serial.print()와 Serial.println()을 사용해 변수의 값을 인쇄합니다.

변수를 시리얼 모니터에 한 번만 인쇄하려면 setup() 함수 안에서 Serial.print() 함수를 사용할 수 있는데, 이는 Arduino 보드의 전원이 켜질 때 한 번만 실행되기 때문입니다.

변수를 계속해서 인쇄하려면 loop() 함수 안에서 인쇄해야 하는데, 이는 그 안의 코드가 Arduino가 켜져 있는 동안 반복 실행되기 때문입니다. 시리얼 모니터를 사용하면 모든 데이터 유형의 변수를 인쇄할 수 있습니다.

출력:

10
1416803716
This is My_CharArray
3.14159

Serial.print() 함수에서 두 번째 인수를 정의할 수도 있는데(위의 예제 코드와 마찬가지로), 이는 변수의 값을 인쇄하는 형식입니다.

예를 들어, 정수나 long 데이터 유형의 경우, 2진수는 BIN, 10진수는 DEC와 같이 표시하려는 진법을 정의할 수 있습니다. 기본적으로 숫자는 10진수 체계로 표시됩니다.

부동 소수점 숫자의 경우, 시리얼 모니터에 인쇄하려는 숫자의 소수 자릿수를 정의할 수 있습니다. Serial.print() 함수에 대한 자세한 내용은 이 링크를 확인하세요.

Serial.write() 함수를 사용해 이진 데이터를 시리얼 모니터로 보내기

Serial.print() 함수 안의 데이터는 ASCII 표현으로 변환됩니다. 데이터를 바이트 스트림으로 보내려면 Serial.print() 함수 대신 Serial.write() 함수를 사용할 수 있습니다.

Arduino 프로그래밍에서 Serial.write() 함수는 시리얼 연결을 통해 이진 데이터를 보내는 데 사용됩니다. 해석 없이 바이트 또는 바이트 배열을 직접 보낼 수 있게 해 줍니다.

이는 원시 데이터나 제어 코드를 전송해야 할 때 특히 유용합니다.

구문:

Serial.write(data);

매개변수:

  • data: 시리얼 연결을 통해 보내려는 바이트 또는 데이터 배열입니다. 단일 바이트(부호 없는 char) 또는 바이트 배열이 될 수 있습니다.

추가 매개변수(선택 사항):

  • length: 배열에서 보낼 바이트 수입니다. 이 매개변수는 데이터 배열을 보낼 때 사용됩니다.

Serial.write()를 사용하면 콘솔로 이진 데이터를 보낼 수 있습니다. 텍스트가 아닌 데이터를 다룰 때나 이진 통신이 필요한 다른 장치와 인터페이스할 때 유용합니다.

예제:

void loop() {
  byte data[] = {0x48, 0x65, 0x6C, 0x6C, 0x6F};  // ASCII values of "Hello"
  Serial.write(data, sizeof(data));
  delay(1000);
}

이 코드는 'H', 'e', 'l', 'l', 'o'의 ASCII 값을 각 전송 사이에 1초의 지연을 두고 시리얼 모니터로 차례로 보냅니다. 이 코드를 실행하고 시리얼 모니터를 열면 콘솔에 "Hello"가 나타납니다.

결론

결론적으로, 콘솔에 인쇄하는 것은 강력한 디버깅 및 모니터링 도구를 다루는 것과 같습니다. 이 가이드를 통해 기본적인 Serial.print() 및 Serial.println() 함수부터 Serial.write()를 이용한 이진 데이터 전송과 같은 고급 전략까지, 시리얼 모니터를 사용하는 다양한 방법을 살펴보았습니다.

이러한 기술을 이해하고 효과적으로 활용하면 Arduino와 컴퓨터 간에 원활하게 통신할 수 있습니다. 이는 실시간 센서 데이터 모니터링부터 복잡한 코드 로직의 문제 해결에 이르기까지 다양한 가능성을 열어 줍니다.