TechnicalParadox

Please help!

Aug 2nd, 2016
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.26 KB | None | 0 0
  1. -- Code by TechicalParadox, 8/2/16
  2. -- Program is meant to run in the background so a remote controller can run any of the commands listed
  3. -- Everything works except where "-- Crashes here" is, the os.sleep(5) and the prints are for testing
  4. -- No error message is listed, I run this program as a bg thread on an advanced turtle and it simply closes at the start of the while loop.
  5.  
  6. -- SLAVE BACKGROUND PROCESS
  7. slaveControllerID = 1
  8. gotoX = 0
  9. gotoY = 0
  10. gotoZ = 0
  11. gotoPos = nil
  12. updateFreq = 60
  13. gotoUpdateFreq = 15
  14.  
  15. -- prevent termination
  16. os.pullEvent = os.pullEventRaw
  17.  
  18. -- initiate rednet
  19. if peripheral.isPresent("left") and peripheral.getType("left") == "modem" then
  20.   rednet.open("left")
  21. elseif peripheral.isPresent("right") and peripheral.getType("right") == "modem" then
  22.   rednet.open("right")
  23. else
  24.   -- no rednet
  25.   while true do -- spin forever
  26.     turtle.turnRight()
  27.   end
  28. end
  29.  
  30. -- alert slave controller of connection
  31. rednet.send(slaveControllerID, "Connected")
  32.  
  33. -- communicate with slave controller forever
  34. while true do
  35.   -- send gps location
  36.   x, y, z = gps.locate(1)
  37.   if not x then -- gps failed to locate
  38.     rednet.send(slaveControllerID, "posUnknown")
  39.   else
  40.     rednet.send(slaveControllerID, ("posCurrent"..x..","..y..","..z))
  41.   end
  42.   -- wait for command
  43.   id, message = rednet.receive(updateFreq)
  44.   if not id == slaveControllerID then -- if no message from slaveController
  45.     -- do nothing
  46.   elseif message == "PING" then
  47.     -- respond
  48.     rednet.send(slaveControllerID, "Here...")
  49.   elseif message == "STOP" then
  50.     -- force other programs to stop by rebooting
  51.     rednet.send(slaveControllerID, "Rebooting...")
  52.     os.reboot()
  53.   elseif message ==  "GOTO" then
  54.     -- authorize sending
  55.     rednet.send(slaveControllerID, "Send Coordinates...")
  56.     -- wait for coordinates from slave controller
  57.     id, message = rednet.receive()
  58.     while not id == slaveControllerID do
  59.       id, message = rednet.receive()
  60.     end
  61.     -- x coordinate
  62.     gotoX = message
  63.     id, message = rednet.receive()
  64.     while not id == slaveControllerID or id == SPAID do
  65.       id, message = rednet.receive()
  66.     end
  67.     -- y coordinate
  68.     gotoY = message
  69.     id, message = rednet.receive()
  70.     while not id == slaveControllerID or id == SPAID do
  71.       id, message = rednet.receive()
  72.     end
  73.     -- z coordinate
  74.     gotoZ = message
  75.     print("goto"..gotoX..","..gotoY..","..gotoZ)
  76.     -- tell slave controller
  77.     rednet.send(slaveControllerID, ("Going to "..gotoX..","..gotoY..","..gotoZ.."..."))
  78.     -- GOTO COORD
  79.     curX, curY, curZ = gps.locate() -- get pos
  80.     -- get heading
  81.     heading = ""
  82.     x1, y1, z1 = gps.locate()
  83.     while (turtle.detect()) do
  84.       turtle.dig()
  85.     end
  86.     turtle.forward()
  87.     x2, y2, z2 = gps.locate()
  88.     xD = x2 - x1
  89.     yD = y2 - y1
  90.     zD = z2 - z1
  91.     if xD == 1 then
  92.       heading = "X+"
  93.     elseif xD == -1 then
  94.       heading = "X-"
  95.     elseif zD == 1 then
  96.       heading = "Z+"
  97.     elseif zD == -1 then
  98.       heading = "Z-"
  99.     end
  100.     -- Loop until arrival
  101.     print(heading)
  102.     moves = 0
  103.     print(moves)
  104.     os.sleep(5)
  105.     -- Crashes here
  106.     while ((curX ~= gotoX) or (curY ~= gotoY) or (curZ ~= gotoZ)) do
  107.       os.sleep(1)
  108.       print ("test")
  109.       -- update position
  110.       curX, curY, curZ = gps.locate()
  111.       if moves >= gotoUpdateFreq then
  112.         rednet.send(slaveControllerID, gps.locate())
  113.         moves = 0
  114.       end
  115.       -- Go to proper Y
  116.       if curY < gotoY then
  117.         -- go up
  118.         while turtle.detectUp() do
  119.           turtle.digUp()
  120.         end
  121.         turtle.up()
  122.       elseif curY > gotoY then
  123.         -- go down
  124.         while turtle.detectDown() do
  125.           turtle.digDown()
  126.         end
  127.         turtle.down()
  128.       -- Go to proper X
  129.       elseif curX < gotoX then
  130.         -- go positive x
  131.         if heading == "X-" then
  132.           turtle.turnRight()
  133.           turtle.turnRight()
  134.           heading = "X+"
  135.         elseif heading == "Z+" then
  136.           turtle.turnLeft()
  137.           heading = "X+"
  138.         elseif heading == "Z-" then
  139.           turtle.turnRight()
  140.           heading = "X+"
  141.         end
  142.         while turtle.detect() do
  143.           turtle.dig()
  144.         end
  145.         turtle.forward()
  146.       elseif curX > gotoX then
  147.         -- go negative x
  148.         if heading == "X+" then
  149.           turtle.turnRight()
  150.           turtle.turnRight()
  151.           heading = "X-"
  152.         elseif heading == "Z+" then
  153.           turtle.turnRight()
  154.           heading = "X-"
  155.         elseif heading == "Z-" then
  156.           turtle.turnLeft()
  157.           heading = "X-"
  158.         end
  159.         while turtle.detect() do
  160.           turtle.dig()
  161.         end
  162.         turtle.forward()
  163.       elseif curZ < gotoZ then
  164.         -- go positive z
  165.         if heading == "Z-" then
  166.           turtle.turnRight()
  167.           turtle.turnRight()
  168.           heading = "Z+"
  169.         elseif heading == "X+" then
  170.           turtle.turnRight()
  171.           heading = "Z+"
  172.         elseif heading == "X-" then
  173.           turtle.turnLeft()
  174.           heading = "Z+"
  175.         end
  176.         while turtle.detect() do
  177.           turtle.dig()
  178.         end
  179.         turtle.forward()
  180.       elseif curZ > gotoZ then
  181.         -- go negative z
  182.         if heading == "Z+" then
  183.           turtle.turnRight()
  184.           turtle.turnRIght()
  185.           heading = "Z-"
  186.         elseif heading == "X+" then
  187.           turtle.turnLeft()
  188.           heading = "Z-"
  189.         elseif heading == "X-" then
  190.           turtle.turnRight()
  191.           heading = "Z-"
  192.         end
  193.         while turtle.detect() do
  194.           turtle.dig()
  195.         end
  196.         turtle.forward()
  197.       end
  198.     end
  199.     print("got to end")
  200.     os.sleep(5)
  201.     -- finished goto
  202.     rednet.send(slaveControllerID, ("Finished GOTO @ "..gps.locate()))
  203.        
  204.   elseif message == "EXCAVATE" then
  205.     -- wait for size
  206.     id, message = rednet.receive()
  207.     while not id == slaveControllerID do
  208.       id, message = rednet.receive()
  209.     end
  210.     shell.run("bg excavate "..tonumber(message))
  211.     -- respond
  212.     rednet.send(slaveControllerID, ("Excavating "..message.."x"..message))
  213.   elseif message == "BURROW" then
  214.     rednet.send(slaveControllerID, "Burrowing...")
  215.     -- go as far down as possible
  216.     turtle.digDown()
  217.     while turtle.down() do
  218.       turtle.digDown()
  219.     end
  220.   elseif message == "ELEVATE" then
  221.     rednet.send(slaveControllerID, "Elevating...")
  222.     -- go as far up as possible
  223.     while turtle.detectUp() do
  224.       turtle.digUp()
  225.     end
  226.     while turtle.up() do
  227.       turtle.digUp()
  228.     end
  229.   elseif message == "UPDATEFREQ" then
  230.     rednet.send(slaveControllerID, "Send new frequency...")
  231.     -- wait for new freq
  232.     id, message = rednet.receive()
  233.     while not id == slaveControllerID do
  234.       id, message = rednet.receive()
  235.     end
  236.     updateFreq = tonumber(message)
  237.     -- respond
  238.     rednet.send(slaveControllerID, ("Frequency updated to "..updateFreq))
  239.   elseif message == "HEADING" then
  240.     -- figure out heading
  241.     heading = ""
  242.     pos1 = vector.new(gps.locate(1))
  243.     while turtle.detect() do
  244.       turtle.dig()
  245.     end
  246.     turtle.forward()
  247.     pos2 = vector.new(gps.locate(1))
  248.     xD = pos2.x - pos1.x
  249.     zD = pos2.z - pos1.z
  250.     if xD == 1 then
  251.       heading = "+X"
  252.     elseif xD == -1 then -- facing -X
  253.       heading = "-X"
  254.     elseif zD == 1 then -- facing +Z
  255.       heading = "+Z"
  256.     elseif zD == -1 then -- facing -Z
  257.       heading = "-Z"
  258.     end
  259.     s = ("Heading: "..heading)
  260.     rednet.send(slaveControllerID,s)
  261.   elseif message == "LOCATE" then
  262.     x, y, z = gps.locate(1)
  263.     rednet.send(slaveControllerID, ("GPS POSITION: "..x..","..y..","..z))
  264.   elseif message == "FORWARD" then
  265.     while turtle.detect() do
  266.       turtle.dig()
  267.     end
  268.     turtle.forward()
  269.     rednet.send(slaveControllerID,"Moved")
  270.   elseif message == "TURNR" then
  271.     turtle.turnRight()
  272.     rednet.send(slaveControllerID,"Turned")
  273.   elseif message == "TURNL" then
  274.     turtle.turnLeft()
  275.     rednet.send(slaveControllerID,"Turned")
  276.   elseif message == "DOWN" then
  277.     while turtle.detectDown() do
  278.       turtle.digDown()
  279.     end
  280.     turtle.down()
  281.     rednet.send(slaveControllerID,"Moved")
  282.   elseif message == "UP" then
  283.     while turtle.detectUp() do
  284.       turtle.digUp()
  285.     end
  286.     turtle.up()
  287.     rednet.send(slaveControllerID,"Moved")
  288.   end
  289. end
Advertisement
Add Comment
Please, Sign In to add comment