Hola estimados!, tengo un problema que no he podido solucionar, llevo poco tiempo utilizando processing y me he encontrado con muchos problemas que gracias a internet los he ido solucionando, pero hay uno que no he podido solucionar. Resulta que estoy enviando datos desde Arduino a processing y la idea es realizar un guardado de estos, hasta ahí todo bien, el problema surge cuando al momento de leer estos datos, al apretar un boton ( inicio), comienza el guardado de los datos en un archivo txt hasta que se apriete el boton (fin). Lo que he logrado hacer es guardar los datos con una cantidad definida por un contador que está dentro de un while y va aumentando hasta que se cumple el valor y sale, pero mi idea es sacar el dato desde el botón. Por favor si alguien me pudiera orientar se lo agradecería bastante. Espero que mi idea haya quedado clara.
type or paste // PROCESSING
import processing.serial.*;
float sensor1 = 0.0;
float sensor2 = 0.0;
float sensor3 = 0.0;
float arreglo1;
float arreglo2;
float arreglo3;
PFont titulos,senales;
int consta = 100;
int aux00 = 0;
int flag = 0;
int flag2 = 0;
int flag10 = 0;
boolean aux;
int cont = 0;
int num1= 0;
Serial puerto;
// Editor path y extension de archivo
final String pathFolder = "";
final String fileExtension = ".txt";
// Estados
final int normal = 0; // consts
final int load = 2;
int state = normal; // Estado actual, debe ser uno de ellos, current state ( must be one of them)
// Paths
String loadPath = "";
void setup()
{
size (1300,800);
titulos = createFont("Arial Black",12);
senales = createFont("Arial",12);
textFont(titulos);
puerto = new Serial(this, Serial.list()[0],9600);
puerto.clear();
puerto.bufferUntil('\n');
}
void fijos ()
{
background(255);
fill(55);
textFont(titulos,12);
text("Guardar Ensayo",50,660);
text("Registrar Datos",200,660);
text("Resetear Sensores",350,660);
text("Terminar Ensayo",505,660);
text("Sensor 1 : ",25,100);
text("Sensor 2 : ",25,115);
text("Sensor 3 : ",25,130);
}
void mostrar ()
{
textFont(senales);
text(arreglo1,100,100);
text(arreglo2,100,115);
text(arreglo3,100,130);
}
void botones()
{
fill(43,100,43);
ellipse(90,700,60,60);
ellipse(250,700,60,60);
ellipse(410,700,60,60);
ellipse(560,700,60,60);
}
void envio_y_creacion_de_datos()
{
String dato = puerto.readStringUntil('\n');
if (dato != null)
{
float[] datos = float(split(dato,","));
sensor1 = datos[0];
sensor2 = datos[1];
sensor3 = datos[2];
arreglo1 = consta - sensor1;
arreglo2 = consta - sensor2;
arreglo3 = consta - sensor3;
}
fijos ();
mostrar();
botones();
if(flag == 1)
{
fill(0);
textSize(12);
text("Inicio",880,550);
text("Fin",980,550);
fill(43,100,43);
ellipse(900,600,60,60);
ellipse(1000,600,60,60);
}
}
void draw()
{
switch (state)
{
case normal :
drawForStateNormal();
break;
case load:
waitForLoadDialog();
break;
default:
//Error
println("Fail");
exit();
break;
}
float distancia1 = dist(mouseX,mouseY,90,700); //Boton guardar
if(distancia1 < 30)
{
fill(139,0,0);
ellipse(90,700,60,60);
}
float distancia2 = dist(mouseX,mouseY,250,700); //Boton registrar
if(distancia2 < 30)
{
fill(139,0,0);
ellipse(250,700,60,60);
}
float distancia3 = dist(mouseX,mouseY,410,700); //Boton resetear
if(distancia3 < 30)
{
fill(139,0,0);
ellipse(410,700,60,60);
}
float distancia4 = dist(mouseX,mouseY,560,700); //Boton terminar
if(distancia4 < 30)
{
fill(139,0,0);
ellipse(560,700,60,60);
}
float distanciaBotonInicio = dist(mouseX,mouseY,900,600); //Boton inicio
if (distanciaBotonInicio < 30 && flag == 1)
{
fill(139,0,0);
ellipse(900,600,60,60);
}
float distanciaBotonFin = dist(mouseX,mouseY,1000,600); //Boton fin
if (distanciaBotonFin < 30 && flag == 1)
{
fill(139,0,0);
ellipse(1000,600,60,60);
}
}
void drawForStateNormal()
{
envio_y_creacion_de_datos();
}
void initLoad()
{
loadPath = "";
File fileDescription = new File( sketchPath() + "//" + pathFolder + "//" + fileExtension);
selectOutput("Select a file to write to", "fileSelectedLoad", fileDescription);
state = load;
}
void fileSelectedLoad(File selection) {
// the 'callback' function
if (selection == null) {
// println("Window was closed or the user hit cancel.");
// go back
state=normal;
} else {
// println("User selected " + selection.getAbsolutePath());
loadPath=selection.getAbsolutePath();
}
}
void waitForLoadDialog() {
envio_y_creacion_de_datos();
if (!loadPath.equals("")) {
// waiting is over
loadIt();
// go back
state=normal;
}
}
void loadIt()
{
flag2 = 0; //Para que la ventana de guardar se abra solo una vez
num1 = 22; //Cantidad de veces que imprime debe considir con el contador (cont) en el while
// make array (to save it)
aux = true;
cont = 0;
String[] strs1 = new String[num1];
while(aux == true && cont<22)
{
//for(int j=0 ; j<= 10; j++)
//{
envio_y_creacion_de_datos();
strs1[cont]=str(arreglo1)+","+ str(arreglo2)+","+ str(arreglo3);
delay(100);
println(strs1[cont]);
cont++;
}
loadPath += fileExtension; // add the file Extension
// save
println("Saved: " + loadPath);
saveStrings( loadPath, strs1 );
}
void mouseClicked()
{
float distancia = dist(mouseX,mouseY,560,700); //Boton salir
if(distancia < 30)
{
exit();
}
float distancia3 = dist(mouseX,mouseY,250,700); //Boton registrar
if(distancia3 < 30)
{
flag = 1;
// registrar();
}
float distanciaBotonInicio = dist(mouseX,mouseY,900,600); //Boton inicio
if(distanciaBotonInicio < 30)
{
flag2 = 1; //Se abre la ventana para guardar
initLoad();
}
float distanciaBotonFin = dist(mouseX,mouseY,1000,600); //Boton fin
if(distanciaBotonFin < 30)
{
flag2 = 0; // Para que no se abran muchas ventanas de guardar
aux = false;
}
}
code here