ProcessingとArduinoを連携させ、信号の送受信を行う方法として、今回はシリアル通信を使います。
具体的には、PC上で動作するProcessingから、USBケーブルを介して、シリアル通信方式でArduinoへデータを送信します。Arduino側では、USBケーブルを介して、送信されたデータを受信し、処理を行います。
今回は、ProcessingからArduinoへ信号を伝える部分を作成します。
Processingで、シリアル通信を行うためには、手順が決まっています。
さっそく、実際のスケッチを見てみましょう。
太字の部分が今回、シリアル通信を行うために追加したスケッチです。
import processing.serial.*;
Serial myPort;
PImage Onimg;
PImage Offimg;
int StatusFlag;
void setup() {
size(200, 100);
Onimg = loadImage("On.png");
Offimg = loadImage("Off.png");
image(Onimg,50, 20);
StatusFlag=0;
myPort=new Serial(this,Serial.list()[0],9600);
}
void draw() {
}
void mouseClicked(){
if(mouseX>=50 && mouseX<=130 && mouseY>=20 && mouseY<=60){
if(StatusFlag==0){
//Onの処理を実行
println ("Mouse Click On!!");
image(Offimg,50, 20);
StatusFlag=1;
myPort.write(1);
}else{
//Offの処理を実行
println ("Mouse Click Off!!");
image(Onimg,50, 20);
StatusFlag=0;
myPort.write(0);
}
}
}
解説です。
import processing.serial.*;
Processingでシリアル通信を行うための、ライブラリを読み込んでいます。
Processingのエディターの[Sketch]-[Import Library]-[serial]を選択すると、
エディター画面に一行追加されます。
Serial myPort;
myPortというシリアルで使用する変数(オブジェクト)を宣言しています。
myPort=new Serial(this,Serial.list()[0],9600);
setup()内にある、この命令は、宣言したmyPortをシリアル通信で使用するためのパラメータを指定しています。
Serial.list()[0]は、PCに接続されているArduinoの一つ目をmyPortで使用することをしています。
9600は、ご想像のとおり、シリアル通信の速度を指定います。
ここまでが、シリアル通信をするための準備です。
マウスイベント内では、それぞれ、シリアル通信としてデータ送信の命令を書いています。
myPort.write(1);
この書き方で、1 をデータ送信します。
myPort.write(0);
この書き方では、0 をデータ送信します。
上記のようのに、シリアル通信の決まりは、
1.ライブラリーの追加
2.シリアルポートで使用するオブジェクトの宣言
3.Arduinoとの通信パラメータの指定
これで、あとは、自由に使用できます。
意外と簡単と感じた方が多いと思います。今回はここまでです。
次回は、Arduino側の処理に進みます。
・Processingをはじめよう
・Processing アニメーション
・楽しく学ぶコンピュテーショナルデザイン
Processingプログラミング入門―Javaベースのオープンソース統合開発環境
posted at 2012.11.16
田原 淳一郎
カットシステム
売り上げランキング: 292836
カットシステム
売り上げランキング: 292836
image(Onimg,50, 20);
返信削除のところでエラーが発生します。
匿名さん
削除こんにちは、投稿ありがとうございます。どんなエラーメッセージですか?
下記の最小限のスケッチで、試してみるのはいかがでしょう。
On.png と Off.png ファイルは、スケッチ(sample.pde)と同じ階層にdataフォルダを作成し、そのフォルダ内に保管して下さい。
¥sample.pde
¥data¥On.png
¥data¥Off.png
ファイル名 : sample.pde
PImage Onimg;
PImage Offimg;
int StatusFlag;
void setup() {
size(200, 100);
Onimg = loadImage("On.png");
Offimg = loadImage("Off.png");
image(Onimg,50, 20);
StatusFlag=0;
}
void draw() {
}