また間が空きましたが続きです。前回はこちら。
今回は取得したデータの加工です。
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)
ビー・エヌ・エヌ新社
売り上げランキング: 191,203
オライリージャパン
売り上げランキング: 27,699



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