Sono attualmente al progetto n. 14 del libro del progetto Arduino.
Sto cercando di controllare uno schizzo di elaborazione sul mio laptop usando il mio Arduino. Ciò si ottiene utilizzando un potenziometro per controllare lo sfondo di un'immagine.
Codice Arduino:
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.write(analogRead(A0)/4);
}
In lavorazione:
//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);
}
Ora, mentre il codice funziona e il colore di sfondo cambia mentre giro il potenziometro, c'è un enorme ritardo tra la rotazione del potenziometro e la visualizzazione del colore di cambiamento dello sfondo, ei valori di Arduino / potenziometro cambiano sul monitor seriale dell'elaborazione.
Cosa ho provato:
- Modifica della velocità della comunicazione seriale
Ho notato che quando diminuisco la velocità della comunicazione seriale, ad esempio circa 100, il ritardo tra l'accensione del potenziometro e il vederlo cambiare sul mio laptop diminuisce a circa 1 secondo. Tuttavia, quando diminuisco ulteriormente la velocità della comunicazione seriale, ad esempio un valore di 1, il ritardo aumenta nuovamente.
D'altro canto, alla velocità standard di 9600, il ritardo è enorme, all'incirca 5 secondi ++ prima che i cambiamenti nel potenziometro compaiano sul laptop / elaborazione.
Perché la riduzione della velocità di comunicazione (fino a un certo punto) diminuisce il ritardo e aumentandolo aumenta il ritardo? Inoltre, c'è un modo per renderlo quasi istantaneo?
loop()
. È del tutto possibile che il tuo programma di elaborazione non sia abbastanza veloce da tenerlo aggiornato. Prova a ritardareloop()
nel tuo codice Arduino per rallentarlo; esdelay(50)
.