From dbfb3b6bb0f165c8bbc568b3527040e30cb8e2e1 Mon Sep 17 00:00:00 2001 From: Arity-T Date: Tue, 11 Feb 2025 16:30:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=BE=D0=B3=D0=B8=D0=BA=D0=B0=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D0=BB=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ru/spbstu/telematics/java/App.java | 16 +++--- .../ru/spbstu/telematics/java/Controller.java | 50 ++++++++++++++++++- 2 files changed, 56 insertions(+), 10 deletions(-) diff --git a/lab3/src/main/java/ru/spbstu/telematics/java/App.java b/lab3/src/main/java/ru/spbstu/telematics/java/App.java index 146e6f7..47f0751 100644 --- a/lab3/src/main/java/ru/spbstu/telematics/java/App.java +++ b/lab3/src/main/java/ru/spbstu/telematics/java/App.java @@ -1,13 +1,11 @@ package ru.spbstu.telematics.java; -/** - * Hello world! - * - */ -public class App -{ - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); +public class App { + public static void main(String[] args) { + Room room = new Room(); + Settings settings = new Settings(28, 0.4); + Controller controller = new Controller(room, settings); + Thread controllerThread = new Thread(controller); + controllerThread.start(); } } diff --git a/lab3/src/main/java/ru/spbstu/telematics/java/Controller.java b/lab3/src/main/java/ru/spbstu/telematics/java/Controller.java index 1f43419..3eaab87 100644 --- a/lab3/src/main/java/ru/spbstu/telematics/java/Controller.java +++ b/lab3/src/main/java/ru/spbstu/telematics/java/Controller.java @@ -7,14 +7,62 @@ package ru.spbstu.telematics.java; * комнаты напрямую. */ public class Controller implements Runnable { - private Room room; private Settings settings; private Sensor sensor; + private Thread sensorThread; private Heater heater; + private Thread heaterThread; private Fan fan; + private Thread fanThread; + + public Controller(Room room, Settings settings) { + this.settings = settings; + + sensor = new Sensor(room); + sensorThread = new Thread(sensor); + + heater = new Heater(room); + heaterThread = new Thread(heater); + + fan = new Fan(room); + fanThread = new Thread(fan); + } + + private long updateIntervalMs = 500; + private double tolerance = 0.01; @Override public void run() { + sensorThread.start(); + heaterThread.start(); + fanThread.start(); + while (!Thread.interrupted()) { + if (sensor.getTemperature() < settings.getTemperature() * (1 - tolerance)) { + heater.turnOn(); + } else { + heater.turnOff(); + } + + if (sensor.getHumidity() > settings.getHumidity() * (1 + tolerance)) { + fan.turnOn(); + } else { + fan.turnOff(); + } + + Utils.sleep(updateIntervalMs); + } + + sensorThread.interrupt(); + heaterThread.interrupt(); + fanThread.interrupt(); + + try { + sensorThread.join(); + heaterThread.join(); + fanThread.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } } }