Advertisement
minecraft_storm

mekanism-reactor

Dec 2nd, 2024 (edited)
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.32 KB | None | 0 0
  1. reactor = peripheral.find("fissionReactorLogicAdapter")
  2. turbine = peripheral.find("turbineValve")
  3.  
  4. if not reactor or not turbine then
  5.     print("Error: Reactor or Turbine not found!")
  6.     return
  7. end
  8.  
  9. local stored = turbine.getEnergy()
  10. local capacity = turbine.getMaxEnergy()
  11. print("Stored Energy: " .. stored)
  12. print("Max Capacity: " .. capacity)
  13.  
  14. print("Enter desired power level (or 'off' to stop):")
  15. local powerInput = read()
  16. local power = tonumber(powerInput)
  17.  
  18. if powerInput == "off" then
  19.     power = 0
  20. elseif not power then
  21.     print("Invalid input. Defaulting to 90% of capacity.")
  22.     power = capacity * 0.9
  23. end
  24.  
  25. local run = true
  26. local threshold = 0.01 -- Adjustable tolerance
  27. local burnRate = reactor.getActualBurnRate()
  28. local base = burnRate or 0
  29.  
  30. function clamp(value, min, max)
  31.     if value < min then
  32.         return min
  33.     elseif value > max then
  34.         return max
  35.     else
  36.         return value
  37.     end
  38. end
  39.  
  40. print("Starting control loop. Press 'q' to stop.")
  41. while run do
  42.     -- Send a manual event to prevent blocking
  43.     os.queueEvent("custom_event")
  44.     local event, key = os.pullEvent()
  45.  
  46.     -- Key handling to stop the loop
  47.     if event == "key" and key == keys.q then
  48.         print("Exiting control loop.")
  49.         run = false
  50.         break
  51.     end
  52.  
  53.     -- Get current energy levels
  54.     local stored = turbine.getEnergy()
  55.     local setpoint = (turbine.getMaxEnergy()/100)*power
  56.     local maxBurnRate = reactor.getMaxBurnRate()
  57.  
  58.     -- Calculate the difference between stored energy and the setpoint
  59.     local diffrence = stored - setpoint
  60.  
  61.     -- Adjust burn rate based on the difference
  62.     if diffrence > 0 then
  63.         -- Stored energy is above setpoint; decrease burn rate
  64.         burnRate = burnRate - (diffrence / capacity) * 5
  65.     elseif diffrence < 0 then
  66.         -- Stored energy is below setpoint; increase burn rate
  67.         burnRate = burnRate + (math.abs(diffrence) / capacity) * 5
  68.     end
  69.  
  70.     -- Clamp burn rate within allowable limits
  71.     burnRate = clamp(burnRate, 0, maxBurnRate)
  72.  
  73.     -- Set the reactor burn rate
  74.     reactor.setBurnRate(burnRate)
  75.  
  76.     -- Debugging output
  77.     print("Stored Energy: " .. stored)
  78.     print("Setpoint: " .. setpoint)
  79.     print("Burn Rate: " .. burnRate)
  80.  
  81.     -- Small delay to control loop frequency
  82.     sleep(0.5)
  83. end
  84.  
  85.  
  86.  
  87.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement