computercraft/react.lua
2021-01-09 03:30:47 +01:00

85 lines
1.9 KiB
Lua

--regulate in between these in normal operation
NORMAL_THRESHOLD_U = 8000000
NORMAL_THRESHOLD_L = 7000000
--control rod pos for normal operation
NORMAL_ROD_POS = 81
--proportionally increase production when energy
--storage drops below this level
--(by removing control rods)
HIGH_THRESHOLD = 6000000
local active = false
local ctrl_rods = NORMAL_ROD_POS
local reactor = peripheral.wrap("back")
local mon = peripheral.wrap("right")
print("Monitoring reactor...")
while (true)
do
--setup monitor
mon.clear()
--get reactor energy
local energy = reactor.getEnergyStored()
--display
mon.setCursorPos(1, 1) --why is there no print() ???
mon.write(energy)
mon.write("RF")
if (energy > NORMAL_THRESHOLD_U)
then
active = false
else
if (energy < NORMAL_THRESHOLD_L)
then
active = true
if (energy < HIGH_THRESHOLD)
then
--proportional control
ctrl_rods = NORMAL_ROD_POS * (energy / HIGH_THRESHOLD)
end
end
end
--actually set state
mon.setCursorPos(1, 2)
if (active)
then
reactor.setActive(true)
mon.write("On")
else
reactor.setActive(false)
mon.write("Off")
end
mon.setCursorPos(1, 4)
reactor.setAllControlRodLevels(ctrl_rods)
mon.write(ctrl_rods)
mon.write("%")
--display power produced
mon.setCursorPos(1, 3)
mon.write(math.floor(reactor.getEnergyProducedLastTick()))
mon.write("RF/t")
--also check if fuel has run out
--(if the fuel inside the reactor isn't
--getting refilled anymore)
local deltaFuel = reactor.getFuelAmountMax() - reactor.getFuelAmount()
if (deltaFuel > 1000) --more than 1 bucket
then
mon.setCursorPos(1, 5)
mon.write("REFUEL!")
end
sleep(1)
end