绘制矩形

Drawing rectangles

对于我要参加的新课程,我必须在 Processing 和 Arduino 之间建立连接。我希望如果某个开关打开,则在处理中绘制一个矩形。

为此我有 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);

    }
  }
}

这段代码没有意义:

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);