ArduinoからopenFrameworksにデータを送る方法を知りたい
大学でarduinoとopenFrameworksを勉強している者です。
arduinoでの操作をopenframeworksに反映する課題が出ているのですが
arduinoでスイッチを押したとき、Serial.write(2);で情報を送り、openframeworksのdraw関数で描いた絵を表示させる。というプログラムを作りたいのですが、arduinoとopenframeworksとの連携が出来ていないようで、arduinoでopenframeworksを制御できません。
エラーメッセージは出ておらず、真っ暗な画面が表示されています。
自分としては、available関数とreadByte関数の使用方法を理解していないことが原因だと思っています。またデータの送受信のバイトについても理解不足だと思います。
プログラミングは苦手で、openframeworksもarduinoも一通り勉強しましたが力不足です。
解決法や理解に繋がる知識のご教授、よろしく願い致します。
発生している問題・エラーメッセージ
発生している問題
arduinoとopneframeworksの連携が出来ていない
該当のソースコード
#Arduino
void setup() { pinMode(0, INPUT); Serial.begin(9600); } void loop() { int value = digitalRead(0); if(value == LOW){ Serial.write(2); } }
#openFrameworks
###include "ofMain.h" class ofApp : public ofBaseApp { public: void setup(); void update(); void draw(); void keyPressed(int key) {}; void keyReleased(int key) {}; void mouseMoved(int x, int y) {}; void mouseDragged(int x, int y, int button) {}; void mousePressed(int x, int y, int button) {}; void mouseReleased(int x, int y, int button) {}; void mouseEntered(int x, int y) {}; void mouseExited(int x, int y) {}; void windowResized(int w, int h) {}; void dragEvent(ofDragInfo dragInfo) {}; void gotMessage(ofMessage msg) {}; ofEasyCam cam; ofSerial serial; }; ### #include "ofApp.h" class ofApp : public ofBaseApp { public: void setup(); void update(); void draw(); void keyPressed(int key) {}; void keyReleased(int key) {}; void mouseMoved(int x, int y) {}; void mouseDragged(int x, int y, int button) {}; void mousePressed(int x, int y, int button) {}; void mouseReleased(int x, int y, int button) {}; void mouseEntered(int x, int y) {}; void mouseExited(int x, int y) {}; void windowResized(int w, int h) {}; void dragEvent(ofDragInfo dragInfo) {}; void gotMessage(ofMessage msg) {}; ofEasyCam cam; ofSerial serial; }; ###include "ofApp.h" //-------------------------------------------------------------- void ofApp::setup() { serial.setup("COM3", 9600); ofSetFrameRate(60); ofBackground(0); ofSetWindowTitle("Insta"); ofEnableDepthTest(); ofEnableBlendMode(ofBlendMode::OF_BLENDMODE_ADD); ofNoFill(); ofSetColor(128); } //-------------------------------------------------------------- void ofApp::update() { } //-------------------------------------------------------------- void ofApp::draw() { if (serial.available() > 1) { this->cam.begin(); int data = serial.readByte(); float radius = 300; int deg_span = 1; for (int z = -1200; z <= 300; z += 15) { ofBeginShape(); for (int deg = 0; deg < 360; deg += deg_span) { float x = radius * cos(deg * DEG_TO_RAD); float y = radius * sin(deg * DEG_TO_RAD); float tmp_radius = ofMap(ofNoise(x * 0.005, y * 0.005, z * 0.005 + ofGetFrameNum() * 0.05), 0, 1, 200, 300); x = tmp_radius * cos(deg * DEG_TO_RAD); y = tmp_radius * sin(deg * DEG_TO_RAD); ofPoint point = ofPoint(x, y, z); ofVertex(point); } ofEndShape(true); } this->cam.end(); } }
試したこと
arduinoでは、
if(value == LOW){
Serial.write(2);
}
でスイッチ押してデータを送りました。
openframeworksでは、draw関数内で
if (serial.available() > 1) {
で送られてきた情報が1以上である場合、int data = serial.readByte();を実行し描画する
よう書きました。
補足情報(FW/ツールのバージョンなど)
描画は
https://junkiyoshi.com/2018/02/
からお借りしました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/07 13:37