Quantcast
Channel: その後のその後
Viewing all articles
Browse latest Browse all 314

[openFrameworks][Objective-C][Mac][電子工作][ガジェット]openFrameworksとArduinoを連携させる

$
0
0

タイトルの通り、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のスイッチを押すと、シリアル通信で送られてきた情報が表示される


Viewing all articles
Browse latest Browse all 314

Trending Articles