? 道具
1) Processing 3 https://processing.org
2) FloatTable.pde (浮動小数点ライブラリー) Visualizing Data by Ben Fly.
ビジュアライジング・データ――Processingによる情報視覚化手法
https://www.oreilly.co.jp/books/9784873113784/
ポイント1: 座標軸とmap関数変換
関数map(a,b,c,d,e)
aを範囲b-cから別の範囲d-eへ変換する。
ポイント2: データファイルからデータ取り込み
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
FloatTable data; 浮動小数点表クラスdata宣言 void setup() { セットアップ関数 …….. データファイル指定 data = new FloatTable("data.tsv"); …….. } データ描画関数 void drawDataPoints(int col) { データ行数を取得 int rowCount = data.getRowCount(); データ行数繰り返し for (int row = 0; row < rowCount; row++) { 指定行指定列値をvalue_x, values_yへ取り込む if (data.isValid(row, col_x) & data.isValid(row, col_x)) { float value_x = data.getFloat(row, col_x); float value_y = data.getFloat(row, col_y); x_value, y_valueを座標変換 float x = map(value_x, xdataMin, xdataMax, plotX1, plotX2); float y = map(value_y, ydataMin, ydataMax, plotY2, plotY1); x, y座標値にデータを描画 point(x, y); } |
ポイント3: シリアル通信データ取り込み
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
シリアル通信ライブラリインポート import processing.serial.*; Serial myPort; シリアルポート変数設定 void setup() { ………….. println(Serial.list()); 利用可能シリアルポートをリスト myPort = new Serial(this, “com1”, 19200); シリアルポートをセット myPort.clear(); String TitleData = "Time" + TAB + "SVV" + TAB + "SVI"+ TAB + "CI"; ファイルタイトル行セット output.println(TitleData); タイトル行書き込み output.flush(); バッファーフラッシュ myPort.bufferUntil('N'); バッファーの読み込み端末子 ……………….. } |
ポイント4: データの切り出し
1 2 3 4 5 6 7 8 9 10 |
N2759-0183-81C08.4c04.6b09.0S104s057z110L19f23.b N2759-0183-81 C08.4 : APCO = 8.4 c04.6 : APCI = 4.6 b09.0 : SVV = 9.0 S104 : SV = 104 s057 : SVI = 57 z110 : Z = 110 L19 : L = 19 f23.b : f = 23 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
void serialEvent(Serial p) { シリアル通信関数 inString = p.readString(); 読込みデータバッファセット if (inString != null) { p.write(inString); データ読込み write(); } 以下読み込みデータを配列へ取り込む m1 = match(inString, "C([0-9]+).([0-9]+)"); m2 = match(inString, "c([0-9]+).([0-9]+)"); m3 = match(inString, "b([0-9]+).([0-9]+)"); m4 = match(inString, "S([0-9]+)"); m5 = match(inString, "s([0-9]+)"); m6 = match(inString, "V([0-9]+)"); m7 = match(inString, "v([0-9]+)"); m8 = match(inString, "Q([0-9]+)"); m9 = match(inString, "R([0-9]+)"); m10 = match(inString, "r([0-9]+)"); m11 = match(inString, "p([0-9]+).([0-9]+)"); if(m1 != null) { 以下取り込んだデータを整形して、各循環パラメータへ取り込む CO=float(m1[1] + "." + m1[2]); } else { CO=999; } |
ポイント5: データのファイル書き込み
1 2 3 4 5 6 7 8 9 |
PrintWriter output; 書き込み用ファイルセット output = createWriter("data/data_vigileo.tsv"); GotData = time + TAB + SVV + TAB + SVI + TAB + CI; void write() { データ書き込み関数 if (GotData !=null){ output.println(GotData); 読み込みデータをファイルへ書き込む } |