Skip to content

Commit 3ed3d19

Browse files
Create cooling_system
Signed-off-by: Gilbert Algordo <69397216+gilbertalgordo@users.noreply.github.com>
1 parent 0d11211 commit 3ed3d19

1 file changed

Lines changed: 95 additions & 0 deletions

File tree

cooling_system

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import React, { useState, useEffect } from 'react';
2+
3+
function CoolingSystem() {
4+
const [temperature, setTemperature] = useState(25); // Initial temperature
5+
const [coolingEnabled, setCoolingEnabled] = useState(false);
6+
const [targetTemperature, setTargetTemperature] = useState(20);
7+
const [fanSpeed, setFanSpeed] = useState(0); // 0: off, 1: low, 2: medium, 3: high
8+
9+
useEffect(() => {
10+
let interval;
11+
12+
if (coolingEnabled) {
13+
interval = setInterval(() => {
14+
setTemperature((prevTemp) => {
15+
if (prevTemp > targetTemperature) {
16+
const newTemp = prevTemp - 0.5; // Simulate cooling
17+
return newTemp < targetTemperature ? targetTemperature : newTemp;
18+
} else if (prevTemp < targetTemperature) {
19+
const newTemp = prevTemp + 0.2; // Simulate natural heating
20+
return newTemp > targetTemperature ? targetTemperature : newTemp;
21+
} else {
22+
return prevTemp;
23+
}
24+
});
25+
}, 1000); // Update every second
26+
} else {
27+
interval = setInterval(() => {
28+
setTemperature((prevTemp) => prevTemp + 0.1); // Simulate natural heating
29+
}, 1000)
30+
}
31+
32+
return () => clearInterval(interval); // Cleanup interval on unmount or coolingEnabled change
33+
}, [coolingEnabled, targetTemperature]);
34+
35+
useEffect(() => {
36+
if (coolingEnabled && temperature > targetTemperature) {
37+
if (temperature - targetTemperature > 5) {
38+
setFanSpeed(3); // High fan speed
39+
} else if (temperature - targetTemperature > 3) {
40+
setFanSpeed(2); // Medium fan speed
41+
} else {
42+
setFanSpeed(1); // Low fan speed
43+
}
44+
} else {
45+
setFanSpeed(0); // Turn off fan
46+
}
47+
}, [temperature, targetTemperature, coolingEnabled]);
48+
49+
const handleCoolingToggle = () => {
50+
setCoolingEnabled(!coolingEnabled);
51+
};
52+
53+
const handleTargetTemperatureChange = (event) => {
54+
const newTarget = parseInt(event.target.value);
55+
setTargetTemperature(newTarget);
56+
};
57+
58+
const fanSpeedLabels = {
59+
0: 'Off',
60+
1: 'Low',
61+
2: 'Medium',
62+
3: 'High',
63+
};
64+
65+
return (
66+
<div style={{ fontFamily: 'sans-serif', padding: '20px' }}>
67+
<h1>Cooling System</h1>
68+
<p>Current Temperature: {temperature.toFixed(1)}°C</p>
69+
<label>
70+
Target Temperature:
71+
<input
72+
type="number"
73+
value={targetTemperature}
74+
onChange={handleTargetTemperatureChange}
75+
min="15"
76+
max="30"
77+
/>
78+
</label>
79+
<br />
80+
<button onClick={handleCoolingToggle}>
81+
{coolingEnabled ? 'Turn Off Cooling' : 'Turn On Cooling'}
82+
</button>
83+
<p>Cooling: {coolingEnabled ? 'Enabled' : 'Disabled'}</p>
84+
<p>Fan Speed: {fanSpeedLabels[fanSpeed]}</p>
85+
<div style={{marginTop: '20px'}}>
86+
<div style={{width: '200px', height: '20px', backgroundColor: 'lightblue', position: 'relative'}}>
87+
<div style={{width: `${(temperature-10)*3.33}%`, height: '100%', backgroundColor: 'red'}}></div>
88+
</div>
89+
<p>Temperature Visual</p>
90+
</div>
91+
</div>
92+
);
93+
}
94+
95+
export default CoolingSystem;

0 commit comments

Comments
 (0)