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

いろいろあってうっかり放置していました。続きいきます。
念のため、前回の記事はこちらに。

Arduinoからカンマで区切ったデータを送ってきていることになっているので、例えばシリアルモニタで見るとこんな感じのデータが送られてきていると思います。

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

意味のないデータ列だと理解にしにくいということだったら、例えば室内と室外の気温ということにしましょう。ずいぶん暑いですね。
前回ここまで書きました。

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();
}

前回書いたソースリストのsetup()内に

  myPort.clear();

というのを付け加えました。
これでシリアルポートの受信バッファ(受信したデータを溜めておくところ)をクリアできます。説明は、Processingのリファレンスでいうことここ(英語)です。

size(x,y); がないんじゃないの? という疑問を持つ人もいるかもしれません。今回は描画しないので描画領域の設定はいらないのでした。

最初に一度だけやる設定はこれで完了です。あとはArduinoから来るデータをえんえん待って、来たら処理してをぐるぐる繰り返します。Processingで繰り返すには、draw()を使います。

void draw() {
  繰り返したい処理
}

という感じで。Arduinoだとloop()と書いてたところですね。

このdraw()の{と}の中に繰り返したい処理を書いていきます。やることを日本語で書くと
・シリアルポートの受信バッファにデータがあるかどうか調べます。
・受信バッファにデータがあったら、少し待ちます。
・データを受信バッファから読み出して、変数に代入します。
・変数の内容(=受信したデータ)を画面に表示します。
の4つです。まずはこれだけにしておきましょう。

Processingで書くとこうなります。

void draw() {
  if ( myPort.available() > 0) {
    delay(100);
    datastr = myPort.readString();
    println(datastr);
  }
}

うっかり忘れていましたが、void setup()よりさらに前にString datastr; というのを足してあります。datastrという文字列型の変数の宣言です。

delay(100); は0.1秒(100ms)待つ関数 です。なんで待つかというと、受信バッファにデータがちょっとでも入った直後にデータを受信してしまうと、データが途中までしか受信できていないかもしれないからです。適当な時間待つというのはあんまりよい方法ではないのですが、今回はこれで用事が足りるのでよしとしました。本当はデータが揃ったかどうか確認してから先に進むべきでしょう。

myPort.available()は、myPortの受信バッファにあるデータのバイト数を返す関数です。
0より大きいということは、なにかしら受信している状態ということです。

このスケッチを実行してみると、Processingのウィンドウの下の黒いところ(エラーメッセージとかが出るところ)にArduinoから送られてくる文字列が表示されたんじゃないかと思います。

と、今回はこんなところで。次は送られてくるデータを加工してみましょう。

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

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();
    println(datastr);
  }
}

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

ジェネラティブ・アート -Processingによる実践ガイド
Matt Pearson
ビー・エヌ・エヌ新社
売り上げランキング: 4,075
Processingをはじめよう (Make: PROJECTS)
Casey Reas Ben Fry
オライリージャパン
売り上げランキング: 72,750
カテゴリー: ソースコード, 電子工作, Mac, Windows タグ: , , パーマリンク

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

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

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

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