Actualmente estoy en el proyecto # 14 del libro del proyecto Arduino.
Estoy tratando de controlar un boceto de procesamiento en mi computadora portátil usando mi Arduino. Esto se logra mediante el uso de un potenciómetro para controlar el fondo de una imagen.
Código Arduino:
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.write(analogRead(A0)/4);
}
Procesando:
//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);
}
Ahora, mientras el código funciona, y el color de fondo cambia cuando giro el potenciómetro, hay un gran retraso entre girar el potenciómetro y ver que el fondo cambia de color, y los valores del Arduino / potenciómetro cambian en el monitor en serie del procesamiento.
Lo que he intentado:
- Cambiar la velocidad de la comunicación en serie
Me di cuenta de que cuando disminuyo la velocidad de la comunicación en serie, por ejemplo, alrededor de 100, el retraso entre girar el potenciómetro y verlo cambiar en mi computadora portátil disminuye a aproximadamente 1 segundo. Sin embargo, cuando disminuyo la velocidad de la comunicación en serie aún más, por ejemplo, un valor de 1, el retraso aumenta nuevamente.
Por otro lado, a la velocidad estándar de 9600, el retraso es enorme, aproximadamente 5 segundos antes de que los cambios en el potenciómetro aparezcan en la computadora portátil / procesamiento.
¿Por qué la disminución de la velocidad de comunicación (hasta cierto punto) disminuye el retraso de tiempo y el aumento aumenta el retraso de tiempo? Además, ¿hay alguna forma de hacerlo casi instantáneo?
loop()
. Es muy posible que su programa de procesamiento no se ejecute lo suficientemente rápido como para mantenerse al día. Intenta retrasar elloop()
código Arduino para ralentizarlo; por ejdelay(50)
.