Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Скрипт для робота, для сбора растений растущих ванильным путем на грядке определенного размера
- --Автор: aka_zaratustra осень 2020
- local ver = "1.0" -- версия программы
- -- схема грядки
- --|B|P|
- -- |0|0|0|0|0|0|0|0|
- -- |0|0|0|0|0|0|0|0|
- -- |0|0|0|0|0|0|0|0|
- -- |0|0|0|Х|Х|0|0|0|
- -- |0|0|0|Х|Х|0|0|0|
- -- |0|0|0|0|0|0|0|0|
- -- |0|0|0|0|0|0|0|0|
- -- |0|0|0|0|0|0|0|0|
- -- P - исходное положение робота. Робот находится на 1 блок выше растений (чтобы мог летать над ними), смотрит на юг (в сторону грядок).
- -- B - барель с урожаем
- -- 0 - растение
- -- Х - недоступный для проезда робота блок (например, трубы для поливалок)
- -- В начале работы растения быть высажены на грядку.
- -- У робота должны в обязательном порядке присутстовать компоненты: Inventory Upgrade, Inventory Controller Upgrade
- -- Рекомендуется для удобства поместить файл с этим скриптом в папку /home/ , а имя файла скрипта добавить в файл /home/.shrc - тогда скрипт будет запускаться при включении робота автоматически
- -- Аглоритм движений робота защищен от коллизий. Робот проверяет перед движением, свободен ли путь и ждет, пока путь освободится, только тогда делает шаг
- local robot = require("robot")
- local computer = require("computer")
- local component = require("component")
- local error_string
- --массив маршрута робота. определяет на каком шаге куда должен повернуть робот и должен ли
- --значения:
- -- 0 - поворот не нужен, движение только прямо
- -- 1 - после шага, поворот направо
- -- -1 - после шага, поворот налево
- --маршрут начинается и заканчивается на парковке робота P, робот смотрит вниз
- --едем змейкой снизу вверх, слева направо...
- local robot_route = {0,0,0,0,0,0,0,-1, --первая колонка грядки
- -1,0,0,0,0,0,1, --вторая колонка грядки
- 1,0,0,0,0,0,-1, --третья колонка грядки
- -1,0,1, --четвертая колонка грядки
- 1,0,-1, --пятая колонка грядки
- -1,0,0,0,0,0,1, --шестая колонка грядки
- 1,0,0,0,0,0,-1, --седьмая колонка грядки
- -1,0,0,0,0,0,0,-1, --восьмая колонка грядки
- 0,0,-1,0,1,1,0,-1,0,0,1,0} --верхная строчка грядки
- function robot_error(msg)
- print("Ошибка: ", msg)
- computer.beep(1000,0.3)
- computer.beep(1000,0.3)
- computer.beep(1000,0.3)
- os.exit()
- end
- --------------------------------------
- function dropToBarrel() --все что есть в инвентори, скидываем в барель
- --начальная позиция - P0 смотрим ввниз
- robot.turnRight()
- for i=1,16 do
- item = component.inventory_controller.getStackInInternalSlot(i)
- if item then --если в слоте что-то есть
- robot.select(i)
- robot.drop() --сдаем все из текущего слота в сундук
- end
- end
- robot.turnLeft() --поворачиваемся к грядке
- robot.select(1)
- end
- function doStep(stepNumber) --делаем шаг по маршруту
- --делаем движение
- --print(stepNumber, robot_route[stepNumber])
- while robot.forward() == nil do
- print("Робот столкнулся с препятствием на шаге", stepNumber)
- end
- --если нужно, поворачиваемся
- if robot_route[stepNumber] == 1 then
- robot.turnRight()
- elseif robot_route[stepNumber] == -1 then
- robot.turnLeft()
- end
- end
- function makeATrip() --съедим в путешествие по грядке
- stepNumber = 1 --номер шага по маршруту
- while stepNumber <= #robot_route do --едем, пока маршрут не кончится, т.е. пока номер шага, не достигнет размера массива маршрута
- doStep(stepNumber) --делаем шаг по маршруту
- --шаг сделали
- --собираем урожай
- robot.useDown()
- stepNumber = stepNumber + 1
- end
- --в конце маршрута, разворачиваемся
- robot.turnAround()
- end
- ----------------------------------------------------
- --Шаг 1
- --Начинаем работать
- print("--------------------------------------"); --выводим приветствие
- print("Скрипт для робота, для сбора растений растущих ванильным путем на грядке определенного размера запущен.");
- print("Версия: "..ver)
- print("Шаг 1. Проверка входящих условий.");
- --print("Входящие условия соблюдены.")
- ----------------------------------------------------
- --Шаг 2
- print("Шаг 2. Приступаем к сбору.");
- while true do --главный цикл
- --едем по грядке и собираем
- makeATrip() --съедим в путешествие по грядке
- --сбрасываем собранное в барель
- dropToBarrel()
- --os.exit()
- --os.sleep(15)
- end
- os.exit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement