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