タイトルの通り、openFrameworks と Arduino を連携させる 方法です。ofSerial を使用してシリアル通信で連携させます。
Arduinoの回路
タクトスイッチの片方をGNDへ、もう片方をデジタルピンの2番に挿しています。
Arduino側のコード
Arduinoのコードはこんな感じです。
const int SW = 2; void setup(){ // シリアル通信開始 Serial.begin(9600); // ピンモード pinMode(SW, INPUT_PULLUP); } void loop(){ // スイッチの値を読み取る int value = digitalRead(2); if (value != HIGH) { Serial.println(1); } }
タクトスイッチが押されている間、"1" をシリアル通信で送っています。
openFrameworks側
メンバ変数を追加
int nBytesRead = 0; ofSerial serial; char bytesReadString[4];
セットアップ
void testApp::setup(){ ofBackground(255,255,255); // シリアル通信開始 serial.setup("/dev/tty.usbmodem1411",9600); }
シリアル通信を開始する ofSerial::setup の第1引数にはポート名を指定する必要があるのですが、このポート名は、ArduinoのIDEから、
[Tools] -> [Serial Port]
で確認できます。Arduinoをつないでいるポート名にチェックマークが付いています。
通信データの読み込みと描画
void testApp::update(){ nBytesRead = 0; int nRead = 0; char bytesRead[3]; unsigned char bytesReturned[3]; memset(bytesReturned, 0, 3); memset(bytesReadString, 0, 4); // シリアル通信で受け取ったデータを読み込む while ((nRead = serial.readBytes(bytesReturned, 3)) > 0) { nBytesRead = nRead; }; if (nBytesRead > 0) { memcpy(bytesReadString, bytesReturned, 3); string x = bytesReadString; } } void testApp::draw(){ // 送られてきた文字列を表示 string msg; msg += ofToString(nBytesRead) + " [bytes]" + "\n"; msg += "read: " + ofToString(bytesReadString); ofSetColor(0); ofDrawBitmapString(msg, 100, 100); }
動かしてみる
- モニタ用に Arduino の [Tools] -> [Serial Monitor] を立ち上げておく
- Arduinoのスイッチを押すと、シリアル通信で送られてきた情報が表示される