現在、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()
。処理プログラムがそれに追いつくのに十分な速度で実行されていない可能性があります。loop()
Arduinoコードに遅延をかけて、速度を落としてみてください。例えばdelay(50)
。