Guest User

pressure.lua

a guest
Nov 1st, 2022
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.10 KB | None | 0 0
  1. --[[
  2. Pressure program
  3. By Out-Feu
  4. version 0.0.1
  5. Free to distribute/alter
  6. so long as proper credit to original
  7. author is maintained.
  8. Simply connect a pressured block in any way and start this program
  9. --]]
  10.  
  11.  
  12. function hasMethod(side, method)
  13.  for i, name in pairs(peripheral.getMethods(side)) do
  14.   if name == method then
  15.    return true
  16.   end
  17.  end
  18.  return false
  19. end
  20.  
  21. function setRedstoneSignal(signal)
  22.  if (restoneSide == nil or restoneSide == "all" or redstoneSide == "") then
  23.   sides = redstone.getSides()
  24.   for k, side in pairs(sides) do
  25.    redstone.setOutput(side, signal)
  26.   end
  27.  else
  28.   redstone.setOutput(redstoneSide, signal)
  29.  end
  30. end
  31.  
  32. -------------------------------------------------------------------------------
  33.  
  34. per = peripheral.getNames()
  35. for k, side in pairs(per) do
  36.  if hasMethod(side, "getPressure") and (pressure == nil or pressure.getDangerPressure() > peripheral.wrap(side).getDangerPressure()) then
  37.   pressure = peripheral.wrap(side)
  38.  end
  39. end
  40. per = nil
  41.  
  42. if pressure == nil then
  43.  printError("No pressured block found")
  44.  return
  45. else
  46.  print("Danger pressure: " .. pressure.getDangerPressure() .. " bar")
  47. end
  48.  
  49. dangerTimer = 10 -- How often the program must check the pressure when pressure > dangerPressure (in seconds)
  50. pressureTimer = 1 -- How often the program must check the pressure when pressure < dangerPressure (in seconds)
  51. pressureMargin = 0.5 -- Margin before reaching the danger pressure at which the computer must emit a redstone signal
  52. dangerPressure = pressure.getDangerPressure() - pressureMargin -- Pressure at which the computer emit a redstone signal
  53. inverted = false -- If true, emit redstone while pressure < dangerPressure
  54. restoneSide = "all" -- Side on which the redstone signal is emitted ('all' to emit on all sides)
  55.  
  56. --------------------------------------------------------------------------------
  57.  
  58. os.startTimer(0)
  59. repeat --main loop
  60.  os.pullEvent("timer")
  61.  if pressure.getPressure() < dangerPressure then
  62.     setRedstoneSignal(inverted)
  63.     os.startTimer(pressureTimer)
  64.  else
  65.     setRedstoneSignal(not inverted)
  66.     os.startTimer(dangerTimer)
  67.  end
  68. until false
Advertisement
Add Comment
Please, Sign In to add comment