SerialLibraryes:readBytes関数
Serialライブラリ※1のreadBytes関数は、バッファからバイトのグループを読み込み、使用できない場合はnullを読み取ります。
パラメータを持たないバージョンでは、バッファ内のすべてのデータのバイト配列が返されます。
これは効率的ではありませんが、使いやすいです。
byteBufferパラメータを持つバージョンは、メモリと時間効率が向上しています。
バッファ内のデータを取得し、渡されたバイト配列に格納し、読み取られたバイト数のint値を返します。
byteBufferに収まるよりも多くのバイトが使用可能な場合、適合したものだけが読み込まれます。
以下補足です
※1:シリアルライブラリは、一度に1バイトずつ外部デバイスとの間でデータの読み書きを行います。このライブラリは、カスタムマイクロコントローラデバイスと通信し、それらを処理プログラムの入力または出力として使用する柔軟性を備えています。シリアルポートは、多くのPC上に存在し、USB経由でエミュレートできる9ピンI/Oポートです。print関数やprintln関数などの方法でコンソールにデータを送信するときは、コンソールが比較的遅いことに注意してください。高速のリアルタイム出力(60フレーム/秒など)はサポートしていません。
Processingで使用するSerialLibraryes:readBytes関数の使い方は以下の通りです。
Serial.list関数で使用可能なシリアルポートを取得し、printArray関数でその一覧を図2の様に出力します。
new Serial関数で、現在使用している「「0」"COM1"」ポートを「9600bps」のボーレートで開きます。
available関数で同ポートにデータが到着しているのを確認すると、readBytes関数でデータをinBuffer変数に格納し、その内容をprintln関数でシリアルモニターに出力します。
import processing.serial.*;
Serial myPort; // シリアルポート
void setup() {
// 使用可能なすべてのシリアルポートを一覧表示する
printArray(Serial.list());
// 使用しているポートを必要なレートで開きます。
myPort = new Serial(this, Serial.list()[0], 9600);
}
void draw() {
// 配列サイズを予想されるバイト数に展開する
byte inBuffer = new byte[7];
while (myPort.available() > 0) {
inBuffer = myPort.readBytes();
myPort.readBytes(inBuffer);
if (inBuffer != null) {
String myString = new String(inBuffer);
println(myString);
}
}
}