Cordial greeting, I am working on a project where I require the use of several sensors and visualize them in processing. I am currently using this code.
import processing.serial.*;
Serial puerto; // se declara una variable para la com. serial
boolean newData = false;
int xPos = 0; // posición horizontal del gráfico
// Variables para dibujar una línea continua de la gráfica.
int lastxPos=1;
int lastheight=0;
float inByte[] = {0,0,0,0,0,0,0}; // Datos seriales entrantes
void serialEvent (Serial myPort) { //Datos de la gráfica.
// obtener la cadena ASCII:
String inString = myPort.readStringUntil('\n');
if (inString != null) {
inString = trim(inString); // recortar espacios en blanco.
inByte = float(split(inString, ','));
inByte[0] = float(inString); // convertir a un número.
inByte[0] = map(inByte[2], 0, 1023, 0, height); //mapa a la altura de la pantalla.
newData = true;
}
}
public void setup(){
size(1000, 600, JAVA2D); //Tamaño de la ventana principal
background(17,34,51);
rect(-1, 95, 1001, 330,1); // Tamaño del rectángulo blanco donde se grafican los datos
puerto = new Serial(this,Serial.list()[0], 9600); //Busca puerto serie conectado automáticamente.
puerto.clear();
puerto.bufferUntil('\n');
}
public void draw(){
println(inByte[0],inByte[1],inByte[2],inByte[3],inByte[4]);
if (newData) {
stroke(17,34,51); //Color de la línea graficadora.
strokeWeight(1); //Grosor de la línea graficadora.
line(lastxPos, lastheight, xPos, height - inByte[0]);
lastxPos= xPos;
lastheight= int(height-inByte[0]);
// Dibujando una línea desde Last inByte hasta la nueva.
// en el borde de la ventana, regrese al principio:
if (xPos >= width) {
xPos = 0;
lastxPos= 0;
saveFrame( "Pantallazos Automáticos cada 30s"+"/"+day()+"-"+month()+"-"+year()+" a las "+hour()+"_"+minute() +" con "+ second()+"s"+ ".png") ; //dar nombre de fecha a los pantallazos
// background(17,34,51); //Clear the screen.
rect(0, 95, 999, 355,1); // Tamaño del rectángulo blanco donde se grafican los datos
stroke(196,196,196); // Color de la línea del cuadriculado
}
else {
// Incrementa la posición horizontal.
xPos++;
}
newData =false;
}
}
However I get this error if I close the program from the “x” and open it again. The only way to make it work again is to disconnect the USB completely and reconnect it which is not practical.
What would be the correct and infallible way to send data from several arduino sensors to processing avoiding this error that appears to me?
I have tried different methods but none works really well, so far this has been the best in my case that I need to graph one of the data and show the others.
What would be the best method to do this? Graph one data and show the others?
Thank you.