2017-10-20 163 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只读取矩形图的按钮所连接的针的输出? –