Requisitos de finalización



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