###前提・実現したいこと
Processingで図形にカーソルが触れたらArduinoで音が鳴り、カーソルが触れなくなったら音が止まるプログラムを書いています。
###発生している問題・エラーメッセージ
Booleanでうまく条件分岐ができていないことが問題だと思います。現状では一度カーソルが触れたら音がずっと鳴りっぱなしで、止まりません。
###該当のソースコード
Processing
1import processing.serial.*; 2 3boolean didTouch = false; 4Serial serial; 5ArrayList<MyShape> shapes = new ArrayList<MyShape>(); 6 7void setup() { 8 size(500, 500); 9 serial = new Serial(this, Serial.list()[1], 9600); 10 noStroke(); 11 MyShape s; 12 s = new MyEllipse(30, 30, 50, 50); 13 shapes.add(s); 14} 15 16void draw() { 17 background(102); 18 for (MyShape s : shapes) { 19 if (s.contains(mouseX, mouseY)) { 20 fill(#CE2828); 21 didTouch = true; 22 serial.write('a'); 23 } else { 24 fill(204); 25 serial.write('b'); 26 didTouch = false; 27 } 28 s.draw(); 29 } 30} 31 32// 楕円を表すクラス 33class MyEllipse extends MyShape { 34 float x, y, w, h; 35 36 MyEllipse(float x, float y, float w, float h) { 37 this.x = x; 38 this.y = y; 39 this.w = w; 40 this.h = h; 41 } 42 43 void draw() { 44 ellipse(x, y, w, h); 45 } 46 47 boolean contains(float mx, float my) { 48 float dx = 2 * (mx - x) / w; 49 float dy = 2 * (my - y) / h; 50 return sqrt(dx * dx + dy * dy) <= 1.0; 51 } 52} 53 54// 任意の図形を表す抽象クラス 55abstract class MyShape { 56 // 画面上へこの図形を描画するメソッド 57 abstract void draw(); 58 59 // 指定位置がこの図形に含まれるかどうか判定するメソッド 60 abstract boolean contains(float x, float y); 61} 62
Arduino側のコードを書き足しました
Arduino
1int melo = 200; //音の長さを指定 2#define PIN 12 //ブザーを接続したピン番号 3 4void setup() { 5 Serial.begin(9600); 6 7} 8 9void loop() { 10 if (Serial.available() > 0) { 11 int data = Serial.read(); 12 if (data == 'a') { 13 //ド 14 tone(PIN, 262, 600); 15 delay(300); 16 //レ 17 tone(PIN, 294, 300); 18 delay(300); 19 //ミ 20 tone(PIN, 330, 300); 21 delay(300); 22 //ファ 23 tone(PIN, 344, 600); 24 delay(300); 25 //ソ 26 tone(PIN, 392, 300); 27 delay(300); 28 //ラ 29 tone(PIN, 440, 600); 30 delay(300); 31 //シ 32 tone(PIN, 494, 600); 33 delay(300); 34 35 } 36 else if (data == 'b') { 37 38 } 39 } 40}
###試したこと
boolean didTouchを加える
回答1件
あなたの回答
tips
プレビュー