【Arduino】デバッグ用のコードを仕込む
最近、ArdionoのWifiシールドを買ったのですが、
そのWifiシールドのサンプルコードを動かしてみると動かない・・・
どこが悪いんだろうと思っても、サンプル自体結構ソースコードが長い(追うヤル気が無い)
デバッグ出力があったので、有効にしてみても
結局メッセージの出力だけなので、ソースの何行目のメッセージなのかわからなかったり・・・
今、ソースコードの、どのファイルの何行目を処理してるって知りたいので
Arduinoを使っている皆さんどうしていらっしゃるでしょ?って思って調べてみても、
それらしいイイ感じの記事が見つからない
なので、C/C++でよく使うようなデバッグ用のマクロを作成しました。
#ifndef __DEBUG_H__ #define __DEBUG_H__ #define DEBUG #ifdef DEBUG #define BeginDebugPrint() Serial.begin( 9600 ) #define DebugPrint( message )\ {\ char __buff__[ 512 ];\ sprintf( __buff__\ , "%s (Func:%s, File:%s, Line:%d)"\ , message\ , __func__\ , __FILE__\ , __LINE__ );\ Serial.println( __buff__ );\ Serial.flush();\ } #else #define BeginDebugPrint() #define DebugPrint( message ) #endif // DEBUG #endif // __DEBUG_H__
※使い方
Arduino IDEのファイル「●●.ino」と同じ場所に「Debug.h」を配置
マクロを使用するファイルは、「Debug.h」をインクルードする。
#include "Debug.h" void setup( void ) { BeginDebugPrint(); DebugPrint( "Initialize..." ); } void loop( void ) { delay( 3000 ); DebugPrint( "Debug Print 1" ); }
Arduino IDEのシリアルモニタで覗いたときに、以下の様な出力になります。(ちょっとモッサリ)
↓
Initialize... (Func:setup, File:Sample.ino, Line:7)
Debug Print 1 (Func:loop, File:Sample.ino, Line:13)
Debug Print 1 (Func:loop, File:Sample.ino, Line:13)
Debug Print 1 (Func:loop, File:Sample.ino, Line:13)
Debug Print 1 (Func:loop, File:Sample.ino, Line:13)
Debug Print 1 (Func:loop, File:Sample.ino, Line:13)
Debug Print 1 (Func:loop, File:Sample.ino, Line:13)
デバッグ出力しない時は「Debug.h」の「#define DEBUG」をコメントアウトすればよろし
本当は処理がデバッグ出力された時間も表示したかったのですが、
[?] Debug Print 1 (Func:loop, File:Sample.ino, Line:13)
みたいに、時間の部分がうまく行かなかったのでやめました
(フォーマット指定子の使い方が悪かったのか・・・でもなんで「?」が入るんでしょ・・・)