Добавил минимальное логирование
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
package ru.spbstu.telematics.java;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
public class App {
|
||||
public static void main(String[] args) {
|
||||
Locale.setDefault(Locale.ENGLISH);
|
||||
|
||||
Room room = new Room();
|
||||
Settings settings = new Settings(28, 0.4);
|
||||
Controller controller = new Controller(room, settings);
|
||||
|
||||
@@ -7,6 +7,7 @@ package ru.spbstu.telematics.java;
|
||||
* комнаты напрямую.
|
||||
*/
|
||||
public class Controller implements Runnable {
|
||||
private Room room;
|
||||
private Settings settings;
|
||||
private Sensor sensor;
|
||||
private Thread sensorThread;
|
||||
@@ -16,6 +17,7 @@ public class Controller implements Runnable {
|
||||
private Thread fanThread;
|
||||
|
||||
public Controller(Room room, Settings settings) {
|
||||
this.room = room;
|
||||
this.settings = settings;
|
||||
|
||||
sensor = new Sensor(room);
|
||||
@@ -31,24 +33,58 @@ public class Controller implements Runnable {
|
||||
private long updateIntervalMs = 500;
|
||||
private double tolerance = 0.01;
|
||||
|
||||
private void log(String string) {
|
||||
System.out.printf("[Controller in room %s] %s\n", room.name, string);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
sensorThread.start();
|
||||
heaterThread.start();
|
||||
fanThread.start();
|
||||
log("Started sensor, heater and fan threads");
|
||||
|
||||
while (!Thread.interrupted()) {
|
||||
if (sensor.getTemperature() < settings.getTemperature() * (1 - tolerance)) {
|
||||
double currentTemperature = sensor.getTemperature();
|
||||
double desiredTemperature = settings.getTemperature();
|
||||
|
||||
if (currentTemperature < desiredTemperature * (1 - tolerance)) {
|
||||
if (!heater.isOn()) {
|
||||
log(String.format(
|
||||
"Turning heater ON (current - %.2fC°, desired %.2fC°)",
|
||||
currentTemperature,
|
||||
desiredTemperature));
|
||||
heater.turnOn();
|
||||
}
|
||||
} else {
|
||||
if (heater.isOn()) {
|
||||
log(String.format(
|
||||
"Turning heater OFF (current - %.2fC°, desired %.2fC°)",
|
||||
currentTemperature,
|
||||
desiredTemperature));
|
||||
heater.turnOff();
|
||||
}
|
||||
}
|
||||
|
||||
if (sensor.getHumidity() > settings.getHumidity() * (1 + tolerance)) {
|
||||
double currentHumidity = sensor.getHumidity();
|
||||
double desiredHumidity = settings.getHumidity();
|
||||
if (currentHumidity > desiredHumidity * (1 + tolerance)) {
|
||||
if (!fan.isOn()) {
|
||||
log(String.format(
|
||||
"Turning fan ON (current - %.2f%%, desired %.2f%%)",
|
||||
currentHumidity * 100,
|
||||
desiredHumidity * 100));
|
||||
fan.turnOn();
|
||||
}
|
||||
} else {
|
||||
if (fan.isOn()) {
|
||||
log(String.format(
|
||||
"Turning fan OFF (current - %.2f%%, desired %.2f%%)",
|
||||
currentHumidity * 100,
|
||||
desiredHumidity * 100));
|
||||
fan.turnOff();
|
||||
}
|
||||
}
|
||||
|
||||
Utils.sleep(updateIntervalMs);
|
||||
}
|
||||
|
||||
@@ -15,6 +15,10 @@ public class Fan implements Runnable {
|
||||
|
||||
private volatile boolean isOn;
|
||||
|
||||
public boolean isOn() {
|
||||
return isOn;
|
||||
}
|
||||
|
||||
public void turnOn() {
|
||||
this.isOn = true;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,10 @@ public class Heater implements Runnable {
|
||||
|
||||
private volatile boolean isOn;
|
||||
|
||||
public boolean isOn() {
|
||||
return isOn;
|
||||
}
|
||||
|
||||
public void turnOn() {
|
||||
this.isOn = true;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,15 @@ import java.util.Random;
|
||||
* Симулирует физические процессы, протекающие в команте.
|
||||
*/
|
||||
public class Room implements Runnable {
|
||||
static private int roomCounter;
|
||||
|
||||
public final String name;
|
||||
|
||||
public Room() {
|
||||
roomCounter++;
|
||||
this.name = "#" + roomCounter;
|
||||
}
|
||||
|
||||
// Температура измеряется в градусах цельсия
|
||||
private volatile double temperature = 24.0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user