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)