Arduinoとやり取りするシリアルデータをProcessingで制御すると、例えばマウスやタッチパネル式ディスプレイを使ってArduinoを操作したり、逆にArduino側のセンサーで取得したデータの可視化をリッチにしたりすることができる。

ここではシンプルに、Processingでマウスクリックの状態を取得してArduinoの内蔵LEDを点灯/消灯させる簡単なプログラムを書いてみる。
尚、この例ではArduinoボードはUNOを使い、シリアルポートは/dev/ttyACM0、通信速度は9600bpsとする。
流れとしてはまずArduinoでシリアルポートから受け取ったデータによってLEDに加える電圧を高くしたり(点灯)、低くしたり(消灯)するプログラムを書きArduinoに書き込んでおく。
#define led LED_BUILTIN // 内蔵LED
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT); // LEDを出力用に
}
void loop() {
// シリアルポートからデータを受け取ったら
if (Serial.available() > 0) {
// 受信したデータを読み込む
char data = Serial.read();
// データが'1'ならLED点灯
if (data == '1') {
digitalWrite(led, HIGH);
}
// データが'0'ならLED消灯
if (data == '0') {
digitalWrite(led, LOW);
}
}
}
次にProcessingでマウスの左と右のクリックに応じてシリアルポートにデータを送信するプログラムを書いて実行する。
import processing.serial.*;
Serial Port;
void setup() {
size(300, 300);
Port = new Serial(this, "/dev/ttyACM0", 9600);
}
void draw() {
// マウスの左クリックボタンが押されたらシリアルポートに'1'を送信
if (mousePressed && (mouseButton == LEFT)) {
Port.write('1');
}
// マウスの右クリックボタンが押されたらシリアルポートに'0'を送信
if (mousePressed && (mouseButton == RIGHT)) {
Port.write('0');
}
}
これでマウスを左クリックするとArduinoの内蔵LEDが点灯し、右クリックすると消灯する。
CLIで実行したい場合は以下のようにする。
$ tree .
.
├── arduino
│ └── arduino.ino
└── processing
└── processing.pde
$ arduino --board arduino:avr:uno --port /dev/ttyACM0 --upload arduino/arduino.ino
$ processing-java --sketch=$(pwd)/processing --run
参考サイト
- Arduino (Wikipedia)
- Arduino技術情報 (Qiita)
- Arduino関連情報 (Device Plus)
- Arduino記事一覧 (Think IT)
- Processing (Wikipedia)
- Processing技術情報 (Qiita)
- 【初心者向け】プログラミングの楽しさは全部Processingが教えてくれた【勉強方法】 (cmblog)
- Processing入門!音楽と同期するデジタルアートを作ってみた (TECH::NOTE)
- Processingでゼロから学ぶプログラミング・ビジュアルアート (cocopon.me)
- エレクトロニクス豆知識 (ROHM)