Je suis actuellement sur le projet # 14 du livre de projet Arduino.
J'essaie de contrôler une esquisse de traitement sur mon ordinateur portable à l'aide de mon Arduino. Ceci est accompli en utilisant un potentiomètre pour contrôler l'arrière-plan d'une image.
Code Arduino:
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.write(analogRead(A0)/4);
}
En traitement:
//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);
}
Maintenant, alors que le code fonctionne et que la couleur d'arrière-plan change lorsque je tourne le potentiomètre, il y a un énorme décalage entre tourner le potentiomètre et voir la couleur changer d'arrière-plan, et les valeurs de l'Arduino / potentiomètre changent sur le moniteur série du traitement.
Ce que j'ai essayé:
- Modification de la vitesse de communication série
J'ai remarqué que lorsque je diminuais la vitesse de communication série, par exemple autour de 100, le délai entre tourner le potentiomètre et le voir changer sur mon ordinateur portable diminuait à environ 1 seconde. Cependant, lorsque je diminue encore plus la vitesse de communication série, par exemple une valeur de 1, le retard augmente à nouveau.
D'un autre côté, à la vitesse standard de 9600, le retard est énorme, environ 5 secondes ++ avant que les changements de potentiomètre n'apparaissent sur l'ordinateur portable / traitement.
Pourquoi la diminution de la vitesse de communication (jusqu'à un certain point) diminue-t-elle le décalage temporel et l'augmentation augmente-t-elle le décalage temporel? De plus, est-il possible de le faire presque instantanément?
loop()
. Il est fort possible que votre programme de traitement ne fonctionne pas assez rapidement pour le suivre. Essayez de mettre un retard dans leloop()
code Arduino pour le ralentir; par exempledelay(50)
.