Obecnie pracuję nad projektem nr 14 książki projektowej Arduino.
Próbuję kontrolować szkic przetwarzania na laptopie za pomocą Arduino. Dokonuje się tego za pomocą potencjometru do sterowania tłem obrazu.
Kod Arduino:
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.write(analogRead(A0)/4);
}
Przetwarzanie:
//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);
}
Teraz, gdy kod działa, a kolor tła zmienia się, gdy obracam potencjometr, istnieje ogromne opóźnienie między obróceniem potencjometru a widokiem zmiany koloru tła, a wartości z Arduino / potencjometru zmieniają się na monitorze szeregowym przetwarzania.
Co próbowałem:
- Zmiana prędkości komunikacji szeregowej
Zauważyłem, że kiedy zmniejszam prędkość komunikacji szeregowej, np. Około 100, opóźnienie między obróceniem potencjometru a jego zmianą na moim laptopie zmniejsza się do około 1 sekundy. Gdy jednak jeszcze bardziej zmniejszę prędkość komunikacji szeregowej, np. Wartość 1, opóźnienie ponownie wzrasta.
Z drugiej strony, przy standardowej prędkości 9600 opóźnienie jest ogromne, około 5 sekund ++, zanim zmiany w potencjometrze pojawią się na laptopie / procesorze.
Dlaczego zmniejszenie prędkości komunikacji (do pewnego punktu) zmniejsza opóźnienie czasowe, a zwiększenie go zwiększa opóźnienie czasowe? Poza tym, czy w ogóle mogę sprawić, że będzie to prawie natychmiastowe?
loop()
. Całkiem możliwe, że Twój program przetwarzania nie działa wystarczająco szybko, aby nadążyć za nim. Spróbuj opóźnićloop()
kod Arduino, aby go spowolnić; npdelay(50)
.