Advertisement
aka_zaratustra

Untitled

Oct 9th, 2020
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.93 KB | None | 0 0
  1. --Скрипт для робота, для сбора растений растущих ванильным путем на грядке определенного размера
  2. --Автор: aka_zaratustra осень 2020
  3. local ver = "1.0" -- версия программы
  4.  
  5. -- схема грядки
  6. --|B|P|
  7. --  |0|0|0|0|0|0|0|0|
  8. --  |0|0|0|0|0|0|0|0|
  9. --  |0|0|0|0|0|0|0|0|
  10. --  |0|0|0|Х|Х|0|0|0|
  11. --  |0|0|0|Х|Х|0|0|0|
  12. --  |0|0|0|0|0|0|0|0|
  13. --  |0|0|0|0|0|0|0|0|
  14. --  |0|0|0|0|0|0|0|0|
  15.  
  16. -- P - исходное положение робота. Робот находится на 1 блок выше растений (чтобы мог летать над ними), смотрит на юг (в сторону грядок).
  17. -- B - барель с урожаем
  18. -- 0 - растение
  19. -- Х - недоступный для проезда робота блок (например, трубы для поливалок)
  20.  
  21. -- В начале работы растения быть высажены на грядку.
  22. -- У робота должны в обязательном порядке присутстовать компоненты: Inventory Upgrade, Inventory Controller Upgrade
  23. -- Рекомендуется для удобства поместить файл с этим скриптом в папку /home/ , а имя файла скрипта добавить в файл /home/.shrc - тогда скрипт будет запускаться при включении робота автоматически
  24. -- Аглоритм движений робота защищен от коллизий. Робот проверяет перед движением, свободен ли путь и ждет, пока путь освободится, только тогда делает шаг
  25.  
  26.  
  27.  
  28. local robot = require("robot")
  29. local computer = require("computer")
  30. local component = require("component")
  31.  
  32.  
  33. local error_string
  34.  
  35. --массив маршрута робота. определяет на каком шаге куда должен повернуть робот и должен ли
  36. --значения:
  37. -- 0 - поворот не нужен, движение только прямо
  38. -- 1 - после шага, поворот направо
  39. -- -1 - после шага, поворот налево
  40. --маршрут начинается и заканчивается на парковке робота P, робот смотрит вниз
  41. --едем змейкой снизу вверх, слева направо...
  42. local robot_route = {0,0,0,0,0,0,0,-1, --первая колонка грядки
  43.                     -1,0,0,0,0,0,1, --вторая колонка грядки
  44.                     1,0,0,0,0,0,-1, --третья колонка грядки
  45.                     -1,0,1, --четвертая колонка грядки
  46.                     1,0,-1, --пятая колонка грядки
  47.                     -1,0,0,0,0,0,1, --шестая колонка грядки
  48.                     1,0,0,0,0,0,-1, --седьмая колонка грядки
  49.                     -1,0,0,0,0,0,0,-1, --восьмая колонка грядки
  50.                     0,0,-1,0,1,1,0,-1,0,0,1,0} --верхная строчка грядки
  51.                    
  52.  
  53. function robot_error(msg)
  54.     print("Ошибка: ", msg)
  55.     computer.beep(1000,0.3)
  56.     computer.beep(1000,0.3)
  57.     computer.beep(1000,0.3)
  58.     os.exit()
  59. end
  60. --------------------------------------
  61. function dropToBarrel() --все что есть в инвентори, скидываем в барель
  62.     --начальная позиция - P0 смотрим ввниз
  63.     robot.turnRight()
  64.     for i=1,16 do
  65.         item = component.inventory_controller.getStackInInternalSlot(i)
  66.         if item then --если в слоте что-то есть
  67.             robot.select(i)
  68.             robot.drop() --сдаем все из текущего слота в сундук
  69.         end
  70.     end
  71.     robot.turnLeft() --поворачиваемся к грядке
  72.     robot.select(1)
  73. end
  74. function doStep(stepNumber) --делаем шаг по маршруту
  75.    
  76.     --делаем движение
  77.     --print(stepNumber, robot_route[stepNumber])
  78.    
  79.     while robot.forward() == nil do
  80.         print("Робот столкнулся с препятствием на шаге", stepNumber)
  81.     end
  82.    
  83.     --если нужно, поворачиваемся
  84.     if robot_route[stepNumber] == 1 then
  85.         robot.turnRight()
  86.     elseif robot_route[stepNumber] == -1 then
  87.         robot.turnLeft()
  88.     end
  89.    
  90. end
  91.  
  92. function makeATrip() --съедим в путешествие по грядке
  93.     stepNumber = 1 --номер шага по маршруту
  94.     while stepNumber <= #robot_route do --едем, пока маршрут не кончится, т.е. пока номер шага, не достигнет размера массива маршрута
  95.        
  96.         doStep(stepNumber) --делаем шаг по маршруту
  97.  
  98.         --шаг сделали
  99.         --собираем урожай
  100.         robot.useDown()
  101.        
  102.         stepNumber = stepNumber + 1
  103.     end
  104.     --в конце маршрута, разворачиваемся
  105.     robot.turnAround()
  106. end
  107.  
  108. ----------------------------------------------------
  109. --Шаг 1
  110. --Начинаем работать
  111. print("--------------------------------------"); --выводим приветствие
  112. print("Скрипт для робота, для сбора растений растущих ванильным путем на грядке определенного размера запущен.");
  113. print("Версия: "..ver)
  114. print("Шаг 1. Проверка входящих условий.");
  115.  
  116. --print("Входящие условия соблюдены.")
  117.  
  118. ----------------------------------------------------
  119. --Шаг 2
  120. print("Шаг 2. Приступаем к сбору.");
  121.  
  122. while true do --главный цикл
  123.    
  124.     --едем по грядке и собираем
  125.     makeATrip() --съедим в путешествие по грядке
  126.    
  127.     --сбрасываем собранное в барель
  128.     dropToBarrel()
  129.    
  130.    
  131.     --os.exit()
  132.    
  133.  
  134.     --os.sleep(15)
  135. end
  136.  
  137. os.exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement