Codi Processing Estació de Terra:

import meter.*;
import processing.serial.*;
import processing.core.PApplet;
import processing.core.PImage;
import java.io.PrintWriter;
Serial port;
String[] list;
PrintWriter output;
float fileIndex = 0;
Meter barometreTemperatura, barometreTVOC, barometreCO2, barometrePresio, barometreNO2, barometreCO, barometreAltitud, barometreVelocidad;
PImage Icono; // Imagen con fondo transparente
PImage image1; // Imagen con fondo transparente
PImage image2;
float latitud = 0;
float longitud = 0;

void settings(){
  size(1580, 900);
}
void setup() {
  Icono = loadImage("icono.png");
  image2 = loadImage("image1.jpg");
  image1 = loadImage("image2.png");
  surface.setIcon(Icono);
  background(0);
  
  String portName = "COM8"; // Especifica el nombre del puerto que quieres abrir
  
  try {
    port = new Serial(this, portName,115200); // Intenta abrir el puerto COM10
    println("Puerto serial abierto: " + portName);
  } 
  catch(Exception e) {
    println("Error al abrir el puerto serial " + portName + ": " + e.getMessage());
  }


  fill(120, 50, 0);
  barometreTemperatura = new Meter(this, 5, 50);
  int mx = barometreTemperatura.getMeterX();
  int my = barometreTemperatura.getMeterY();
  int mw = barometreTemperatura.getMeterWidth();
  barometreTemperatura.setMeterWidth((int)Math.round((float)width / 3.59090909090909090909));
  barometreTemperatura.setTitleFontSize(20);
  barometreTemperatura.setTitleFontName("Arial bold");
  barometreTemperatura.setTitle("Temperatura (ºC)");
  barometreTemperatura.setDisplayDigitalMeterValue(true);
  String[] scaleLabelsT = {"0", "10", "20", "30", "40", "50", "60", "70", "80", "90", "100"};
  barometreTemperatura.setScaleLabels(scaleLabelsT);
  barometreTemperatura.setScaleFontSize(18);
  barometreTemperatura.setScaleFontName("Times New Roman bold");
  barometreTemperatura.setScaleFontColor(color(200, 30, 70));  
  barometreTemperatura.setArcColor(color(141, 113, 178));
  barometreTemperatura.setArcThickness(5);  
  barometreTemperatura.setNeedleThickness(3);
  barometreTemperatura.setMinScaleValue(0);
  barometreTemperatura.setMaxScaleValue(100);
  barometreTemperatura.setMinInputSignal(0);
  barometreTemperatura.setMaxInputSignal(100);

  // barometreCO2 para TVOC
 
  barometreTVOC = new Meter(this, mx + mw + 5, my);
  barometreTVOC.setMeterWidth((int)Math.round((float)width / 3.59090909090909090909));
  barometreTVOC.setTitleFontSize(20);
  barometreTVOC.setTitleFontName("Arial bold");
  barometreTVOC.setTitle("TVOC (ppb)");
  barometreTVOC.setDisplayDigitalMeterValue(true);
  String[] scaleLabelsTVOC = {"0", "250", "500", "750", "1000", "1250", "1500", "1750", "2000", "2250", "2500"};
  barometreTVOC.setScaleLabels(scaleLabelsTVOC);
  barometreTVOC.setScaleFontSize(18);
  barometreTVOC.setScaleFontName("Times New Roman bold");
  barometreTVOC.setScaleFontColor(color(200, 30, 70));  
  barometreTVOC.setArcColor(color(141, 113, 178));
  barometreTVOC.setArcThickness(5);  
  barometreTVOC.setNeedleThickness(3);  
  barometreTVOC.setMinScaleValue(0);
  barometreTVOC.setMaxScaleValue(2500);
  barometreTVOC.setMinInputSignal(0);
  barometreTVOC.setMaxInputSignal(2500);
  
  // barometreCO2 para CO2

  barometreCO2 = new Meter(this, mx , my + 270);
  barometreCO2.setMeterWidth((int)Math.round((float)width / 3.59090909090909090909));
  barometreCO2.setTitleFontSize(20);
  barometreCO2.setTitleFontName("Arial bold");
  barometreCO2.setTitle("CO2 (ppm)");
  barometreCO2.setDisplayDigitalMeterValue(true);
  String[] scaleLabelsCO2 = {"0", "250", "500", "750", "1000", "1250", "1500", "1750", "2000", "2250", "2500"};
  barometreCO2.setScaleLabels(scaleLabelsCO2);
  barometreCO2.setScaleFontSize(18);
  barometreCO2.setScaleFontName("Times New Roman bold");
  barometreCO2.setScaleFontColor(color(200, 30, 70));
  barometreCO2.setArcColor(color(141, 113, 178));
  barometreCO2.setArcThickness(5);
  barometreCO2.setNeedleThickness(3);
  barometreCO2.setMinScaleValue(0);
  barometreCO2.setMaxScaleValue(2500);
  barometreCO2.setMinInputSignal(0);
  barometreCO2.setMaxInputSignal(2500);
  
  //  barometrePresio para CO
  
  barometrePresio = new Meter(this, mx + mw + 5, my + 270);
  barometrePresio.setMeterWidth((int)Math.round((float)width / 3.59090909090909090909));
  barometrePresio.setTitleFontSize(20);
  barometrePresio.setTitleFontName("Arial bold");
  barometrePresio.setTitle("Pressió (mb)");
  barometrePresio.setDisplayDigitalMeterValue(true);  
  String[] scaleLabelsPresio = {"1000", "1010", "1020", "1030", "1040", "1050", "1060", "1070", "1080", "1090", "1100"};
  barometrePresio.setScaleLabels(scaleLabelsPresio);
  barometrePresio.setScaleFontSize(18);
  barometrePresio.setScaleFontName("Times New Roman bold");
  barometrePresio.setScaleFontColor(color(200, 30, 70));  
  barometrePresio.setArcColor(color(141, 113, 178));
  barometrePresio.setArcThickness(5);
   // Cambiado a 1100 para reflejar el nuevo rango deseado
  barometrePresio.setNeedleThickness(3);
  barometrePresio.setMinScaleValue(1000);
  barometrePresio.setMaxScaleValue(1100);
  barometrePresio.setMinInputSignal(1000);
  barometrePresio.setMaxInputSignal(1100);
  
 
  // barometreCO2 para NO2
  
  barometreNO2 = new Meter(this, mx , (2*270)+my );
  barometreNO2.setMeterWidth((int)Math.round((float)width / 3.59090909090909090909));
  barometreNO2.setTitleFontSize(20);
  barometreNO2.setTitleFontName("Arial bold");
  barometreNO2.setTitle("NO2 (ppm)");
  barometreNO2.setDisplayDigitalMeterValue(true);
  String[] scaleLabelsLlum = {"0", "250", "500", "750", "1000", "1250", "1500", "1750", "2000", "2250", "2500"};
  barometreNO2.setScaleLabels(scaleLabelsLlum);
  barometreNO2.setScaleFontSize(18);
  barometreNO2.setScaleFontName("Times New Roman bold");
  barometreNO2.setScaleFontColor(color(200, 30, 70));
  barometreNO2.setArcColor(color(141, 113, 178));
  barometreNO2.setArcThickness(5);
  barometreNO2.setNeedleThickness(3);
  barometreNO2.setMinScaleValue(0);
  barometreNO2.setMaxScaleValue(2500);
  barometreNO2.setMinInputSignal(0);
  barometreNO2.setMaxInputSignal(2500);
  
  // barometreCO2 para CO
  
  barometreCO = new Meter(this, mx + mw + 5,2*(270)+ my);
  barometreCO.setMeterWidth((int)Math.round((float)width / 3.59090909090909090909));
  barometreCO.setTitleFontSize(20);
  barometreCO.setTitleFontName("Arial bold");
  barometreCO.setTitle("CO (ppm)");
  barometreCO.setDisplayDigitalMeterValue(true);  
  String[] scaleLabelsCO = {"0", "250", "500", "750", "1000", "1250", "1500", "1750", "2000", "2250", "2500"};
  barometreCO.setScaleLabels(scaleLabelsCO);
  barometreCO.setScaleFontSize(18);
  barometreCO.setScaleFontName("Times New Roman bold");
  barometreCO.setScaleFontColor(color(200, 30, 70));  
  barometreCO.setArcColor(color(141, 113, 178));
  barometreCO.setArcThickness(5);
  barometreCO.setNeedleThickness(3);
  barometreCO.setMinScaleValue(0);
  barometreCO.setMaxScaleValue(2500);
  barometreCO.setMinInputSignal(0);
  barometreCO.setMaxInputSignal(2500);
  
  // Barómetro para la altitud
  
  barometreAltitud = new Meter(this, width - (mw + 5), my);
  barometreAltitud.setMeterWidth((int)Math.round((float)width / 3.59090909090909090909));
  barometreAltitud.setTitleFontSize(20);
  barometreAltitud.setTitleFontName("Arial bold");
  barometreAltitud.setTitle("Altitud (m)");
  barometreAltitud.setDisplayDigitalMeterValue(true);
  String[] scaleLabelsAltitud = {"0", "500", "1000","1500","2000", "2500", "3000", "3500", "4000", "4500", "5000"};
  barometreAltitud.setScaleLabels(scaleLabelsAltitud);
  barometreAltitud.setScaleFontSize(18);
  barometreAltitud.setScaleFontName("Times New Roman bold");
  barometreAltitud.setScaleFontColor(color(200, 30, 70));
  barometreAltitud.setArcColor(color(141, 113, 178));
  barometreAltitud.setArcThickness(5);
  barometreAltitud.setNeedleThickness(3);
  barometreAltitud.setMinScaleValue(0); 
  barometreAltitud.setMaxScaleValue(5000); 
  barometreAltitud.setMinInputSignal(0);
  barometreAltitud.setMaxInputSignal(5000);

  // Barómetro para la velocidad de caída
  
  barometreVelocidad = new Meter(this, width - (mw + 5), my + 270); 
  barometreVelocidad.setMeterWidth((int)Math.round((float)width / 3.59090909090909090909));
  barometreVelocidad.setTitleFontSize(20);
  barometreVelocidad.setTitleFontName("Arial bold");
  barometreVelocidad.setTitle("Velocitat de caiguda (km/h)");
  barometreVelocidad.setDisplayDigitalMeterValue(true);
  String[] scaleLabelsVelocitat = {"0", "10", "20", "30", "40", "50", "60", "70", "80", "90", "100"};
  barometreVelocidad.setScaleLabels(scaleLabelsVelocitat);
  barometreVelocidad.setScaleFontSize(18);
  barometreVelocidad.setScaleFontName("Times New Roman bold");
  barometreVelocidad.setScaleFontColor(color(200, 30, 70));
  barometreVelocidad.setArcColor(color(141, 113, 178));
  barometreVelocidad.setArcThickness(5);
  barometreVelocidad.setNeedleThickness(3);
  barometreVelocidad.setMinScaleValue(0);
  barometreVelocidad.setMaxScaleValue(100);
  barometreVelocidad.setMinInputSignal(0);
  barometreVelocidad.setMaxInputSignal(100);

  // Crear el archivo de texto
  createNewFile();
}

void draw() {
  image(image1, barometreTVOC.getMeterX() + 5 + barometreTVOC.getMeterWidth(), barometreTVOC.getMeterY() + 5, image1.width +20, image1.height+5);
  image(image2, barometreTVOC.getMeterX() + barometreTVOC.getMeterWidth() + 5, barometreTVOC.getMeterY() + image1.height +100, image2.width, image2.height+5);
  textSize(30);
  fill(0, 255, 0);
  textAlign(CENTER);
  textSize(30);
  fill(0, 255, 0);
  text("MolinsSat estació de terra - Institut Bernat el Ferrer", width/2, 40);
  image(Icono, width - Icono.width - 10, height - Icono.height - 10); 
  if (port != null && port.available() > 0) {
    String val = port.readString();
    list = split(val, ',');

    if (list.length >= 6) { // aquí es configura el llarg de la llista de valors que tens
      float T = Math.round(float(list[2]));
      float TVOC = Math.round(float(list[0]));
      float CO2 = Math.round(float(list[1]));
      float Presio = Math.round(float(list[3]));
      float NO2 = Math.round(float(list[4]));
      float CO = Math.round(float(list[5]));
      float AltitudGPS = Math.round(float(list[6]));
      float Velocitat = Math.round(float(list[8]));
      latitud = Float.parseFloat(list[7]);
      longitud = Float.parseFloat(list[8]);
      
      
      println("Temperatura: " + T + " ºC  " + "TVOC: " + TVOC + " ppb  " + "Diòxid de carboni: " + CO2 + " ppm  " + "Presio: " + Presio + " mb  " + "Dioxid de nitrogen: " + NO2 + " ppm  " + "Monòxid de carboni: " + CO + " ppm  " + "Altura sobre el nivell del mar: " + AltitudGPS + " m  " + "Velocitat de caiguda:" + Velocitat +" km/h  "+ "LongitudGPS: " + longitud + "  LatitudGPS: " + latitud);
      
      barometreTemperatura.updateMeter(int(T));
      barometreTVOC.updateMeter(int(TVOC));
      barometreCO2.updateMeter(int(CO2));
      barometrePresio.updateMeter(int(Presio)); 
      barometreNO2.updateMeter(int(NO2));
      barometreCO.updateMeter(int(CO));
      barometreAltitud.updateMeter(int(AltitudGPS));
      barometreVelocidad.updateMeter(int(Velocitat));
      
      // Escribir los datos en el archivo de texto
      output.println( day() + "/" + month() + "/" + year() + " " + hour() + ":" + minute() + ":" + second());
      output.println("Temperatura: " + T + " C");
      output.println("TVOC: " + TVOC + " ppb");
      output.println("Diòxid de carboni: " + CO2 + " ppm");
      output.println("Preso: " + Presio + " mb"); 
      output.println("Dioxid de nitrogen: " + NO2 + " ppm");
      output.println("Monòxid de carboni: "  + CO +  " ppm ");
      output.println("Altura sobre el nivell del mar: " + AltitudGPS + " m  ");
      output.println("Velocitat de caiguda: " + Velocitat +" km/h  ");
      output.println("LongitudGPS: " + longitud);
      output.println("LatitudGPS: " + latitud);
      output.println();
      
    
      delay(3000);
    }
  } 
  else {
    println("Esperando datos...");
    // Muestra los medidores con valores predeterminados o congelados
    barometreTemperatura.updateMeter(0); // Valor predeterminado para la temperatura
    barometreTVOC.updateMeter(0); // Valor predeterminado para la humedad
    barometreCO2.updateMeter(0); // Valor predeterminado para el CO2
    barometrePresio.updateMeter(0); // Valor predeterminado para Presio
    barometreNO2.updateMeter(0); // Valor predeterminado para NO2
    barometreCO.updateMeter(0);
    barometreAltitud.updateMeter(0); 
    barometreVelocidad.updateMeter(0); 
    
    delay(3000);
  }
  fill(0,0,0); // Rellenar con el color de fondo para borrar el texto anterior
  noStroke();
  
  rect(1140,600,325,85); // Área de texto de longitud
  
textAlign(LEFT, BOTTOM);
textSize(30);
fill(255);
text("Latitud:  " + latitud, width - (Icono.width + 77 ), height - (Icono.height +28)); // Mostrar el valor de la latitud

textAlign(LEFT, BOTTOM);
textSize(30);
fill(255);
text("Longitud:  " + longitud, width - (Icono.width + 77), height - (Icono.height +68)); // Mostrar el valor de la longitud
delay(3000);
}

void createNewFile() {
  String[] monthNames = {"Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"};
  String filename = year() + "/" + monthNames[month() - 1] + "/" + "dades_" + day() + "_" + monthNames[month() - 1] + "_" + year() + "/" + hour() + "h " + minute() + "m " + second() + "s" + ".txt"; // Generar nombre de archivo único
  output = createWriter(filename); // Crear archivo de texto
  println("Archivo creado: " + filename);
}

void exit() {
  if (output != null) {
    output.flush(); 
    output.close(); 
  }
  super.exit(); 
}

Última modificación: domingo, 9 de marzo de 2025, 18:25