В настоящее время я работаю над проектом № 14 из книги проекта Arduino.
Я пытаюсь контролировать эскиз обработки на моем ноутбуке, используя мой 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)
.