-- Peripheral setup local modem = peripheral.find("modem") or error("No modem found", 0) local monitor = peripheral.wrap("front") or error("No monitor on front", 0) -- Monitor setup monitor.setTextScale(0.5) monitor.setBackgroundColor(colors.cyan) monitor.clear() local function drawLabel(y, text) monitor.setCursorPos(1, y) monitor.clearLine() monitor.write(text) end local function drawUI() drawLabel(4, "Fuel Feed") drawLabel(5, "-=-=-=-=-=-=-=-") drawLabel(8, "Clutch") drawLabel(9, "-=-=-=-=-=-=-=-") drawLabel(12, "Output") drawLabel(13, "-=-=-=-=-=-=-=-") monitor.setCursorPos(4, 1) monitor.write("Turbine #1") end drawUI() term.clear() term.setCursorPos(1, 1) print("Running...") -- Core Functions local function transmitAndDisplay(channelOut, channelIn, mode, yPos, bgColor, side, pulse) if side then rs.setOutput(side, true) end modem.transmit(channelOut, channelIn, mode) monitor.setCursorPos(1, yPos) monitor.clearLine() monitor.blit(mode, ("0"):rep(#mode), bgColor) if pulse then sleep(1); if side then rs.setOutput(side, false) end end end local function fuelFeed(side, mode, bgColor) transmitAndDisplay(3, 4, mode, 6, bgColor, side, true) end local function shift(side, mode, bgColor) rs.setOutput("left", false) transmitAndDisplay(2, 3, mode, 10, bgColor, side, true) end local function modemCall(channel, callback) modem.open(channel) local _, _, _, _, message = os.pullEvent("modem_message") modem.close(channel) if callback then callback(message) end return message end local function battCall() return tonumber(modemCall(4, function(msg) term.setCursorPos(1, 2) term.clearLine() print(msg) end)) or 0 end local function outputCall() modemCall(5, function(msg) monitor.setCursorPos(1, 14) monitor.clearLine() monitor.write(msg) end) end -- Main control loop local inject, delay = 0, 0 while not rs.getInput("front") do local batt = battCall() local speed = rs.getAnalogInput("right") outputCall() if inject == 1 then delay = delay + 1 end if delay >= 280 then inject, delay = 0, 0 end if speed == 0 then shift("top", "Offline", "eeeeeee") if batt <= 30 and inject == 0 then fuelFeed("bottom", "Engaged", "ddddddd") inject = 1 elseif batt >= 35 then fuelFeed("top", "Offline", "eeeeeee") end elseif speed <= 8 then shift("top", "Low RPM", "1111111") if batt >= 35 then fuelFeed("top", "Offline", "eeeeeee") end else shift("left", "Engaged", "ddddddd") if batt >= 35 then fuelFeed("top", "Offline", "eeeeeee") end end end