/
startup
77 lines (65 loc) · 1.56 KB
/
startup
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
-- vim: syntax=lua
local monitor = peripheral.wrap("left")
local reactor = peripheral.wrap("BigReactors-Reactor_0")
local turbine = peripheral.wrap("BigReactors-Turbine_0")
function reset()
reactor.setAllControlRodLevels(100)
turbine.setInductorEngaged(false)
end
function hysteresis(a, b)
local flag = false
return function(val)
flag = flag or (val <= a)
flag = flag and (val < b)
return flag
end
end
function power()
local state = hysteresis(1e5, 9e5)
while true do
turbine.setInductorEngaged(state(turbine.getEnergyStored()))
sleep(0.2)
end
end
function speed()
local state = hysteresis(1750, 1850)
while true do
reactor.setActive(state(turbine.getRotorSpeed()))
sleep(0.2)
end
end
function temperature()
local dec = hysteresis(110, 120)
local inc = hysteresis(-130, -120)
local num = {[false] = 0, [true] = 1}
while true do
if reactor.getActive() then
local temp = reactor.getCasingTemperature()
reactor.setAllControlRodLevels(reactor.getControlRodLevel(0) - num[dec(temp)] + num[inc(-temp)])
end
sleep(4)
end
end
function refill()
while reactor.getFuelAmount() > 4e3 do
sleep(1)
end
print("Refill and reboot")
end
function status()
local past = 0
while true do
local present = turbine.getEnergyStored()
print((present - past) / 20)
past = present
sleep(1)
end
end
monitor.setTextScale(2.0)
local screen = term.redirect(monitor)
term.clear()
term.setCursorPos(1, 1)
reset()
parallel.waitForAny(power, speed, temperature, refill, status)
reset()
term.redirect(screen)