Arduinoにつないだセンサからの値をパソコンで記録する(7)

Arduinoにつないだセンサからの値をパソコンで記録する(6)の続きです。
取得したデータに、日付と時刻をいれてみましょう。

せっかく取得したデータも、そのままでは謎の数値の羅列です。センサから受け取ったデータに意味を持たせるためにも、取得した時刻を記録しましょう。
(そろそろタイトルにProcessingって入れた方がいいのかな……)

Processingで日付や時刻を取得するには、year()、month()、day()、hour()、minute()、second()という見たまんまの関数を使います。それぞれint型の数値として現在時刻を返す関数なので、それをそのまま使えばいいのですが、見た目よくしたい場合はちょっとだけ工夫する必要があります。

なんでかというと、例えば2012/12/31 23:59:59の時はyear()、month()、day()、hour()、minute()、second()をそれぞれ文字列型に変換してくっつければよいのですが、2013/01/01 00:00:00の時にそのままくっつけると、2013/1/1 0:0:0になってしまって見た目がずれてしまうのです。
まぁそれでもデータとしては間違ってないのですが、全部桁が揃ってると比較もしやすいですし、ここはひとつ桁数を合わせるようにしましょう。

桁を揃えるには、nf()(リンク先英語)を使います。nf(数字,桁数)で数字が桁数に足りないときに0を左側に付け加えてくれるので、

nf(hour(),2)

とすれば、hour()の出力0〜23を、00〜23にすることができるわけです。
ですから、年月日時分秒を整形したかったら

datetimestr = nf(year(),2)+"/"+nf(month(),2)+"/"+nf(day(),2)+" "+nf(hour(),2) + ":" + nf(minute(),2) + ":" + nf(second(),2);

とすればOK。これでdatetimestrに年月日時分秒がセットされます。

となると、取得したデータの方も桁数を揃えたくなるんですが、桁数が足りないときに0ではなくて空白で埋めるのをProcessingだけで済ませる方法が見つけられませんでした。しょうがないのでJavaのメソッドを使って

tempstr = String.format("% 4.1f,% 4.1f",tempdata[0],tempdata[1]) ;

としたらうまくいきました。
だったらnf()を使わず、初めから全部String.format()を使えばいいじゃんという気持ちに……。(こういうのProcessingでやるのはめずらしいんですかね。そうですね。)
ともあれここでポイントになるのは、%と4の間にある空白です。ここに空白を入れることによって、桁数が足りないときは数値の左側に空白が入ります。4は全部の文字数(小数点も1つと数えます)、.1は小数点以下は1桁だけ表示するの意味です。fは浮動小数点の意味です。

今回のスケッチまとめです。

import processing.serial.*;
Serial myPort;  // myPortのところは好きな名前でOK
String datastr;  // datastrという名前の文字列型変数を宣言(この記事の下の方で出てきます)

void setup()
{
  println(Serial.list());  // 使えるポート一覧
  myPort = new Serial(this, Serial.list()[0], 9600); // myPortを最初のシリアルポート、9600bpsに設定
  myPort.clear();
}

void draw() {
  if ( myPort.available() > 0) {
    delay(100);
    datastr = myPort.readString();
    int[] tempdata = int(split(datastr, ','));
    String datetimestr = nf(year(),2)+"/"+nf(month(),2)+"/"+nf(day(),2)+" "+nf(hour(),2) + ":" + nf(minute(),2) + ":" + nf(second(),2);
    String tempstr = String.format("% 4.1f,% 4.1f",tempdata[0],tempdata[1]) ;
  }
}

[連載リンク]
Arduinoにつないだセンサからの値をパソコンで記録する(1)
Arduinoにつないだセンサからの値をパソコンで記録する(2)
Arduinoにつないだセンサからの値をパソコンで記録する(3)
Arduinoにつないだセンサからの値をパソコンで記録する(4)
Arduinoにつないだセンサからの値をパソコンで記録する(5)
Arduinoにつないだセンサからの値をパソコンで記録する(6)
Arduinoにつないだセンサからの値をパソコンで記録する(7) この記事です
Arduinoにつないだセンサからの値をパソコンで記録する(8)

Making Things See ―KinectとProcessingではじめる3Dプログラミング (Make: PROJECTS)
Greg Borenstein
オライリージャパン
売り上げランキング: 14,615
Access to Materials -デザイン/アート/建築のためのマテリアルコンピューティング入門
脇田 玲
ビー・エヌ・エヌ新社
売り上げランキング: 191,203
カテゴリー: ソースコード, 電子工作, Mac, Windows タグ: , , パーマリンク

Arduinoにつないだセンサからの値をパソコンで記録する(7) への7件のフィードバック

  1. ピンバック: Arduinoにつないだセンサからの値をパソコンで記録する(4) | Ukkari blog

  2. ピンバック: Arduinoにつないだセンサからの値をパソコンで記録する(6) | Ukkari blog

  3. ピンバック: Arduinoにつないだセンサからの値をパソコンで記録する(5) | Ukkari blog

  4. ピンバック: Arduinoにつないだセンサからの値をパソコンで記録する(3) | Ukkari blog

  5. ピンバック: Arduinoにつないだセンサからの値をパソコンで記録する(2) | Ukkari blog

  6. ピンバック: Arduinoにつないだセンサからの値をパソコンで記録する(1) | Ukkari blog

  7. ピンバック: Arduinoにつないだセンサからの値をパソコンで記録する(8) | Ukkari blog

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中