Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- reactor = peripheral.wrap("BigReactors-Reactor_6")
- monitor = peripheral.wrap("monitor_47")
- -- Control Vars
- setpoint = 21000
- tolerance = 500
- rod_level = 84
- step = 0.5 -- loop time
- i = 0 -- control iterator
- rate = 20 -- how many steps between control rod updates
- -- Reactor init
- reactor.setActive(true)
- reactor.setAllControlRodLevels(rod_level)
- -- Monitor init
- monitor.setTextScale(1)
- monitor.setTextColor(colors.white)
- monitor.setBackgroundColor(colors.black)
- size_x, size_y = monitor.getSize()
- -- main loop
- while true do
- -- Reactor vars
- active = reactor.getActive()
- raw_power = reactor.getEnergyProducedLastTick()
- power = math.floor(raw_power/10)/100
- fuel = math.floor(reactor.getFuelAmount()/reactor.getFuelAmountMax()*10000)/100
- f_rate = math.floor(reactor.getFuelConsumedLastTick()*1000)/1000
- -- Reactor control loop
- if i >= rate - 1 then
- reactor.setAllControlRodLevels(rod_level)
- if raw_power < setpoint - tolerance then
- rod_level = rod_level - 1
- elseif raw_power > setpoint + tolerance then
- rod_level = rod_level + 1
- end
- i = 0
- else
- i = i + 1
- end
- if rod_level < 0 then rod_level = 0 end
- if rod_level > 100 then rod_level = 100 end
- -- Reactor status
- if active then
- monitor.setCursorPos(math.floor(size_x/2)-6,1)
- monitor.write("Reactor: ")
- monitor.setTextColor(colors.green)
- monitor.write("Active")
- else
- monitor.setCursorPos(math.floor(size_x/2)-7,1)
- monitor.write("Reactor: ")
- monitor.setTextColor(colors.red)
- monitor.write("Inactive")
- end
- monitor.setTextColor(colors.white)
- -- Reactor power output
- monitor.setCursorPos(2,2)
- monitor.write("Power Output: " .. tostring(power) .. "K RF/t")
- -- Reactor fuel Level
- monitor.setCursorPos(2,3)
- monitor.write("Fuel: ")
- if fuel < 20 then
- monitor.setTextColor(colors.red)
- elseif fuel < 40 then
- monitor.setTextColor(colors.orange)
- elseif fuel < 70 then
- monitor.setTextColor(colors.yellow)
- else
- monitor.setTextColor(colors.green)
- end
- monitor.write(tostring(fuel) .. "%")
- monitor.setTextColor(colors.white)
- -- Fuel Burnup Rate
- monitor.setCursorPos(2,4)
- monitor.write("Fuel Rate: " .. tostring(f_rate) .. "mB/t ")
- -- Control Rod Level Display
- if rod_level < 10 then
- monitor.setCursorPos(size_x-2,2)
- else
- monitor.setCursorPos(size_x-3,2)
- end
- monitor.write(tostring(rod_level) .. "%")
- for j = 1,size_y-3 do
- monitor.setCursorPos(size_x-3,2+j)
- monitor.setBackgroundColor(colors.yellow)
- monitor.write(" ")
- if j < 16/100*rod_level then
- monitor.setBackgroundColor(colors.gray)
- monitor.write(" ")
- monitor.setBackgroundColor(colors.yellow)
- monitor.write(" ")
- else
- monitor.write(" ")
- end
- end
- monitor.setBackgroundColor(colors.black)
- os.sleep(step)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement