From 1ff0612e7a603d67acac01de87a3a37404a5504e Mon Sep 17 00:00:00 2001 From: "nicolas.franco" Date: Fri, 20 Jan 2023 22:02:03 +0100 Subject: [PATCH] ajout de 3 nouveau capteurs --- src/launcher/Launch.java | 23 +++++++++++++----- src/model/Capteur.java | 4 ++-- src/model/CapteurAbstrait.java | 10 ++++---- src/model/CapteurCPU.java | 14 +++++++++++ src/model/CapteurIntervalle.java | 34 +++++++++++++++++++++++++++ src/model/CapteurRealiste.java | 40 ++++++++++++++++++++++++++++++++ src/model/CapteurVirtuel.java | 5 ++-- 7 files changed, 116 insertions(+), 14 deletions(-) create mode 100644 src/model/CapteurCPU.java create mode 100644 src/model/CapteurIntervalle.java create mode 100644 src/model/CapteurRealiste.java diff --git a/src/launcher/Launch.java b/src/launcher/Launch.java index caef86d..cc0d4dc 100644 --- a/src/launcher/Launch.java +++ b/src/launcher/Launch.java @@ -12,6 +12,8 @@ import javafx.scene.layout.StackPane; import javafx.scene.text.Text; import javafx.stage.Stage; import model.Capteur; +import model.CapteurIntervalle; +import model.CapteurRealiste; import view.CapteurView; import view.ImageCtrlView; import view.ThermostatView; @@ -28,26 +30,35 @@ public class Launch extends Application { @Override public void start(Stage primaryStage) throws IOException, InterruptedException { - Capteur captor = new Capteur(1,"CapteurIncroyable", 15); + Capteur captorS = new Capteur(1,"Capteur Simple"); + CapteurIntervalle captorI = new CapteurIntervalle(2,"Capteur Intervalle",0.0,10.0); + CapteurRealiste captorR = new CapteurRealiste(2,"Capteur Realiste", 5.0, 10.0); + + // FXML NOT WORKING /*Stage thermostatStage = new Stage(); CapteurView capteurView = new ImageCtrlView(captor,"view/Image.fxml","mon titre"); ThermostatView thermostatView = new ThermostatView(captor,"view/Thermostat.fxml","mon titre"); - - Random random = new Random(); + */ + //Random random = new Random(); Thread t = new Thread() { public void run() { while (true) { - captor.setTemp(random.nextInt(30)); + captorS.genTemp(); + captorI.genTemp(); + captorR.genTemp(); try { - sleep(1000); + System.out.println(captorS.getNom() + ": " + captorS.getTemp().getValue() + " °C"); + System.out.println(captorI.getNom() + ": " + captorI.getTemp().getValue() + " °C"); + System.out.println(captorR.getNom() + ": " + captorR.getTemp().getValue() + " °C"); + sleep(4000); } catch (InterruptedException e) { throw new RuntimeException(e); } } } }; - t.start();*/ + t.start(); } } diff --git a/src/model/Capteur.java b/src/model/Capteur.java index b2126d1..0caee75 100644 --- a/src/model/Capteur.java +++ b/src/model/Capteur.java @@ -8,8 +8,8 @@ import java.util.Random; public class Capteur extends CapteurAbstrait { - public Capteur(int id, String nom, double pTemp){ - super(id,nom,pTemp); + public Capteur(int id, String nom){ + super(id,nom); } @Override diff --git a/src/model/CapteurAbstrait.java b/src/model/CapteurAbstrait.java index e406198..c17ce47 100644 --- a/src/model/CapteurAbstrait.java +++ b/src/model/CapteurAbstrait.java @@ -8,13 +8,14 @@ public abstract class CapteurAbstrait { private String nom; private ObjectProperty temp = new SimpleObjectProperty<>(); - CapteurAbstrait(int id, String nom, Double temp){ + CapteurAbstrait(int id, String nom){ this.id = id; this.nom = nom; - this.temp.setValue(temp); + this.temp.setValue(0.0); } public abstract ObjectProperty genTemp(); + /* Getters - Setters */ public int getId() { return id; } @@ -35,7 +36,8 @@ public abstract class CapteurAbstrait { return temp; } - public void setTemp(int pTemp) { - this.temp.set((double)pTemp); + public void setTemp(double pTemp) { + this.temp.setValue(pTemp); } + } diff --git a/src/model/CapteurCPU.java b/src/model/CapteurCPU.java new file mode 100644 index 0000000..6f56e7a --- /dev/null +++ b/src/model/CapteurCPU.java @@ -0,0 +1,14 @@ +package model; + +import javafx.beans.property.ObjectProperty; + +public class CapteurCPU extends CapteurAbstrait { + CapteurCPU(int id, String nom) { + super(id, nom); + } + + @Override + public ObjectProperty genTemp() { + return null; + } +} diff --git a/src/model/CapteurIntervalle.java b/src/model/CapteurIntervalle.java new file mode 100644 index 0000000..2573cb3 --- /dev/null +++ b/src/model/CapteurIntervalle.java @@ -0,0 +1,34 @@ +package model; + +import javafx.beans.property.ObjectProperty; + +import java.util.Random; + +public class CapteurIntervalle extends CapteurAbstrait{ +/* + Un capteur peut générer une température dont la valeur est aléatoire; + Les températures ne pouvant descendre sous un certain seuil, on veut + aussi un capteur plus réaliste qui génère des températures dont la valeur + est comprise dans un certain intervalle défini à la création (et dont le + minimum ne peut être inférieur à 0°K); +*/ + public CapteurIntervalle(int id, String nom, Double minVal, Double maxVal){ + super(id,nom); + // si min inférieur a zero, alors passe a 0 + if(minVal < 0){ + minVal = (double) 0; + } + this.minVal = minVal; + this.maxVal = maxVal; + } + + private Double minVal; + private Double maxVal; + @Override + public ObjectProperty genTemp() { + Random rand = new Random(); + double randomValue = rand.nextDouble(this.maxVal - this.minVal) + minVal; + this.setTemp(randomValue); + return this.getTemp(); + } +} diff --git a/src/model/CapteurRealiste.java b/src/model/CapteurRealiste.java new file mode 100644 index 0000000..1b7d0e7 --- /dev/null +++ b/src/model/CapteurRealiste.java @@ -0,0 +1,40 @@ +package model; + +import javafx.beans.property.ObjectProperty; + +import java.util.Random; + +public class CapteurRealiste extends CapteurAbstrait{ +/* + Pour rendre les variations plus réalistes on veut un capteur qui génère des + températures dont la variation est bornée en fonction d'un intervalle [-d;+d] + et d'une température initiale T (tous deux définis à la création) + + t0 = T + ti+1 = ti + random(-d,+d) +*/ + public CapteurRealiste(int id, String nom, double tZero, double borne) { + super(id, nom); + this.borne = borne; + this.tZero = tZero; + this.setTemp(tZero); + } + + private Double borne; + private Double tZero; + + @Override + public ObjectProperty genTemp() { + Random rand = new Random(); + + double randomValue = rand.nextDouble() * 2 * this.borne - this.borne; + /* rand.nextDouble fait un double entre 0 et 1. + * Ensuite on fait * 2*borne pour que l'intervale soit entre 0 et 2*borne. + * On soustrait borne après comme ça on a un nombre entre -borne et borne. + */ + + double newTemp = this.getTemp().getValue() + randomValue; //tzero + random entre -borne et borne + this.setTemp(newTemp); + return this.getTemp(); + } +} diff --git a/src/model/CapteurVirtuel.java b/src/model/CapteurVirtuel.java index adc4152..65a29c2 100644 --- a/src/model/CapteurVirtuel.java +++ b/src/model/CapteurVirtuel.java @@ -9,8 +9,8 @@ public class CapteurVirtuel extends CapteurAbstrait { private List capteurs; - CapteurVirtuel(List cs, int id, String nom, Double temp){ - super(id, nom, temp); + CapteurVirtuel(List cs, int id, String nom){ + super(id, nom); this.capteurs = cs; } public void addCapteur(CapteurAbstrait c){ @@ -22,6 +22,7 @@ public class CapteurVirtuel extends CapteurAbstrait { } @Override + // calcule la temperature moyenne des capteurs sa collection de capteurs public ObjectProperty genTemp() { ObjectProperty avg = new SimpleObjectProperty<>(); avg.setValue((double) 0);