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

Помогите понять, что не так в управлении дрона

Вопрос

Вот код для компьютера:

local modem=require("component").modem
local keyboard=require("keyboard")
local event = require("event")
local term = require("term")
modem.open(111)
modem.setStrength(10)
while true do
local x=term.read()
local y=term.read()
local z=term.read()
term.write("sending")
modem.broadcast(111,x,y,z)
end

Вот для дрона:

drone = component.proxy(component.list("drone")())
modem = component.proxy(component.list("modem")())
modem.open(111)
while true do
local name,receiverAddress, senderAddress, port, distance, x, y, z = computer.pullSignal(1)
  if name == "modem_message" then
--local tabletAddress=""
--if(sender==computer.address() or tabletAddress)then
dron.move(x,y,z)
--end
end
end

По идее дрон должен смещаться на x,y,z, переданные через беспроводной модем, но он тупо вырубается(

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


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

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

Вот код для компьютера:

local modem=require("component").modem
local keyboard=require("keyboard")
local event = require("event")
local term = require("term")
modem.open(111)
modem.setStrength(10)
while true do
local x=term.read()
local y=term.read()
local z=term.read()
term.write("sending")
modem.broadcast(111,x,y,z)
end

Вот для дрона:

drone = component.proxy(component.list("drone")())
modem = component.proxy(component.list("modem")())
modem.open(111)
while true do
local name,receiverAddress, senderAddress, port, distance, x, y, z = computer.pullSignal(1)
  if name == "modem_message" then
--local tabletAddress=""
--if(sender==computer.address() or tabletAddress)then
dron.move(x,y,z)
--end
end
end

По идее дрон должен смещаться на x,y,z, переданные через беспроводной модем, но он тупо вырубается(

Посмотри на первую строку: drone = component.proxy(component.list("drone")())

И на строку с управлением: dron.move(x,y,z)

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


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

Пробовал использовать tonamber() - не помогло.


Посмотри на первую строку: drone = component.proxy(component.list("drone")())

И на строку с управлением: dron.move(x,y,z)

omg)) спасибо)

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


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

Функция term.read возвращает во-первых строку, а не число, во-вторых строка эта заканчивается символом "/n". 

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


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

Серг,ты слепой. Во первых: tonumber(value), во вторых: напиши не dron.move(x, y, z), а drone.move(x, y, z)

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


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

Переменная с АПИ дрона у тебя называется drone, а вызываешь метод ты из нилловой переменной, вместо drone ты написал dron


Меня вообще кто-то видит? Зеро,тут другая ошибка. Он метод вызывает фиг знает откуда.


e5fe402e97.jpg

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


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

Еще один вопрос, не по программе:

когда дрона после старта снимаешь, он не стакуется с точной копией себя(если без включения поставить и снять - стакуется), это что значит: при запуске что-то изменяется в eeprom?(специально ничего не изменяю)


Переменная с АПИ дрона у тебя называется drone, а вызываешь метод ты из нилловой переменной, вместо drone ты написал dron


Меня вообще кто-то видит? Зеро,тут другая ошибка. Он метод вызывает фиг знает откуда.


e5fe402e97.jpg

я же написал: спасибо, то есть у мя заработало...


tonumber()

тут я описался)

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


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

Еще один вопрос, не по программе:

когда дрона после старта снимаешь, он не стакуется с точной копией себя(если без включения поставить и снять - стакуется), это что значит: при запуске что-то изменяется в eeprom?(специально ничего не изменяю)

 

 Очевидно, для eeprom дрона создается новая папка на сервере. Т.е. eeprom получает уникальный id и стакаться уже ни с кем не может.

К стати, как снимать дрона? А то я поставил, а снять не могу.

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


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

 

я же написал: спасибо, то есть у мя заработало...

 

Не увидел

 Очевидно, для eeprom дрона создается новая папка на сервере. Т.е. eeprom получает уникальный id и стакаться уже ни с кем не может.

К стати, как снимать дрона? А то я поставил, а снять не могу.

ШИФТ + ПКМ

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


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

Немного обновил вызов move, теперь он

drone[action](...)--action - строка

Но почему не работает?

Если что, мне так надо для вызова других функций, но пока я кроме move ниче не вызывал

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

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


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

Нормально код напиши


event, _, _, _, _, action, arg1, arg2, arg3 = computer.pullSignal()

if event=="modem_message" then

  drone[action](arg1, arg2, arg3)

end ?

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


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

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

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


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

Гораздо лучше будет сделать так: ставишь на дрона этот код: CC-bios NET, и на планшете просто отправляешь данные дрону


Планшет-часть: while true do modem.broadcast(42, io.read()) end

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


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

Типо, отправлять код?


Это не пойдет


И еще проблема:

пытаюсь через контроллер инвенторя открыть сундук перед дронов, он вырубается.

if typeAction=="move\n" then
drone.move(tonumber(x),tonumber(y),tonumber(z))
elseif typeAction=="open\n" then
for i=1,invController.getInventorySize(int) do
invController.suckFromSlot(int,i)
dropFromSlot(1)--защита от переполнения))
end

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


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

А биндить нет?Если меня на сервак пустят,покажу тебе код


Я просто код отправляю по нажатию на кнопку

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


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

Вот тебе код грабежа:for i=0, 5 do if drone.suck(i) then break end for i=1, 60 do drone.suck(i) drone.drop(1) end


Кнопки

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


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

а я не умею) кнопки биндить...


 

 

Вот тебе код грабежа

Он не работает 

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


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

Ок) А почему тебя не пускают?

И если что, я в одиночке тестирую

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


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

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

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

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

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

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

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

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

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


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