openFrameworks와 Arduino를 연계

ofSerial을 사용하여 직렬 통신을 통해 openFrameworks와 Arduino를 연결하는 방법에 대해 설명합니다.

하기 서적을 참고로 했습니다.

はじめてのopenFrameworks―「クリエイティブ・コーディング」のための「C++」用フレームワーク! (I・O BOOKS)

최초의 openFrameworks - "크리에이티브 코딩"을위한 "C ++"용 프레임 워크! (I · O BOOKS)
이즈모토 유키 공학사 판매 순위 : 799,616

Amazon.co.jp에서 ​​자세히 보기


# 위의 책은 엄격한 리뷰가 붙어 있으며, 책은 얇고 멋진 느낌도 없지만 원래 국내에 2 종류밖에 없는 oF 전문서 중 하나이며 Arduino, Wii 리모컨, Kinect 등 와의 디바이스와의 제휴 방법도 실려 있어, 참고가 되는 부분도 있으므로, 의외로 추천입니다.

Arduino 측면



회로를 짜다





택트 스위치의 한쪽을 GND에, 다른 한쪽을 디지털 핀의 2번에 꽂고 있습니다.

코드



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로부터,

[도구] -> [시리얼 포트]

에서 확인할 수 있습니다. 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 스위치를 누르면 직렬 통신으로 전송 된 정보가 표시됩니다.
  • 좋은 웹페이지 즐겨찾기