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