간편한 디버깅
아두이노에서는 원하는 변수의 값을 보기위해서 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()안에 써주어야 합니다.
