我目前在Arduino项目书的项目#14中。
我正在尝试使用Arduino控制笔记本电脑上的处理草图。这是通过使用电位器控制图像背景来实现的。
Arduino代码:
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.write(analogRead(A0)/4);
}
处理方式:
//imports serial library
import processing.serial.*;
//setups the serial object
Serial myPort;
//creates an object for the image
PImage logo;
//variable to store background color
int bgcolor = 0;
void setup(){
colorMode(HSB,255);
logo = loadImage("http://arduino.cc/logo.png");
size(logo.width,logo.height);
println("Available serial ports");
println(Serial.list());
myPort = new Serial(this,Serial.list()[0],9600);
}
//equivalent of arduino's loop function
void draw(){
if(myPort.available() > 0)
{
bgcolor = myPort.read();
println(bgcolor);
}
background(bgcolor,255,255);
image(logo,0,0);
}
现在,虽然代码可以正常工作,并且在我打开电位器时背景颜色发生了变化,但是在转动电位器和看到背景更改颜色之间存在巨大的滞后,而Arduino /电位器中的值在处理的串行监视器上发生了变化。
我尝试过的
- 更改串行通讯的速度
我注意到,当我降低串行通讯速度时,例如大约100,在打开电位计与在笔记本电脑上看到电位计变化之间的延迟减少到大约1秒。但是,当我进一步降低串行通信的速度(例如,值为1)时,延迟会再次增加。
另一方面,在9600的标准速度下,延迟是巨大的,大约5秒++,之后电位计的变化才会出现在笔记本电脑/处理器上。
为什么降低通讯速度(达到特定点)会减少时间延迟,而增加通讯时间却会增加时间延迟呢?此外,无论如何,我可以使它接近瞬时吗?
loop()
。您的Processing程序很有可能运行得不够快,无法跟上它的步伐。尝试loop()
在您的Arduino代码中加入延迟以降低速度;例如delay(50)
。