Atualmente, estou no projeto nº 14 do livro do projeto Arduino.
Estou tentando controlar um esboço de processamento no meu laptop usando meu Arduino. Isso é feito usando um potenciômetro para controlar o fundo de uma imagem.
Código Arduino:
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.write(analogRead(A0)/4);
}
Em processamento:
//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);
}
Agora, enquanto o código funciona e a cor de fundo muda à medida que eu ligo o potenciômetro, há um grande atraso entre girar o potenciômetro e ver o fundo mudar de cor, e os valores do Arduino / potenciômetro mudam no monitor serial do processamento.
O que eu tentei:
- Alterando a velocidade da comunicação serial
Percebi que quando diminuo a velocidade da comunicação serial, por exemplo, cerca de 100, o atraso entre girar o potenciômetro e vê-lo mudar no meu laptop diminui para cerca de 1 segundo. No entanto, quando diminuo ainda mais a velocidade da comunicação serial, por exemplo, um valor 1, o atraso aumenta novamente.
Por outro lado, na velocidade padrão de 9600, o atraso é enorme, aproximadamente 5s ++, antes que as alterações no potenciômetro apareçam no laptop / processamento.
Por que diminuir a velocidade da comunicação (até um certo ponto) diminui o intervalo de tempo e aumenta-o? Além disso, existe alguma maneira que eu possa torná-lo quase instantâneo?
loop()
. É bem possível que seu programa de processamento não esteja funcionando rápido o suficiente para acompanhá-lo. Tente colocar um atraso noloop()
código do Arduino para reduzi-lo; por exemplodelay(50)
.