【发布时间】:2015-03-13 23:22:04
【问题描述】:
我对 Arduino 和 Processing 都比较陌生,我一直在研究利用两者之间的串行通信的代码。我的 Arduino 代码正在从压电传感器读取和打印值,然后将这些值发送到 Processing,它根据这些值勾勒出某些形状。该代码以前有效,但由于某种原因它不再有效。一切都可以编译,但是当我运行处理代码时,草图窗口是空的并且仍然是空的。出现了几次“错误,禁用serialEvent()”,但我只是拔掉了我的Arduino板,关闭了程序,然后重新启动了一切。错误不再出现,但我的处理草图仍未显示在屏幕上。有人可以让我知道我的代码有什么问题吗?非常感谢您的帮助。
Arduino 代码:
int ledPin = 13;
int knockSensor = A0;
byte val = 0;
int statePin = LOW;
int THRESHOLD = 5;
int sensorReading = 0;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
sensorReading = analogRead(knockSensor);
if(sensorReading > 0)
{
Serial.println(sensorReading, DEC);
}
if (sensorReading != 0)
Serial.println(sensorReading);
delay(100);
}
处理代码:
import processing.serial.*;
Serial port;
int centerX = 550;
int centerY = 400;
float val;
float ellipseX;
float ellipseY;
float ellipseW;
float ellipseH;
float ellipseXX;
float ellipseYY;
float ellipseWW;
float ellipseHH;
float lineX;
float lineY;
float lineXX;
float lineYY;
void setup(){
background(255);
size(1100,800);
frameRate(10);
smooth();
String portname = "/dev/tty.usbmodem1411";
//String portname = Serial.list()[0];
port = new Serial(this, portname, 9600);
println(Serial.list());
//port.bufferUntil('\n');
}
void drawEllipse(float val)
{
if(val > 0 && val < 50)
{
ellipseX = random(540,560);
ellipseY = random(390,410);
ellipseW = val + 10;
ellipseH = val + 10;
stroke(0);
fill(random(255), random(200,255));
}
}
void drawLines(float val)
{
if(val > 50 && val < 70)
{
lineX = random(500, 600);
lineY = random(360, 440);
lineXX = random(500, 600);
lineYY = random(360, 440);
stroke(0);
}
}
void drawEllipse2(float val)
{
if(val > 70 && val < 120)
{
ellipseXX = random(460, 640);
ellipseYY = random(330, 470);
ellipseWW = val + random(20);
ellipseHH = val + 10;
stroke(0);
fill(random(50, 100), random(50, 100), random(50, 100), random(220, 255));
}
}
void serialEvent(Serial port)
{
String inString = port.readStringUntil('\n');
if (inString != null)
{
val = Float.parseFloat(inString);
}
drawEllipse(val);
drawLines(val);
drawEllipse2(val);
println(val);
}
【问题讨论】:
-
你最好在arduino.stackexchange.com上提问
-
您知道吗,在您的 Arduino 草图中,您为每个传感器读取执行两次 Serial.println?我不知道这是否是问题所在,但那是你想要的吗? (两者看起来都在做基本相同的事情)。
-
哦,感谢您指出这一点,但我认为这不是问题所在。
-
没关系,解决了!
标签: arduino processing