129 lines
4.7 KiB
Java
129 lines
4.7 KiB
Java
//for all arrays, index 0 is driver's side, index 1 is passenger's side
|
|
|
|
public class Climate implements Runnable {
|
|
private int[] targetTemp = new int[2]; //array to store temp preference entered by user
|
|
private int[] currentTemp = new int[2]; //stores current internal temp from last check
|
|
private int externalTemp; //stores current external temp from last check
|
|
private boolean[] coolingActive = new boolean[2]; //whether cooling is toggled on (true) or off (false)
|
|
private boolean[] heatingActive = new boolean[2]; //whether heating is toggled on (true) or off (false)
|
|
public enum fanLevels {OFF, LOW, MED, HI}; //standardization of fan levels
|
|
fanLevels[] fanSpeed = new fanLevels[2];; //array to store fan speeds, zones match temp indices
|
|
|
|
public void run() {
|
|
while (currentTemp[0] != targetTemp[0] || currentTemp[1] != targetTemp[1]) {
|
|
displayInformation();
|
|
activateClimate();
|
|
adjustClimate(0);
|
|
adjustClimate(1);
|
|
HelperFunctions.sleep(1);
|
|
}
|
|
System.out.println("Climate adjustment complete");
|
|
HelperFunctions.pressEnterToContinue();
|
|
}
|
|
|
|
public Climate() {
|
|
targetTemp = new int[2];
|
|
currentTemp = new int[2];
|
|
targetTemp[0] = 72;
|
|
targetTemp[1] = 74;
|
|
updateCurrentTemps();
|
|
fanSpeed = new fanLevels[2];
|
|
fanSpeed[0] = fanLevels.LOW;
|
|
fanSpeed[1] = fanLevels.LOW;
|
|
}
|
|
|
|
public void setTargetTemp(int driverZone, int passengerZone) {
|
|
//temp range should be between 65 F and 90 F, these if statements prohibit temps outside that range
|
|
if (driverZone < 65) {driverZone = 65;}
|
|
if (driverZone > 90) {driverZone = 90;}
|
|
if (passengerZone < 65) {passengerZone = 65;}
|
|
if (passengerZone > 90) {passengerZone = 90;}
|
|
|
|
targetTemp[0] = driverZone;
|
|
targetTemp[1] = passengerZone;
|
|
}
|
|
|
|
private int avgTargetTemp() { //gets internal target average for ease of calculation
|
|
return (targetTemp[0] + targetTemp[1])/2;
|
|
}
|
|
|
|
private void updateCurrentTemps() { //queries temp sensors for current cabin temp
|
|
HelperFunctions tSensor = new HelperFunctions();
|
|
currentTemp = tSensor.internalTempSensors();
|
|
externalTemp = tSensor.externalTempSensors();
|
|
}
|
|
|
|
public int[] getTargetTemps() {
|
|
return targetTemp;
|
|
}
|
|
|
|
public int[] getCurrentTemps() {
|
|
return currentTemp;
|
|
}
|
|
|
|
public void activateClimate() {
|
|
//driver's side
|
|
if (targetTemp[0]+1 < currentTemp[0]) {coolingActive[0] = true;} //provides 1 deg buffer to prevent excessive activation/deactivation
|
|
if (targetTemp[0] >= currentTemp[0]) {coolingActive[0] = false;}
|
|
//passenger's side
|
|
if (targetTemp[1]+1 < currentTemp[1]) {coolingActive[1] = true;}
|
|
if (targetTemp[1] >= currentTemp[1]) {coolingActive[1] = false;}
|
|
//driver's side
|
|
if (targetTemp[0]-1 > currentTemp[0]) {heatingActive[0] = true;}
|
|
if (targetTemp[0] <= currentTemp[0]) {heatingActive[0] = false;}
|
|
//passenger's side
|
|
if (targetTemp[1]-1 > currentTemp[1]) {heatingActive[1] = true;}
|
|
if (targetTemp[1] <= currentTemp[1]) {heatingActive[1] = false;}
|
|
}
|
|
|
|
private void adjustClimate(int zone) {
|
|
if (coolingActive[zone]) {
|
|
currentTemp[zone] = currentTemp[zone] - 1;
|
|
}
|
|
if (heatingActive[zone]) {
|
|
currentTemp[zone] = currentTemp[zone] + 1;
|
|
}
|
|
}
|
|
|
|
public void setFanSpeeds(String driver, String passenger) { //maps a string passed in to the appropriate enum value
|
|
switch (driver) {
|
|
case "OFF": case "1":
|
|
fanSpeed[0] = fanLevels.OFF;
|
|
break;
|
|
case "LOW": case "2":
|
|
fanSpeed[0] = fanLevels.LOW;
|
|
break;
|
|
case "MED": case "3":
|
|
fanSpeed[0] = fanLevels.MED;
|
|
break;
|
|
case "HI": case "4":
|
|
fanSpeed[0] = fanLevels.HI;
|
|
break;
|
|
}
|
|
|
|
switch (passenger) {
|
|
case "OFF": case "1":
|
|
fanSpeed[1] = fanLevels.OFF;
|
|
break;
|
|
case "LOW": case "2":
|
|
fanSpeed[1] = fanLevels.LOW;
|
|
break;
|
|
case "MED": case "3":
|
|
fanSpeed[1] = fanLevels.MED;
|
|
break;
|
|
case "HI": case "4":
|
|
fanSpeed[1] = fanLevels.HI;
|
|
break;
|
|
}
|
|
}
|
|
|
|
public String[] getFanSpeeds() {
|
|
String[] workingString = {fanSpeed[0].toString(), fanSpeed[1].toString()};
|
|
return workingString;
|
|
}
|
|
|
|
private void displayInformation() {
|
|
System.out.print("Left | Current: " + currentTemp[0] + "; Set: " + targetTemp[0] + " || ");
|
|
System.out.print("Right| Current: " + currentTemp[1] + "; Set: " + targetTemp[1] + "\n");
|
|
}
|
|
}
|