CEN-3024-Code-Implementation/Climate.java
2024-04-13 20:02:33 -04:00

96 lines
3.8 KiB
Java

//for all arrays, index 0 is driver's side, index 1 is passenger's side
public class Climate {
private int[] targetTemp; //array to store temp preference entered by user
private int[] currentTemp; //stores current internal temp from last check
private int externalTemp; //stores current external temp from last check
private boolean[] coolingActive; //whether cooling is toggled on (true) or off (false)
private boolean[] heatingActive; //whether heating is toggled on (true) or off (false)
public enum fanLevels {OFF, LOW, MED, HI}; //standardization of fan levels
fanLevels[] fanSpeed; //array to store fan speeds, zones match temp indices
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() {
updateCurrentTemps(); //check current temps before actioning logic
if (externalTemp >= avgTargetTemp()) { //puts logic into "cooling" mode
//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;}
} else if (externalTemp < avgTargetTemp()) { //puts logic into "heating" mode
//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;}
}
}
public void setFanSpeeds(String driver, String passenger) { //maps a string passed in to the appropriate enum value
switch (driver) {
case "OFF":
fanSpeed[0] = fanLevels.OFF;
break;
case "LOW":
fanSpeed[0] = fanLevels.LOW;
break;
case "MED":
fanSpeed[0] = fanLevels.MED;
break;
case "HI":
fanSpeed[0] = fanLevels.HI;
break;
}
switch (passenger) {
case "OFF":
fanSpeed[1] = fanLevels.OFF;
break;
case "LOW":
fanSpeed[2] = fanLevels.LOW;
break;
case "MED":
fanSpeed[3] = fanLevels.MED;
break;
case "HI":
fanSpeed[4] = fanLevels.HI;
break;
}
}
public String[] getFanSpeeds() {
String[] workingString = {fanSpeed[0].toString(), fanSpeed[1].toString()};
return workingString;
}
}