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

また間が空きましたが続きです。前回はこちら
今回は取得したデータの加工です。

PerlやRuby、Pythonなどのスクリプト言語では、文字列の加工のためのさまざまな関数やメソッドが初めから用意されています。Processingにはそこまで強力ではありませんが、ないと困る程度の関数は用意されているので、それを使ってArduinoから送信されてきた文字列を加工してみましょう。
何度も出てきますが、ArduinoからProcessingに送信されてくる文字列はこんなのです。

27.8,34.6
27.7,34.5
27.4,34.7
27.5,34.3
27.8,34.2
27.6,34.8

小数点付きの数字の次にカンマがあって、また小数点付きの数字がきて、改行します。間に空白やタブなどは入っていません。
まずは、受信した文字列をカンマで切り分けて配列に取り出してみることにします。切り分けるにはsplit()(リンク先英語)を使います。以前のソースで受信した文字列はdatastrに格納しましたから、このように書きましょう。

datastr = myPort.readString();
String[] tempdata = split(datastr, ',');

分割されたデータは文字列型です。今回は数値なので格納するのも数値にしたいですよね。そんなときなこうしましょう。

datastr = myPort.readString();
int[] tempdata = int(split(datastr, ','));

splitをintでくくることにより、分割した結果の文字列を数値に変換して配列に入れることができます。ただ、文字列すべてが数値だったらいいんですが、文字列として残しておきたいところもある場合は、まず分割したデータを文字列として保存しておいて、個別に数値に変換(int())した方がいいかもしれません。その時々でいい方法を選びましょう。
なお、splitのカッコ内の後半にある’,’はデリミタといって区切り記号を指定しています。今回はカンマで区切られたデータだったので、’,’としました。スペース区切りなら’ ‘、タブ区切りなら’\t’ですね。
これでtempdataという配列に受信データの一つ目(カンマの左側)と二つ目(カンマの右側)が入りました。それぞれtempdata[0]とtempdata[1]に入っています。(1と2ではないことに注意しましょう)

今回は使いませんが、splitの逆のこと(デリミタ付きで文字列を連結)をしたい場合はjoin()を使います。ただ連結したいだけなら+記号で連結できますよ。

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

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, ','));
  }
}

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

Access to Materials -デザイン/アート/建築のためのマテリアルコンピューティング入門
脇田 玲
ビー・エヌ・エヌ新社
売り上げランキング: 191,203
Prototyping Lab ―「作りながら考える」ためのArduino実践レシピ (Make:PROJECTS)
小林 茂
オライリージャパン
売り上げランキング: 27,699
カテゴリー: ソースコード, 電子工作, Mac, Windows タグ: , , パーマリンク

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

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

  2. ピンバック: Arduinoにつないだセンサからの値をパソコンで記録する(7) | 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 と連携中