Перейти к содержимому
  • 0
Darkar25

Управление роботом с планшета

Вопрос

я крч начал модифицировать мелкие проги для робота и планшета...с планшета крч управлять роботом...что я от вас собсно хочу?после нажатия на кнопку G роботу отправляется сообщение drop (на коде 1)

после когда робот получает сообщение он преобразовывает го в команду(на коде 2)
и после всего этого он её выполняет...тоесть выкидывает из 1 слота предметы...я делаю всё в таком типе..(код 3)это последовательность действий...я хочу чтобы вы подсказали как сделать так чтобы он при выбросе предмета переключался на следующий слот...(к примеру(я незнаю как переключать на следущий слот поэтому в скобках написал next+я нефига почти в луа не разбираюсь тока умею подражать готовому:В) elseif message == "drop" then robot.drop() robot.select(next))

  1. #код1(я незнаю как делается комментарий поэтому сделал хештек)
  2.  [34] = {
  3.         messageToRobot = "drop",
  4.         screenText = "Приказываю роботу выбросить предмет из выбранного слота",
  5.     },
    #код2
  6. drop = robot.drop,
    #код3
  7.  
  8.                 elseif message == "suck" then
  9.                     robot.suck()
  10.                     robot.suckDown()
  11.                     robot.suckUp()

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

собсна, нам надо послать команду с планшета

для этого нужна примерно такая писанина:

local component = require('component') -- подключаем компоненты
local event = require('event') -- подключаем события
local modem = component.modem -- даем название модему

while true do -- запускаем бесконечный цикл
  local e = {event.pull('key_down')} -- захватываем события нажатий
  if e[4] == 34 then -- если код кнопки равен 'G'
    modem.broadcast(1, 'drop') -- послать сообщение
  elseif e[4] == 16 then -- если код кнопки равен 'Q'
    break -- выход из цикла
  end
end
дальше, робот должен ждать сообщение и выполнить указанные инструкции

local component = require('component') -- подключаем компоненты
local event = require('event') -- подключаем события
local modem = component.modem -- даем название модему
local robot = component.robot -- даем название роботу

local slot = 1 -- задаем текущий слот
local cmd = { -- создаем список команд
  drop = function() -- создаем функцию дропа
    robot.drop(3) -- дропаем предмет вперед
    slot = (slot + 1)%robot.inventorySize() -- задаем номер следующего слота
    if slot == 0 then -- проверяем исключение
      slot = 1 -- назначаем слот, в случае исключения
    end
    robot.select(slot) -- выбираем слот
  end
}

modem.open(1) -- открываем порт на модеме, чтобы слышать сообщения
while true do -- запускаем бесконечный цикл
  local e = {event.pull('modem_message')} -- захватываем события модема
  if cmd[e[6]] then -- если в списке есть такая команда
    cmd[e[6]]() -- выполнить
  end
end
Изменено пользователем Doob

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

собсна, нам надо послать команду с планшета

для этого нужна примерно такая писанина:

local component = require('component') -- подключаем компоненты
local event = require('event') -- подключаем события
local modem = component.modem -- даем название модему

while true do -- запускаем бесконечный цикл
  local e = {event.pull('key_down')} -- захватываем события нажатий
  if e[4] == 34 then -- если код кнопки равен 'G'
    modem.broadcast(1, 'drop') -- послать сообщение
  elseif e[4] == 16 then -- если код кнопки равен 'Q'
    break -- выход из цикла
  end
end
дальше, робот должен ждать сообщение и выполнить указанные инструкции

local component = require('component') -- подключаем компоненты
local event = require('event') -- подключаем события
local modem = component.modem -- даем название модему
local robot = component.robot -- даем название роботу

local slot = 1 -- задаем текущий слот
local cmd = { -- создаем список команд
  drop = function() -- создаем функцию дропа
    robot.drop(3) -- дропаем предмет вперед
    slot = (slot + 1)%robot.inventorySize() -- задаем номер следующего слота
    if slot == 0 then -- проверяем исключение
      slot = 1 -- назначаем слот, в случае исключения
    end
    robot.select(slot) -- выбираем слот
  end
}

modem.open(1) -- открываем порт на модеме, чтобы слышать сообщения
while true do -- запускаем бесконечный цикл
  local e = {event.pull('modem_message')} -- захватываем события модема
  if cmd[e[6]] then -- если в списке есть такая команда
    cmd[e[6]]() -- выполнить
  end
end

тоесть должно получиться както....так?????

https://pastebin.com/4mDUTWKN

 

все проги работают я проверял вот только что добавил вот эту писанину ещё не проверял код на работоспособность

Изменено пользователем Darkar25

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

тоесть должно получиться както....так?????

https://pastebin.com/4mDUTWKN

и вот для планшета

https://pastebin.com/cMcYEQAW

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В общем, да, но в цикле два вызова event.pull, вторая часть не нужна, т. к. функционал дублируется и работает через раз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В общем, да, но в цикле два вызова event.pull, вторая часть не нужна, т. к. функционал дублируется и работает через раз.

вырезаем эту строчку и код готов?

local e = {event.pull('modem_message')} -- захватываем события модема

или вторую?

Изменено пользователем Darkar25

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

заменить 'cmd' на 'commands' в строках 59, 60 и удалить все с 61 до 87

ну и поправить event.pull() на event.pull('modem_message')

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

заменить 'cmd' на 'commands' в строках 59, 60 и удалить все с 61 до 87

ну и поправить event.pull() на event.pull('modem_message')

сейчас проверю

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

заменить 'cmd' на 'commands' в строках 59, 60 и удалить все с 61 до 87

ну и поправить event.pull() на event.pull('modem_message')

а...зачем собсна удалять такую тучу строк?ну...я особо не разбираюсь но наверно это много функций порежет...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

recieve.lua:92: <eof> expected near 'end'
щао?как это исправить?
я понимаю что чтото связаное с 92 строкой с концом чегото...но чего?

Изменено пользователем Darkar25

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

local component = require("component")
local robot = require("robot")
local event = require("event")
local port = 512
local modem

if component.isAvailable("modem") then
modem = component.modem
else
error("Этой программе требуется беспроводной модем для работы!")
end

modem.open(port)

local commands = {
forward = robot.forward,
back = robot.back,
turnRight = robot.turnRight,
turnLeft = robot.turnLeft,
up = robot.up,
down = robot.down,
suck = robot.suck,
drop = function() -- создаем функцию дропа
robot.drop() -- дропаем предмет вперед
slot = (slot + 1)%robot.inventorySize() -- задаем номер следующего
if slot == 0 then -- проверяем исключение
slot = 1 -- назначаем, в случае исключения
end
robot.select(slot) -- выбираем
end,
}

local function receive()
while true do
local e = {event.pull('modem_message')}
if commands[e[7]] then -- если в списке есть такая команда
commands[e[7]]() -- выполнить
end
end
end

receive()

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
local component = require("component")
local robot = require("robot")
local event = require("event")
local port = 512
local modem

if component.isAvailable("modem") then
  modem = component.modem
else
  error("Этой программе требуется беспроводной модем для работы!")
end

modem.open(port)

local commands = {
  forward = robot.forward,
  back = robot.back,
  turnRight = robot.turnRight,
  turnLeft = robot.turnLeft,
  up = robot.up,
  down = robot.down,
  suck = robot.suck,
  drop = function() -- создаем функцию дропа
    robot.drop() -- дропаем предмет вперед
    slot = (slot + 1)%robot.inventorySize() -- задаем номер следующего
    if slot == 0 then -- проверяем исключение
      slot = 1 -- назначаем, в случае исключения
    end
    robot.select(slot) -- выбираем 
  end,
}

local function receive()
  while true do
    local e = {event.pull('modem_message')}
    if commands[e[7]] then -- если в списке есть такая команда
      commands[e[7]]() -- выполнить
    end
  end
end

receive()

как я и говорил выпиливанеи кучи строк урежет кучу возможностей...теперь он не может экстренно стереть все данные с робота,испустить редстоун сигнал вокруг робота...и при попытке выкинуть предмет выдает ошибку при этом предмет бросается

https://yadi.sk/i/ZuC6cYkm3KDHrJ

Изменено пользователем Darkar25

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Просто куда-то затерялась переменная 'slot', если ее вернуть, то никаких ошибок. А нужные функции, без проблем добавляются в таблицу 'commands'.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Просто куда-то затерялась переменная 'slot', если ее вернуть, то никаких ошибок. А нужные функции, без проблем добавляются в таблицу 'commands'.

я скорее всего понял в чем ошибка...нужно чтобы переменная slot задавалась изначально...тогда никаких ошибок не будет...я пока сам попробую это сделать и напишите как это можно сделать если у меня не выйдет

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ошибку решил код полностью работоспособен...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...