読者です 読者をやめる 読者になる 読者になる

もなかアイスの試食品

「とりあえずやってみたい」そんな気持ちが先走りすぎて挫折が多い私のメモ書きみたいなものです.

【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)
みたいに、時間の部分がうまく行かなかったのでやめました
(フォーマット指定子の使い方が悪かったのか・・・でもなんで「?」が入るんでしょ・・・)