2017-10-20 222 views
0

對於我參加的新課程,我必須在Processing和Arduino之間建立連接。我想,如果某個開關打開,矩形繪製在Processing中。繪圖矩形

爲此我有3個開關和一個按鈕。這三個開關代表一種顏色:紅色,綠色和藍色。因此,用戶應該先選擇一種顏色,然後按te按鈕以使用該顏色繪製矩形。

之後,用戶應該能夠打開該顏色的開關,打開另一種顏色的開關並按下開關畫第二個矩形。這不幸的是不適合我。

一旦繪製了一個矩形,就不可能畫出另一個矩形。我很新,所以如果我的代碼非常糟糕,我很抱歉!

我的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

哦好吧謝謝!而且,我可以通過什麼方式將其他val的值改變爲其他值呢? –

回答

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爲高電平,並且switchPinRed爲高電平,表示繪製了紅色矩形。其他顏色也一樣。我想我可以這樣做,首先檢查val是否爲1,如果val也是2,那麼會發生這種情況。我現在明白,val不能是1和2,但我不知道如何以另一種方式編寫代碼:( –

+0

@JessieenEmma不用用單個「int」值來表示草圖的狀態,你可能會(我想'drawRectangle','isRed','isGreen'和'isBlue')。根據Arduino的值來設置這些布爾值,然後繪製你的布爾值矩形(或不是)基於那些布爾值 –

+0

好吧,我認爲我知道了,但是我怎麼知道int drawRectangle只讀取矩形圖的按鈕所連接的針的輸出? –