私のロジックはちょっとしたお尻です。しかし、ここに私が行っていることがあります:私はシリアルデータのストリームと追跡するブール値を持っています。私が本当にやりたいことは、「シリアルデータは[X]と同じですが、特定の関数を1回呼び出すだけです」シリアルデータが特定の数値に評価されている間は関数を1回だけ呼び出す
基本的には、着信シリアルデータをボタンのように動作させる。私はいつも個々の議論のために旗をどこに偽に戻すべきかを不安定にします。今、私はちょうどトータルリセットがあります。何も入っていなければ、すべてリセットします。
個々の引数についてブール値をfalseに戻す場所についての助けがあれば幸いです。私はほとんどそれを見ることができません。
最終的には、「シリアルは2、画面上のランダムな点を取得して円を描いている」という行に沿って何かを行いますが、今のところ私の悪い論理を解決するだけです。
import processing.serial.*;
Serial myPort; // Create object from Serial class
int val;
boolean wasTwo = false;
boolean wasFour = false;
boolean wasSeven = false;
// /dev/cu.LightBlue-Bean
void setup()
{
size(800, 800);
printArray(Serial.list());
String portName = Serial.list()[1];// /dev/cu.LightBlue-Bean
myPort = new Serial(this, portName, 9600);
}
void draw(){
background(0);
if (myPort.available() > 0) { // If data is available,
val = myPort.read(); // read it and store it in val
}
if(val != 0){
if(!wasTwo && val == 2){
print("2");
wasTwo = true;
}
if(!wasFour && val == 4){
print("4");
wasFour = true;
}
if(!wasSeven && val == 7){
print("7");
wasSeven = true;
}
} else {
wasTwo = false;
wasFour = false;
wasSeven = false;
}
if(wasTwo){
red();
}
if(wasFour){
green();
}
if(wasSeven){
blue();
}
}
void red(){
fill(255,0,0);
ellipse(200,200, 200, 200);
}
void green(){
fill(0,200,0);
ellipse(400,400, 200, 200);
}
void blue(){
fill(0,0,255);
ellipse(600,600, 200, 200);
}