#1 ArduinoとProcessingを連携する Arduinoで遊ぼう 2014.10.09 Created by Sannomiy Yasunori
#1 ArduinoとProcessingを連携するArduinoで遊ぼう
2014.10.09Created by Sannomiy Yasunori
今回やること
センサ値 表現センサ値
Arduino Processing
今回やること
ArduinoとProcessingの連携を行います
センサ値 表現センサ値
Arduino Processing
今回はシリアル通信を使った同期を行います
データデータ
シリアル通信
作戦
Arduino Processing
USBケーブル上でデータを送受信してるような イメージで良いと思います
シリアル通信とは?
データUSBケーブルArduino Processing
同時にデータを送るとデータが衝突します
注意!
USBケーブルArduino Processingデータ データ
データは一歩通行。交互に送るようにしましょう。
シリアル通信とは?
データArduino Processing
Arduino Processingデータ
ASTEP1.
P通信開始の合図
A P
A P
A P
STEP2.
STEP3.
STEP4.
USBデータを空にする
センサの値
USBデータを空にする
ProcessingがArduino送信するように合図を送ります
合図を受信したら、シリアルポート上 のデータを空にします
その後、センサ値を送信します
センサ値を受信したら、データを空にします
アルゴリズムの解説
ASTEP1.
P通信開始の合図
A P
A P
A P
STEP2.
STEP3.
STEP4.
USBデータを空にする
センサの値
USBデータを空にする
ProcessingがArduinoにセンサ値を 送信するように合図を送ります
合図を受信したら、シリアルポート上 のデータを空にします
その後、センサ値を送信します
センサ値を受信したら、データを空にします
ASTEP1.
P通信開始の合図
A P
A P
A P
STEP2.
STEP3.
STEP4.
USBデータを空にする
センサの値
USBデータを空にする
ProcessingがArduino送信するように合図を送ります
合図を受信したら、シリアルポート上 のデータを空にします
その後、センサ値を送信します
センサ値を受信したら、データを空にします
ASTEP1.
P通信開始の合図
A P
A P
A P
STEP2.
STEP3.
STEP4.
USBデータを空にする
センサの値
USBデータを空にする
ProcessingがArduino送信するように合図を送ります
合図を受信したら、シリアルポート上 のデータを空にします
その後、センサ値を送信します
センサ値を受信したら、データを空にします
ASTEP1.
P通信開始の合図
A P
A P
A P
STEP2.
STEP3.
STEP4.
USBデータを空にする
センサの値
USBケーブル上の データを空にする
ProcessingがArduino送信するように合図を送ります
合図を受信したら、シリアルポート上 のデータを空にします
その後、センサ値を送信します
センサ値を受信したら、データを 空にします
ASTEP1.
P通信開始の合図
A P
A P
A P
STEP2.
STEP3.
STEP4.
USBデータを空にする
センサの値
USBデータを空にする
ProcessingがArduinoにセンサ値を 送信するように合図を送ります
合図を受信したら、シリアルポート上 のデータを空にします
その後、センサ値を送信します
センサ値を受信したら、データを空にします
以下繰り返し。これを超高速にやって同期通信をするよ。
ソースコード解説あまり長くないから頑張れ!
int val = 0; // 送信したい値 !void setup(){ Serial.begin(9600); // シリアル通信を開始する } !void loop(){ if(Serial.available() > 0){ // データが到着していれば Serial.read(); // シリアルポート上のデータを空にする Serial.write(val++); // シリアルポートにデータを送信 } delay(100); }
①
②③④
覚えてほしい4つのメソッド
Serial.begin(9600); シリアル通信を開始するよっていう命令。 9600は通信速度。基本いじらなくてよい。 void setup()に記述しよう。
その1
覚えてほしい4つのメソッド
Serial.available() シリアルポート上に何バイトのデータが到着して いるかを調べる命令。 if(Serial.available()>0) で1バイト以上のデータが 到着したかを判断できる。 合図がきたかどうかを判断するために使う。
その2
覚えてほしい4つのメソッド
Serial.read(); シリアルポート上にあるデータを取得して 空にする命令。 シリアルポート上のデータを空にするために使う。
その3
覚えてほしい4つのメソッド
Serial.write(値) 引数の値をシリアルポート上に送信する命令。 数値を送信するときは1バイトづつ送信する。 データを送信するために使う。
0~255までの数って意味だぜ
int val = 0; // 送信したい値 !void setup(){ Serial.begin(9600); // シリアル通信を開始する } !void loop(){ if(Serial.available() > 0){ // データが到着していれば Serial.read(); // シリアルポート上のデータを空にする Serial.write(val++); // シリアルポートにデータを送信 } delay(100); }
①
②③④
import processing.serial.*; // ライブラリのインポート Serial myPort; int val=0; !void setup(){ size(300,400); myPort = new Serial(this, "/dev/tty.usbmodem1411", 9600); } void draw(){ if(keyPressed) if(key=='s') myPort.write(255); background(255); fill(0); text(val, 10,20); } void serialEvent(Serial p){ if(myPort.available()>0){ val = myPort.read(); myPort.write(255); } }
①
②
③
④
Processingでのポイント
import processing.serial.*; Serial myPort;
シリアル通信をするライブラリがあるので インポートする。 シリアル通信系の命令を使えるようにする ために必要な記述。コピペでいいよ。
インスタンス名は 何でも良いよ
その1
Processingでのポイント
myPort = new Serial(this, "/dev/tty.usbmodem1411", 9600);
シリアル通信をするための設定。 ポートの名前が人によって違うため、 各自で名前を確認する必要があります。
Macの例
myPort = new Serial(this, "COM4", 9600);Windowsの例
その2
Processingでのポイント
if(keyPressed) if(key=='s') myPort.write(255);
書き方は任せる。最初の合図を送る必要があります。
1バイトのデータならなんでもいいよ
Processingでのポイント
void serialEvent(Serial p){ }
シリアルイベントを管理する関数。 シリアル通信のための命令はこの関数の 中に記述する。
import processing.serial.*; // ライブラリのインポート Serial myPort; int val=0; !void setup(){ size(300,400); myPort = new Serial(this, "/dev/tty.usbmodem1411", 9600); } void draw(){ if(keyPressed) if(key=='s') myPort.write(255); background(255); fill(0); text(val, 10,20); } void serialEvent(Serial p){ if(myPort.available()>0){ val = myPort.read(); myPort.write(255); } }
①
②
③
④
A P通信開始の合図
A P
A P
A P
USBケーブル上の データを空にする
センサの値
USBケーブル上の データを空にする
Serial.write(255);
if(Serial.available()>0){ !
Serial.Read();!
Serial.Write(センサ値); }
int val = Serial.Read();
まとめ
1.Processingから何かデータを送信
2.Arduino側に1バイト以上のデータがきたら
4.シリアルポート上のデータを空にして
5.データを送信する
6.受信したデータを変数に保存し、 シリアルポートを空にする
if(Serial.available()>0){
#1 ArduinoとProcessingを連携するArduinoで遊ぼう
終わり
#2 Arduinoでフォトリフレクタを使おうArduinoで遊ぼう
次回予告?
#3 リクエスト受付中