Hola, estoy comenzando con Processing y tengo algunos problemas para comunicarme con el puerto serie del Arduino. El proyecto consiste en la comunicación de dos Arduinos mediante la cual se manda una matriz de 3 datos. En Arduino con el puerto serie puedo ver que los arduinos se comunican bien y recibo la matriz perfectamente. Cuando quiero usarlo en Processing, no puedo ya que el documento se me crea en blanco.
Hello, I am starting with Processing and I have some problems communicating with the Arduino’s serial port.
The project consists of the communication of two Arduinos through which an array of 3 data is sent. In Arduino with the serial port I can see that the arduinos communicate well and I receive the matrix perfectly. When I want to use it in Processing, I can’t because the document is created blank.
Processing code:
import org.firmata.*;
import processing.serial.*; //Importamos la librería Serial
Serial port; //Nombre del puerto serie
PrintWriter output; //Para crear el archivo de texto donde guardar los datos
int xlogo=450;//Posición X de la imagen
int ylogo=100;//Posición Y de la imagen
int xcama1= 200; // Posición X de la cama 1
int ycama= 300; // Posicion Y de las camas
int xcama2= 700; // Posición X de la cama 2
int valor_cama;//Valor de la temperatura
int temperatura;
boolean boton = true;
int radio=350; //Radio del quadrado
int xcuadrado=450; //Posición X de rect
int ycuadrado=450; //Posición Y de rect
int[] datos = new int[3];
void setup()
{
println(Serial.list()); //Visualiza los puertos serie disponibles en la consola de abajo
port = new Serial(this, Serial.list()[0], 9600); //Abre el puerto serie COM3
output = createWriter("temeratura_datos.txt"); //Creamos el archivo de texto, que es guardado en la carpeta del programa
size(900, 600); //Creamos una ventana de 900 píxeles de anchura por 600 píxeles de altura
}
void draw()
{
if (boton){
background(255);
//Ponemos la imagen de las camas
PImage imagen_cama=loadImage("cama.jpg");
image(imagen_cama,xcama1,ycama, 200, 100); //Cama 1
image(imagen_cama,xcama2,ycama, 200, 100); //Cama 2
//Creamos un texto de color negro con la palabra Cama
fill(0,0,0);
PFont f = loadFont("Calibri-48.vlw");//Tipo de fuente
textFont(f, 20);
text("Cama 1", 120, 405);
text("Cama 2", 670, 405);
//Visualizamos la temperatura con un texto
text("Temperatura =",50,455);
text("Temperatura =",600,455);
text("ºC",205,455);
text("ºC",755,455);
//Dibujamos un a esfera para colorear la temperatura
noStroke();
fill(0,0,255); // Color azul (r,g,b)
ellipseMode(CENTER);
ellipse(250,400,20,20); //Temperatura Cama 1
ellipse(800,400,20,20); //Temperatura Cama 2
//Dibujamos un cuadrado para colorear si la cama está libre o no
fill(0,0,255); // Color azul (r,g,b)
rectMode(RADIUS); //Esta función hace que Width y Height de rect sea el radio (distancia desde el centro hasta un costado).
rect(250,450,10,10); // Cama 1
rect(800,450,10,10); // Cama 2
// Ponemos el valor obtenido de la temperatura
//fill(0);
//text(datos[1], 180, 455);
if (datos[2] == 1)
{
// Ponemos el valor obtenido de la temperatura
fill(0);
text(datos[1], 180, 455);
}
else if (datos[2]== 2)
{
fill(0);
text(datos[1], 780, 455);
}
}else {
background(255);
//Creamos un cuadrado blanco para pintar sobre el
fill(255); // Color rojo (r,g,b)
rectMode(RADIUS); //Esta función hace que Width y Height de rect sea el radio (distancia desde el centro hasta un costado).
rect(xcuadrado,ycuadrado,radio,radio);
}
//Ponemos la imagen de nuestro logo
imageMode(CENTER);//Esta función hace que las coordenadas de la imagne sean el centro de esta y no la esquina izquierda arriba
PImage imagen=loadImage("logo.png");
image(imagen,xlogo,ylogo,250,150);
//Ponemos la imagen de las graficas
PImage graf=loadImage("grafico.png");
image(graf,xcama1,500, 40, 30); //Cama 1
image(graf,xcama2,500, 40, 30); //Cama 2
//Recibir datos temperatura del Arduino
if(port.available() > 0) // si hay algún dato disponible en el puerto
{
int mensaje = 0;
mensaje = datos[0];
for (int i = 1; i < datos.length; i++)
{
datos[i]=port.read(); //Lee el dato y lo almacena en la variable "datos"
}
}
//Escribimos los datos de la temperatura con el tiempo (h/m/s) en el archivo de texto
output.print(datos[1] + " ºC ");
output.print(hour( )+":");
output.print(minute( )+":");
output.println(second( ));
output.println("Cama: " + datos[2]);
output.println("");
//Esfera color visualización temperatura
//float temp = map (temperatura, 15,42, 0, 255);//Escalamos la temperatura donde maximo sea 42ºC y mínimo 15ºC
}
void mousePressed() //Cuando clicamos con el ratón
{
if(mouseX > xcama1-40 && mouseX < xcama1+30 && mouseY > 500-40 && mouseY < 500+30)
{
if (boton) {
boton=false;
} else {
boton=true;
}
}
else if (mouseX > xcama2-40 && mouseX < xcama2+30 && mouseY > 500-40 && mouseY < 500+30)
{
if (boton) {
boton=false;
} else {
boton=true;
}
}
}
void keyPressed() //Cuando se pulsa una tecla
{
//Pulsar la tecla E para salir del programa
if(key=='e' || key=='E')
{
output.flush(); // Escribe los datos restantes en el archivo
output.close(); // Final del archivo
exit();//Salimos del programa
}
} ````Texto preformateado`