20 シリアルポートを drop-downで選ぶ
ControlP5はGUIライブラリを使い、processing のシリアル通信設定時にシリアルポートを ScrollableList(drop-down)コントロールに表示させ、リストの中から希望するポートを選ぶと設定が完了するスケッチを作成しました。
Processingに新規スケッチを作成し、次のコードを追加します。
ScrollableListが画面に現われ、リストに接続可能のポートが表示されます。
希望項目を選択するとそのポートが接続され、ポートからデータが送られてくると IDE コンソール部にその内容が表示されます。
(このスケッチはデータ送信プログラムを省略してあります)
なお、通信速度は 115200 baudでプログラムされています。他の速度にするには、 int sSpeed = 115200;
の値を書き直してください。
// シリアルポートを選ぶ
import controlP5.*;
import java.util.*;
import processing.serial.*;
int sSpeed = 115200; // シリアル通信速度
ControlP5 cp5;
ScrollableList d1;
Serial myPort = null; // シリアルポート
List<:string> portList;
//int portIndex;
void setup() {
size(300, 200);
cp5 = new ControlP5(this);
PFont myFont = createFont("Verdana",12);
ControlFont cf1 = new ControlFont(myFont);
textFont(myFont);
cp5.setFont(cf1);
portList = Arrays.asList(Serial.list());
//int portIndex = portList.size()-1;
// ScrollableListの設定:( name, x, y, width, height )
d1 = cp5.addScrollableList("dropdown",20,25,220,160)
.setBarHeight(20)
.setItemHeight(20)
.addItems(portList)
//.setValue(portIndex)
;
d1.getCaptionLabel()
.toUpperCase(false)
.getStyle().marginTop = 4;
d1.getValueLabel()
.toUpperCase(false)
.getStyle().marginTop = 4;
}
void draw() {
background(100);
}
void dropdown(int n) {
// 既に接続されていれば、切断して
// 新しい選択項目は、index n で接続する
if ( myPort != null ) myPort.stop();
myPort = new Serial(this, portList.get(n), sSpeed);
}
void serialEvent(Serial port) {
// 受信データがあれば、IDE コンソールに出力
if ( port.available() > 0 ) {
String str = port.readStringUntil('\n');
if ( str != null ) print(str);
}
}
上記スケッチの初期設定は、ポートが非選択の状態です。私の場合最後にコンピュータに接続されたデバイスを利用する場合が多いので、ポートリストの最後の行が初期設定で選択されるようにしています。そのためには、スケッチ内の以下の2行のコメントを外してください。
- //int portIndex;
- //.setValue(portIndex)
また、表示を見やすくするために、フォントも変更しています。
次回は、ControlP5の主要コントロールを使った実用的スケッチのモールス信号解析アプリを紹介します。