Advertisement
Guest User

autoDoorv2

a guest
Mar 8th, 2013
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.58 KB | None | 0 0
  1. -- Automatic door opener v2: By -Molinko
  2.  
  3. local cmdArgs = {...} --cmd line arguments
  4.  
  5. os.loadAPI("ocs/apis/sensor")
  6.  
  7. if #cmdArgs < 2 then
  8.   print("Usage: 'progName' 'redstoneOutSide' ',' 'radius'")  
  9.   print("redstoneOutputSide cant be same as sensor side..")  
  10. end
  11.  
  12. local proxSide
  13. local dSide = tostring(cmdArgs[1]) -- door output side
  14. local radius = tonumber(cmdArgs[2]) -- sensitivity to proximity
  15. local sides = rs.getSides()
  16. local offset = {}
  17.  
  18. --[[ Functions ]]--
  19.  
  20. local function findPeripheral(type)
  21.   for key, side in pairs(sides) do
  22.     if peripheral.isPresent(side) and peripheral.getType(side) == type then
  23.       return side
  24.     end
  25.   end
  26. end
  27.  
  28. local function findSensor()
  29.   local side = findPeripheral("sensor")
  30.   if side then
  31.     proxSide = side
  32.     return sensor.wrap(side)
  33.   else
  34.     error("Sensor wasn't found..")
  35.   end
  36. end
  37. local prox = findSensor()--wrap sensor(prox)
  38.  
  39. local function findAdvancedMonitor()
  40.   local side = findPeripheral("monitor")
  41.   if side then
  42.    local test = peripheral.wrap(side)
  43.     if test.isColor() then
  44.       return peripheral.wrap(side)
  45.     else
  46.       error("Monitor is not an 'Advanced Monitor'..")
  47.     end
  48.   else
  49.     error("No monitor was found")
  50.   end
  51. end
  52. tMon = findAdvancedMonitor()-- wrap advanced monitor
  53.  
  54. local function mPrint(text)
  55.   tMon.write("\n"..text)
  56. end
  57.  
  58. --PROBLEM...
  59. local function getOffset()--not storing value of Position
  60.   local offset = {"X","Y","Z"}-- in offset{}
  61.   local target = prox.getTargets()
  62.   for k,v in pairs(target) do
  63.     for i = 1,1 do
  64.       offset.i = v.Position.i
  65.     end
  66.   end
  67.   return offset.X, offset.Y, offset.Z
  68. end
  69.  
  70. local function calibrate()
  71.  tMon.setTextScale(.5)
  72.  tMon.setCursorPos(1,2)
  73.  mPrint("Touch screen when")
  74.  mPrint("standing in door location.")
  75.  local event = os.pullEvent("monitor_touch")
  76.  if event == "monitor_touch" then
  77.    offset = getOffset()
  78.    tMon.clear()
  79.  end
  80.  return offset
  81. end
  82.  
  83. --calibration cmd arg
  84. if "calibrate" == tostring(cmdArgs[1]) then
  85.   calibrate()
  86. end
  87.  
  88. --Problem: not receiving offset from calibration(nil value)
  89. --define radius at offset
  90. local function dist(pos)--rpoblem relatd to calibrate()
  91.   local xd = pos.X - offset.X
  92.   local yd = pos.Y - offset.Y
  93.   local zd = pos.Z - offset.Z
  94.   return math.sqrt(xd*xd + yd*yd + zd*zd)
  95. end
  96.  
  97.  
  98. --[[ Main Loop ]]--
  99. while true do
  100.   local dOpen = false -- no signal to door
  101.   local targets = prox.getTargets()
  102.   for k,v in pairs(targets) do
  103.     if dist(v.Position) < radius then
  104.       dOpen = true-- if target within radius
  105.     end
  106.   end
  107.   rs.setOutput(dSide, dOpen)--open or close door
  108. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement