Processingでスイッチ化
いつもお世話になっております。
現在、ProcessingとArduinoを連携させてリズムゲームを作成しております。
手袋に導電糸をつけて、手のひらが合わさると、信号がProcessingに流れるようになっています。
※Arduinoでプルアップ式で、通電したら信号がPrcessingに行くようにしています。
画面のイメージとしては、下記のようなものになっております。
黒枠にボールが落ちてきた際に、タイミングよくスイッチを押すと点数が+1つき、失敗すると-1になる仕組みを作っております。
しかし、手の平を合わせている間ずっと+1の処理がされてしまいます。
これを手の平をあわせてタップしたときだけ、1回だけ処理をするようにしたいです。
どうすればいいのでしょうか。
Processing
1int num =3; 2int count; 3Ball[] ball = new Ball[num]; 4 5import processing.serial.*; 6import cc.arduino.*; 7import org.firmata.*; 8 9final int sP = 5; 10final int lp = 13; 11 12final int sec = 10; 13boolean waithing = true; 14 15boolean b; 16 17Arduino arduino; 18 19void setup() { 20 //ball = new Ball(width/2,100,30,1); 21 count = 0; 22 smooth(); 23 b = false; 24 size(400, 400); 25 arduino = new Arduino(this, "/dev/tty.usbmodem1411", 57600); 26 arduino.pinMode(lp, Arduino.OUTPUT); 27 arduino.pinMode(sP, Arduino.INPUT); 28 background(255); 29 frameRate(60); 30 31 for (int i =0; i < ball.length; i++) { 32 ball[i] = new Ball(width/2, -i*50 - random(60, 100), 30, 2); 33 } 34} 35 36void draw() { 37 background(255); 38 turnOn(); 39 fill(0); 40 text("counter : " + count, 30, 30); 41 fill(0, 0, 0, .5); 42 rect(0, height-100, width, 50); 43 44 for (int i = 0; i < ball.length; i++) { 45 ball[i].move(); 46 ball[i].display(); 47 fill(0); 48 text("this is " + i, ball[i].x+30, ball[i].y); 49 } 50} 51 52class Ball { 53 float x, y; 54 float diameter; 55 float speed; 56 int direction =1; 57 58 Ball(float xpos, float ypos, float dia, float spd) { 59 x = xpos; 60 y = ypos; 61 diameter = dia; 62 speed = spd; 63 } 64 void move() { 65 y += (speed * direction); 66 //if(y > (height - diameter/2) ||y < diameter/2){ 67 // direction *= -1; 68 //} 69 if (y > height+diameter) { 70 y = 0; 71 } 72 } 73 74 void display() { 75 ellipse(x, y, diameter, diameter); 76 } 77 void textSample(String txt) { 78 textAlign(CENTER); 79 fill(0); 80 textSize(16); 81 text("txt", x, y); 82 } 83 boolean finished() { 84 if (y > height + diameter) { 85 return true ; 86 } else { 87 return false; 88 } 89 } 90} 91 92void turnOn() { 93 int val; 94 val = arduino.digitalRead(sP); 95 if (val == 0) { 96 if ((ball[0].y > height-100) && (ball[0].y < height-50)) { 97 count++; 98 fill(255, 0, 0); 99 rect(0, height-100, width, 50); 100 } else { 101 count--; 102 fill(0, 0, 255); 103 rect(0, height-100, width, 50); 104 } 105 } 106} 107
よろしくお願いします。
回答1件