Перейти к содержимому
MyOnAsSalat

Планшетное управление роботом.

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

Всем ку, благодоря бессоной ночи изучение api opencomputers написал прогу для контроля за роботом через планшет.

24580a83db6c.png

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

 

a77dd35ca650.png

 

Для работы этого приложения на компьютер или планшет нужно установить видеокарту карту 2 уровня или выше (из-за изменения разрешения) , и вайфай карту.

На робота только вайфай карту.

Из функционала доступно:

Все функции движения

Все swing()

Все use()

И моя любимая  команда  для робота вида  : 

os.execute(msg)
где msg это то что вы вписали при вызове отправки шела:

812959ae68a9.png

 

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

Вашего робота могут просто упереть этой же программой XD.

Если вы одобрите эту программу, то я допилю её.

Код для планшета:

--tab
local component = require("component")
local term = require("term")
local event = require("event")
local m = component.modem
--component.gpu.setResolution(1,1)
term.clear()
print("--------------------------------------------------------------")
print("|Движение: Вперёд= ↑; Назад = ↓; Вниз = ctrl; Вверх = shift; |")
print("|Поворот: Влево = ←; Вправо →; Выход из программы = '0'      |")
print("|Shell = 'O' - передать аргумент shell робота;               |")
print("|Левый клик: Вперёд = space; Вверх = 'E'; Вниз = 'D'         |")
print("|Правый клик: Вперёд = enter; Вверх = 'W'; Вниз = 'S'        |")
print("|Сворачивание окна планшета для слежения за роботом = 'R'    |")
print("|By http://vk.com/dencraft23  for  http://computercraft.ru/  |")
print("--------------------------------------------------------------")
m.open(23)
sr = 1
    while true do
    _,_,key1,key2 = event.pull("key_down")
    z = key2  
    print(z)
        if (z==19) then
   if (sr==1) then
term.clear()
component.gpu.setResolution(2,2) 
   sr = 0
else 
component.gpu.setResolution(80,25)
            print("--------------------------------------------------------------")
            print("|Движение: Вперёд= ↑; Назад = ↓; Вниз = ctrl; Вверх = shift; |")
            print("|Поворот: Влево = ←; Вправо →; Выход из программы = '0'      |")
            print("|Shell = 'O' - передать аргумент shell робота;               |")
            print("|Левый клик: Вперёд = space; Вверх = 'E'; Вниз = 'D'         |")
            print("|Правый клик: Вперёд = enter; Вверх = 'W'; Вниз = 'S'        |")
print("|Сворачивание окна планшета для слежения за роботом = 'R'    |")
            print("|By http://vk.com/dencraft23  for  http://computercraft.ru/  |")
            print("--------------------------------------------------------------")
sr = 1
end
        end
        if (z==200) then
        m.broadcast(66, "f")
        end
        if (z==208) then
        m.broadcast(66, "b")
        end
        if (z==203) then
        m.broadcast(66, "l")
        end
        if (z==205) then
        m.broadcast(66, "r")
        end
        if (z==42) then
        m.broadcast(66, "u")
        end
        if (z==29) then
        m.broadcast(66, "d")
        end  
        if (z==57) then
        m.broadcast(66, "swing")
        end  
        if (z==28) then
        m.broadcast(66, "use")
        end  
        if (z==17) then
        m.broadcast(66, "useup")
        end  
        if (z==31) then
        m.broadcast(66, "usedown")
        end  
        if (z==18) then
        m.broadcast(66, "swingup")
        end  
        if (z==32) then
        m.broadcast(66, "swingdown")
        end   
        if (z==11) then
        m.broadcast(66,"exit")
        shell.execute("sh")        
        end
        if (z==24) then
        m.broadcast(66,"shell")
os.sleep(1)
print("shell:")
shellr = io.read()
        m.broadcast(66,shellr)
        end		
end
     

end       

Код для робота:

 

--robot
term = require("term")
r = require("robot")
local component = require("component")
local event = require("event")
local m = component.modem
term.clear()
m.open(66)
     while true do
        local _, _, _, _, _, msg = event.pull("modem_message")
   z = tostring(msg)
   if (z=="f") then
        r.forward()
        end
   if (z=="b") then
        r.back()
        end 
   if (z=="l") then
        r.turnLeft()
        end 
   if (z=="r") then
        r.turnRight()
        end 
   if (z=="u") then
        r.up()
        end
   if (z=="d") then
        r.down()
        end 
   if (z=="swing") then
        r.swing()
        end
   if (z=="useup") then
        r.useUp()
        end 
   if (z=="usedown") then
        r.useDown()
        end 
   if (z=="swingup") then
        r.swingUp()
        end 
   if (z=="swingdown") then
        r.swingDown()
        end 
   if (z=="use") then
        r.use()
        end 
   if (z=="exit") then
        shell.execute("sh")
        end 
   if (z=="shell") then
        local _, _, _, _, _, msg = event.pull("modem_message")
os.execute(msg)
        end 
    
end 
Изменено пользователем MyOnAsSalat

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


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

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

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


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

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

А роботы Алекса - парад принимали :D

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


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

А роботы Алекса - парад принимали :D

Дааа, роботы красивой коробочкой 20 на 20 человек будут ходить) 

 

MyOnAsSalat, программку нужно оптимизировать немного. Сеть сделать толковую, по связанной карте или по МАС, и миллион ифов убирать. Или сделать хотя бы 

if <...> then
<...>
elseif <...> then
<...>
end

а то получается, наверно, что программка никогда не прерывает if конструкцию, если нашла ТРУ условие, а проверяет абсолютно все ифы всегда, и не важно, что перед этим уже какое-то требуемое условие выполнилось, лишние телодвижения получаются.

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


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

Дааа, роботы красивой коробочкой 20 на 20 человек будут ходить) 

 

MyOnAsSalat, программку нужно оптимизировать немного. Сеть сделать толковую, по связанной карте или по МАС, и миллион ифов убирать. Или сделать хотя бы 

if <...> then
<...>
elseif <...> then
<...>
end
а то получается, наверно, что программка никогда не прерывает if конструкцию, если нашла ТРУ условие, а проверяет абсолютно все ифы всегда, и не важно, что перед этим уже какое-то требуемое условие выполнилось, лишние телодвижения получаются.

 

объясни как от ифоф избавится.

и дай связанных карт)) они жуть дорогие))

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

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


Ссылка на сообщение
Поделиться на других сайтах
   if (z=="use") then         r.use()         end    if (z=="exit") then         shell.execute("sh")         end

 

Ифы, ифы, ифы-ы-ы! Больше ифов богу ифов и элсифов! Но если серьезно, то прога-то хороша, понравилась идейка сворачивать экран в один мини-пиксель, удобно наблюдать.

 

Но рекомендую все же сделать что-то наподобие этого, чтобы тебя тут живьем не сожрали:

 

50d96ad6cc07ba7b4452671037fd4bb5.png

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

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


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

Я предпочитаю делать так:

local actions = {
  f = robot.forward,
  b = robot.back,
-- и т.д.
}
while true do
  _,_,_,_,_,message = event.pull("modem_message")
  if actions[message] then actions[message]() end
end

Люблю Луа за его таблицы.

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

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


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

 

Ага, так еще лучше. Циклы сосут.

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

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


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

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

http://coub.com/view/a87st

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

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


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

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

А у меня есть прога, чтобы робот исполнял "Имперский марш".

Изменено пользователем Fingercomp
Удаляйте видяхи и картинки в цитатах

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


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

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

На планшет та же программа, но более мелкий интерфейс и другие цвета.

 

 

bJkJIFaASoI.jpg

 



3H3UTBKn5Po.jpg

 

8v0oTN7zBJE.jpg

 

 

 

 

YpVUYTuv7r0.jpg

 

3mRM3mW067Y.jpg

 

 

 

А еще есть шняжка, которая привязывает робота к компу по разрешению.

 

 

HDdyeLd4icE.jpg

ThArVjnuvJY.jpg

 

 

 

 

0ZFcWkkMZjU.jpg

gyLMJQgmS9w.jpg

 

 

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


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

Вот имперский марш который я написал изучая ноты: http://pastebin.com/K1VXCNSw (может быть и не весь, а только отрывок, но всё же рабочий)

Запускать на любом компе/роботе/планшете с любой комплектацией. (наличие звуковой платы не требует)

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

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


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

Мильйон note.play? А компактней ни как?

А какая разница?

Мне кажется важнее читаемость кода, чем всякие переменные в одну букву.

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


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

А какая разница?

Мне кажется важнее читаемость кода, чем всякие переменные в одну букву.

Программа игралка должна быть программой игралкой универсальной, которая твою и любую другую музяку парсит и играет. А музон должен лежать отдельно в файлике структурированном или табле какой-то, с какой-то разметкой, музыкальными признаками, тегами припева 2 или 3 раза, длительностью нот и прочее и т.п.. 

 

А иначе если вдруг захочется послушать песни (или написать куплет) Александры Пахмутовой, твою прогу  нужно будет выкинуть к чертям и писать новую, так ведь? А любое написание кода, который (или хотя бы его часть) нельзя использовать повторно где-то - это бесполезная трата времени и сил.

А то похоже,  что ты микруху для тостера прошиваешь. :)

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


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

Программа игралка должна быть программой игралкой универсальной, которая твою и любую другую музяку парсит и играет. А музон должен лежать отдельно в файлике структурированном или табле какой-то, с какой-то разметкой, музыкальными признаками, тегами припева 2 или 3 раза, длительностью нот и прочее и т.п.. 

 

А иначе если вдруг захочется послушать песни (или написать куплет) Александры Пахмутовой, твою прогу  нужно будет выкинуть к чертям и писать новую, так ведь? А любое написание кода, который (или хотя бы его часть) нельзя использовать повторно где-то - это бесполезная трата времени и сил.

А то похоже,  что ты микруху для тостера прошиваешь. :)

Пробовал разобраться с форматом .abc, но потом бросил и написал вручную. Очень уж хотелось послушать что нибудь от робота.

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


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

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

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


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

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

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

Гость
Ответить в тему...

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

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

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

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

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


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