Arduino で printf() を使いたい †という話を目にしたので,ちょろりと書いてみた. コード †以下のコードを sketch の void setup() の前にコピペするだけです. size_t devprintf ( Print *dev, const char *fmt, ... ) { va_list ap; char buf[80]; va_start ( ap, fmt ); vsnprintf ( buf, sizeof(buf), fmt, ap ); va_end ( ap ); return dev->print ( buf ); } 長さも長さなので,著作権うんぬんは特に主張しません. 改変・再配布は自由にどうぞ. 使用例 †シリアル出力と LCD に秒数を表示し続けるプログラムです. #include <LiquidCrystal.h> size_t devprintf ( Print *dev, const char *fmt, ... ) { va_list ap; char buf[80]; va_start ( ap, fmt ); vsnprintf ( buf, sizeof(buf), fmt, ap ); va_end ( ap ); return dev->print ( buf ); } LiquidCrystal lcd ( 2, 3, 4, 5, 6, 7, 8 ); void setup() { Serial.begin(115200); lcd.begin ( 16, 2 ); } void loop() { unsigned s = millis() / 1000; devprintf ( &Serial, "%05u sec.\r\n", s ); lcd.setCursor ( 0, 0 ); devprintf ( &lcd, "%05u sec.", s ); delay ( 1000 ); } 使っているのは loop() 内に2箇所あって devprintf ( &Serial, "%05u sec.\r\n", s ); と devprintf ( &lcd, "%05u sec.", s ); です. シリアル出力だけでなくて,標準ライブラリを使った LCD 出力にも使えます. ちなみに LCD は,こんなものを使いました. 実行すると,シリアルからはこんな↓出力が LCD にはこんな↓出力が表示されます. |