간편한 디버깅

아두이노에서는 원하는 변수의 값을 보기위해서 Serial Monitor를 사용해야 합니다. 보통 변수와 그 값을 보기위해서는 다음과 같이 두줄로 작성해야 합니다.

int value = 10;
Serial.print("값은 ");
Serial.println(value);

debug라는 명령으로 간단하게 변수의 이름과 변수의 내용을 보실 수 있도록 만든 소스입니다.

#define debug(str,x) Serial.print(str); Serial.print(":"); Serial.print(x); Serial.print("  ")
 
// 사용법
 
  debug("tempi",tempi);
 

사용예입니다.

#include "cfManagedBase.h"
 
#define debug(str,x) Serial.print(str); Serial.print(":"); Serial.println(x)
 
uint16_t tempi;
 
void user_setup()
{
  Serial.begin(115200);
}
 
void loop() {
  debug("tempi",tempi);
  delay(500);
}
 
void logic_proc()
{
  if (rTrig(X00,0)) tempi++; // X[0]가 0에서 1로 바뀌는 시점에 단 한번만 tempi++ (증가)를 수행합니다.
  Y00 = X00;
}

개발이 끝나고 제품을 출시하는 상황에서는 debug문을 모두 지워야하는 상황이 생깁니다. 그럴때는 간단하게 #define 문을 이렇게 바꾸세요.

#define debug(str,x) 

즉, debug명령을 무시하고 컴파일하도록 하는 것입니다.

DEBUG 온 오프

debug를 자주 On/Off 해야하는 상황이라면 이렇게 코딩을 하세요. debug명령도 두개로 구분해 놓았습니다.

  • debug : 줄바꿈없는 debug 명령입니다. 옆으로 길게 값을 나열시킬 수 있습니다.
  • debugln : 줄바꿈이 있는 debug명령입니다.
#define DEBUG 1
 
#if DEBUG == 1
#define debug(str,x) Serial.print(str); Serial.print(":"); Serial.print(x); Serial.print("   ")
#define debugln(str,x) Serial.print(str); Serial.print(":"); Serial.println(x)
#else
#define debug(str,x)
#define debugln(str,x)
#endif

맨위에 DEBUG 정의를 0으로 하면 모든 debug명령은 번역하지 않고, 시리얼 모니터에 보이지 않습니다. DEBUG정의를 1로 하면 다시 보실 수 있습니다.

첨언하자면, Arduino에서는 PLC의 레더모니터링 처럼 실시간으로 변수상태를 볼 수 있는 기능이 없습니다. 당신이 보고싶은 값은 직접 시리얼 모니터에 표시하도록 해주는 수고가 필요합니다. debug명령은 반드시 loop()안에 써주어야 합니다.

Modular FADUINO