boolean squareVisible = true;
int x = 50;
int y = 50;
int w = 100;
int h = 100;
import processing.serial.*;
Serial port;
int val;
void setup() {
size(200, 200);
noStroke();
fill(255, 0, 0);
rect(x, y, w, h);
port = new Serial(this, 9600);
}
void draw() {
background(255);
if (squareVisible) {
fill(40, 80, 90);
} else {
fill(255, 0, 0);
}
rect(x, y, w, h); // Draw a square
}
void mousePressed() {
if (((mouseX > x) && (mouseX < x + w) &&
(mouseY > y) && (mouseY < y + h))) {
// if mouse clicked inside square
squareVisible = !squareVisible; // toggle square visibility
port.write("8");
}
}
void mouseMoved() {
if (((mouseX > x) && (mouseX < x + w) &&
(mouseY > y) && (mouseY < y + h))) {
port.write("2");
}
}
我在处理方面完全不知所措。这是一个简单的切换开关,我正在尝试在切换时写入串口。我正在尝试将其与arduino集成,但我似乎无法读取来自串口的任何内容。有没有一种不同的方式用我的每个开关写入串口,我有什么不对吗?提前谢谢......
答案 0 :(得分:5)
我发现了一个问题:port = new Serial(this, 9600);
应该是port = new Serial(this, Serial.list()[0], 9600);
。您错过了Serial构造函数中的(重要)参数。始终检查处理控制台中的错误(以下代码),特别是如果代码不起作用:)
我将从Processing附带的SimpleWrite示例开始,这样您就可以了解Processing / Arduino之间的通信是如何工作的,然后继续使用您在项目中获得的知识。
基本设置如下: 在Processing中,您在setup()中初始化Serial实例,在draw中使用Serial的write()方法发送值。 在Arduino中,在setup()中初始化Serial(Serial.begin(yourBaudRate))并在循环()中检查是否有可用数据和read()值。 在Processing和Arduino中使用相同的波特率非常重要非常,否则您将无法获得大量传输的数据。
此外,您不会发送字符串,也可以发送整数,字节等。 如果要显示这些,请不要忘记将类型添加为Serial.print()或Serial.println()的第二个参数(例如Serial.println(myByte,BYTE);或者Serial.println(myInt) ,DEC));
我在Arduino中设置了一个非常基本的草图,当你的方块被切换时,它会闪烁一次LED 否则什么都不做。此外,输入数据打印在串行监视器中: int incoming = 0; //这将存储来自Serial
的值void setup(){
pinMode(13,OUTPUT);//add an LED on PIN 13 for kicks
Serial.begin(9600);//init Serial library (make sure Processing is sending data at the same baud rate)
}
void loop(){
if(Serial.available() > 0){//look for Serial data
incoming = Serial.read();//read and store teh value
Serial.print(incoming,DEC);//print it to the Serial monitor, change DEC to the type of variable you're using
if(incoming == 1){//if it's a 1 blink once
digitalWrite(13,HIGH);
delay(500);
digitalWrite(13,LOW);
delay(500);
}
}
}
我已经调整了你的处理草图:
boolean squareVisible = true;
int x = 50;
int y = 50;
int w = 100;
int h = 100;
import processing.serial.*;
Serial port;
int val;
void setup() {
size(200, 200);
noStroke();
fill(255, 0, 0);
rect(x, y, w, h);
String portName = Serial.list()[0];
port = new Serial(this, portName, 9600);
}
void draw() {
background(255);
if (squareVisible) {
fill(40, 80, 90);
} else {
fill(255, 0, 0);
}
rect(x, y, w, h); // Draw a square
}
void mousePressed() {
if (((mouseX > x) && (mouseX < x + w) &&
(mouseY > y) && (mouseY < y + h))) {
// if mouse clicked inside square
squareVisible = !squareVisible; // toggle square visibility
if(squareVisible) port.write(0);
else port.write(1);
}
}
/*
void mouseMoved() {
if (((mouseX > x) && (mouseX < x + w) &&
(mouseY > y) && (mouseY < y + h))) {
port.write(2);
}
}*/
古德勒克!