2017-10-20 23 views
0

私が参加している新しいコースでは、ProcessingとArduinoの間の接続を作成する必要があります。特定のスイッチがONの場合、処理では四角形が描画されます。図面の長方形

これには3つのスイッチと1つのボタンがあります。 3つのスイッチは赤、緑、青の色を表します。そのため、ユーザーは最初に色を選択してから、特定の色で矩形を描くようにする必要があります。

その後、ユーザーはその色のスイッチをオンにし、別の色のスイッチをオンにし、スイッチを押して2番目の長方形を描くことができます。残念ながら私のために働いていません。

1つの矩形が描画されると、別の矩形を描画することはできません。私は非常にこれに新しいですので、私のコードが非常に悪い場合はごめんなさい!

私のArduinoのコード:

int switchPinRed = 21; 
int switchPinGreen = 22; 
int switchPinBlue = 23; 
int buttonPinRect = 20; 

void setup() { 
    pinMode(switchPinRed, INPUT);    // Set pin 0 as an input 
    pinMode(switchPinGreen, INPUT); 
    pinMode(switchPinBlue, INPUT); 
    pinMode(buttonPinRect, INPUT); 
    Serial.begin(9600);     // Start serial communication at 9600 bps 
} 

void loop() { 

    if (digitalRead(buttonPinRect) == HIGH) { 
    Serial.print(1); 
    } 

    else if (digitalRead(switchPinRed) == HIGH) { 
    Serial.print(2); 
    } 

    else if (digitalRead(switchPinGreen) == HIGH) { 
    Serial.print(3); 
    } 

    else if (digitalRead(switchPinBlue) == HIGH) { 
    Serial.print(4); 
    } 
} 

そして、私の処理コード:

import processing.serial.*; 

Serial myPort; 
int val; 

int[] rects = new int [3]; 

void setup() 
{ 
    size(600, 200); 
    String portName = Serial.list()[0]; 
    myPort = new Serial(this, "/dev/tty.usbmodem3330431", 9600); 

    for (int i=0; i < 3; i++) { 
    rects[i] = 0; 
    } 
} 

void draw() 
{ 
    if (myPort.available() > 0) { 
    val = myPort.read(); 
    } 


    background(255); 

    for (int i =0; i < 3; i++) { 

    if (val == 1) { 
     if (val == 2) { 
     fill(255, 0, 0); 


     } else if (val == 3) { 
     fill(0, 255, 0); 


     } else if (val == 4) { 
     fill(0, 0, 255); 


     } 

     rect(random(50), random(50), 100, 100); 

    } 
    } 
} 
+0

「val」は同時に「1」と他の値となることはできません。 –

+0

ありがとう、ありがとう!そして、どのようにして、私はそれが機能するように、他の価値を何かに変えることができますか? –

答えて

0

このコードでは意味がありません。

if (val == 1) { 
    if (val == 2) { 
    fill(255, 0, 0); 
    } else if (val == 3) { 
    fill(0, 255, 0); 
    } else if (val == 4) { 
    fill(0, 0, 255); 
    } 
    rect(random(50), random(50), 100, 100); 
} 

まずあなたがval == 1かどうか、そしてかどうかを確認しますあなたはval == 2かどうかをチェックします。それは決してそうではありません。おそらくあなたはこのようなものを意味したでしょうか?

if (val == 1) { 
    //fill? 
} 
else if (val == 2) { 
    fill(255, 0, 0); 
} else if (val == 3) { 
    fill(0, 255, 0); 
} else if (val == 4) { 
    fill(0, 0, 255); 
} 
rect(random(50), random(50), 100, 100); 
+0

私は、switchPinRectがHIGHでswitchPinRedがHIGHで赤い矩形が描かれているとします。他の色についても同様です。私は最初にvalが1であるかどうかをチェックし、valが2であれば、これが起こることを確認することができると思いました。私はvalが1と2になることができないことを理解していますが、これを別の方法でコーディングする方法はわかりません:( –

+0

@JessieenEmmaスケッチの状態を表現するために単一の 'int'値を使用するのではなく、 ( 'drawRectangle'、' isRed'、 'isGreen'、およびisBlue'を考えています)。あなたのArduinoの値に基づいてブール値を設定し、これらのブール値に基づいて矩形(またはそうではない)を返します –

+0

私はそれを得ると思いますが、int型のdrawRectangleは、矩形の描画用のボタンが接続されているピンの出力のみを読み取ることをどのように知るのですか? –