Advertisement
HarvDad

bivalve

Jun 16th, 2014
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. -- valve
  2. -- Pours and retrieves water at specified time intervals
  3. -- Written by HarvDad, June 2014
  4.  
  5. args = {...}
  6. nArgs = #args
  7.  
  8. version = "valve: Rev 1.0"
  9. mission = "Pour and retrieve water at intervals."
  10. instructions = "Place full bucket in slot 1, empty bucket in slot 2."
  11. usage1 = "usage: valve <direction> <t1> <t2>"
  12. usage2 = " direction = up, down, forward"
  13. usage3 = " t1 = seconds after pour"
  14. usage4 = " t2 = seconds after retrieval"
  15.  
  16.  
  17. secondsAfterPouring = 10
  18. secondsAfterRetrieving = 30
  19.  
  20. up = 0
  21. down = 1
  22. forward = 2
  23. direction = 0
  24.  
  25. abort = false
  26.  
  27. function synchWithServerTime()
  28. print("Waiting for synch...")
  29. while true do
  30. time = os.time()
  31. timeStr = tostring(time)
  32. tailStr = string.sub(timeStr, -3)
  33. tail = tonumber(tailStr)
  34. if tail > 995 then
  35. break
  36. end
  37. sleep(0)
  38. end
  39. end
  40.  
  41. function needWater(direction)
  42. if direction == up then
  43. turtle.select(1)
  44. if turtle.compareTo(3) then
  45. return true
  46. end
  47. elseif direction == down then
  48. turtle.select(2)
  49. if turtle.compareTo(3) then
  50. return true
  51. end
  52. end
  53. return false
  54. end
  55.  
  56. -- prep: Retrieve any water possibly left over from previous run
  57.  
  58. function prep()
  59. turtle.select(1)
  60. if turtle.compareTo(3) then
  61. if needWater(up) then
  62. turtle.placeUp()
  63. end
  64. if needWater(down) then
  65. turtle.placeDown()
  66. end
  67. end
  68. end
  69.  
  70. function updateWater()
  71. turtle.select(1)
  72. turtle.placeUp()
  73. turtle.select(2)
  74. turtle.placeDown()
  75. end
  76.  
  77. function doTheRightThing()
  78. local naptime = 0
  79.  
  80. turtle.select(1)
  81. if turtle.compareTo(3) then
  82. napTime = secondsAfterRetrieving
  83. -- print("Retrieving water. napTime = ", napTime)
  84. else
  85. napTime = secondsAfterPouring
  86. -- print("Pouring water. napTime = ", napTime)
  87. end
  88. updateWater()
  89.  
  90. return napTime
  91. end
  92.  
  93. -- Main program
  94.  
  95.  
  96. if nArgs == 0 or (nArgs == 1 and args[1]== "help") then
  97. print(version)
  98. print(instructions)
  99. print(usage1)
  100. print(usage2)
  101. print(usage3)
  102. print(usage4)
  103. return
  104. end
  105.  
  106. if nArgs < 2 or nArgs > 2 then
  107. print(usage1)
  108. print(usage2)
  109. print(usage3)
  110. print(usage4)
  111. return
  112. end
  113.  
  114. secondsAfterPouring = tonumber(args[1])
  115. if secondsAfterPouring == nil then
  116. print("\"", args[1], "\" is not a valid time interval")
  117. return
  118. end
  119. if secondsAfterPouring < 1 then
  120. print("t1 must be a positive integer")
  121. return
  122. end
  123.  
  124. secondsAfterRetrieving= tonumber(args[2])
  125. if secondsAfterRetrieving == nil then
  126. print("\"", args[2], "\" is not a valid time interval")
  127. return
  128. end
  129. if secondsAfterRetrieving < 1 then
  130. print("t2 must be a positive integer")
  131. return
  132. end
  133.  
  134. if turtle.getItemCount(1) == 0 or turtle.getItemCount(2) == 0 then
  135. print("If no water running yet,")
  136. print(" place full bucket in slot 1.")
  137. print("If water is already running,")
  138. print(" place empty bucket in slot 1.")
  139. print("Always have empty bucket in slot 2 as comparitor.")
  140. return
  141. end
  142.  
  143. prep()
  144. --synchWithServerTime()
  145.  
  146. -- Main loop
  147.  
  148.  
  149. print("Beginning loop...")
  150. print("secondsAfterPouring: ", secondsAfterPouring, " secondsAfterRetrieving: ", secondsAfterRetrieving)
  151. while true do
  152. if abort then
  153. break
  154. end
  155. napTime = doTheRightThing()
  156. sleep(napTime)
  157. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement