arduinoで遊ぼう #1processingと連携する

Post on 29-Jun-2015

1.376 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

ArduinoとProcessingの連携について勉強します。

TRANSCRIPT

#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 リクエスト受付中

top related