Asummonster
-
Публикации
420 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Сообщения, опубликованные пользователем Asummonster
-
-
Нет, для ввода на какой высоте стоит робот что бы он копал до бедрока и не делал лишних движенийа что с картинками?
Их нет
-
На сколько я понял,видеокарта и монитор,занимающие 2 слота,только для получения высоты и вывода : "На какой высоте робот"?Не рационально . Лучше под ЕЕПРОМ перепиши
-
Супер! Классная идея!
-
Всем привет!
В этой теме я расскажу о своей программе "Bluetooth" на плате проводной или беспроводной сети.
Что же она делает?
Всё очень просто=) Отправляет файлы через модем.
Рассмотрим её получше.
Я на планшете открываю файл с произвольным именем.Пишу в него всякую ерунду: http://joxi.ru/gmv6e07IDRy4ma
Сохраняю его и пишу bluetooth: http://joxi.ru/DmB1EQxhlYd0rP
Мне надо отправить этот файл.
Я подхожу к компьютеру и пишу : "bluetooth -get testTheBlue.lua 25" http://joxi.ru/823nja5FYl64mO
Теперь выполняю команду на планшете: "bluetooth -send testTheBlue.lua 25" http://joxi.ru/RmzKg0zcDKW42O
Нажимаю Enter!
Компьютер получил код с планшета и вышел из программы: http://joxi.ru/gmv6e07IDRx4ma
Запускаю программу и... ура! Вот,что написал компьютер: http://joxi.ru/xAeNen5hKqpPry
Вот код:
com=require("component") if com.isAvailable("modem") then modem=com.modem else error("Нет модема!") end event=require("event") term=require("term") fs=require("filesystem") args={...} func=args[1] fileNAME=args[2] PORT=tonumber(args[3]) ENDOFGETTHEFILE=true if func==nil or fileNAME==nil or PORT==nil then print("Использование: -get <filename> <port> для получения файла\n -send <filename> <port> для отправки") end function sendFile(filename, port) modem.open(port) for line in io.lines(filename) do modem.broadcast(port, line) end modem.broadcast(port, "ENDOFTHECURRENTLYFILE") modem.close(port) end function getFile(filename, port) modem.open(port) getted=io.open(filename, "w") while ENDOFGETTHEFILE do _, _, _, _, _, LINE = event.pull("modem_message") if LINE=="ENDOFTHECURRENTLYFILE" then getted:flush() getted:close() ENDOFGETTHEFILE=false else print(LINE) getted:write(LINE.."\n") end end end if func=="-get" then if fs.exists(fileNAME) then print("Данный файл уже существует! Задайте другое имя!"); error() else getFile(fileNAME, PORT) end elseif func=="-send" then if not fs.exists(fileNAME) then print("Такой файл не найден!"); error() else sendFile(fileNAME, PORT) end end-
5
-
-
Монстрик, программка может и замечательная, очень нужная. Сам люблю минимализм и простоту, дешевизну и с максимальным КПД. Актуально на ИТ сейчас. Робот 1 уровня без харда и уже чего-то там копает. НО ОФОРМЛЕНИЕ ОТВРАТИТЕЛЬНОЕ.
Это не годится никуда. Не читабельно совершенно. http://puu.sh/imZX3/6ebe1c7219.pngЕсть же уже десятки постов с оформлением таким как нужно, со вставками кода и отступами. Примером использования и настройки, последовательность сборки и прошивки, комментарии в коде. Буду удалять такие посты пока нормально не научитесь вставлять спойлеры и код с отступами в тег < >
П.С. отредактировал по человечески пост Монстрика.
Спасибо=)Буду отступы делать, скриншотики выкладывать=)
-
Нормально же пишет)) Я тоже так писал, когда учился, а когда начал писать что-то более двадцати строк, то понял зачем нужен стиль и комментарии))А вообще, ни на кого не жалуюсь - скопировал в notepad++, включил подсветку, отформатировал и читаю себе на здоровье.Сам в ноутпаде пишу=)
-
Оно и возвращает адрес.Ок. Спасибо, буду знать.
-
modem = component("modem")()if modem == nil then error("Modem not found.") end
Ему аддресс нужен=)
-
И ещё. Вот тебе код, как узнать аддресс модема:
for address in pairs(component.list()) do
if component.list()[address]=='modem' then modemAddress=address
break
end
end
чтобы более опытные прогеры (Totoro, Fingercomp)Айайай! А если зеро увидит?
-
1
-
-
Всем привет!
Представляю вашему вниманию простую программу-карьер для робота.
В чём её плюс? В том, что робот, выполняющий эту программу, очень дешёвый.
Комплектация робота:
- корпус первого уровня
- процессор первого уровня
- 2 планки памяти 1-го уровня
- улучшение "Инвентарь"
- EEPROM с этой программой
Всё=)
С первого по третий слот надо класть ненужные вам ресурсы (к примеру, булыжник,земля,песок).
Робот копает карьер 10x10.
Сейчас на новом ИТ с ресурсами туго,что и вынудило написать простенький карьер.
Код программы :
--==========Простой дешевый робот-карьер на EEPROM ======= --======http://computercraft.ru, 2015. Asummmonster(c) ===== robot=component.proxy(component.list("robot")()) function robot.turnRight() robot.turn(true) end function robot.turnLeft() robot.turn(false) end function robot.turnAround() robot.turn(true) robot.turn(true) end what2up=1 function stolb() what2up=1 for i=1, 75 do robot.swing(0) if robot.move(0) then what2up=what2up+1 for inv=1, 3 do if robot.count()==64 then robot.drop(63) end end end end for b=1, what2up do robot.move(1) end end function lepexa() for i=1, 10 do stolb() robot.swing(3) robot.move(3) end end for i=1, 10 do lepexa() robot.turnRight() robot.turnRight() for i=1, 10 do robot.swing(3) robot.move(3) end robot.turnRight() robot.move(3) robot.turnLeft() end-
2
-
Убунта, сделай isAvailable
-
Я бв спросил сангара про nbt. Думаю, он ответит.
-
То есть она не пытаеться прийти по определённым координатам, а идёт по уже известной карте?Так скучно=(Я уже на твоей программе распечатал лабиринт, а она оказывается только по известной карте ходит=(
-
Переписал за пару секунд для OpenComputers:Про контенент не слышал, не? Да и на разных строчках написано будет...
-
я хотел написать программу для микроконтролера и я это сделал а как известно в них нельзя запихнуть жесткий диск потому я писал данные в код программысейчас я понял что добавив в нее все желаемое она просто не поместится в eeprom по этому я переписываю ее под openos
А зачем переписывать? Почему бы просто не вставить биос в комп с д.ж.?
-
Типа, че за фигня, зачееем????
П.С. Кстати, когда поутихла шумиха с грегом, больше стали игроки писать последнее время на форум и чат, вопросы по луа, программки и прочее.
Фингер, Монстрик, Леха, Артем404, Зед, Фолдер и МайнЛинукс и многие многие, всех не вспомню сразу, очень часто в чате вопросы по коду и .т.д, что радует.
Я только начал спрашивать потому, что только начал играть (печкитрубыимэ не в счёт)
-
В вики же написано, да ладноserver1.computercraft.ru
порт стандартный
Ты вообще там?=)
-
ip and port, please
-
А он на ведро есть?
-
Сколько повторять нужно об удалении картинок в цитатах?Было лень ссылки искать. А я вот сейчвс работаю над https файфаем и файфаем по ключу доступа
Она третьего уровня и жрёт дофига энергии. Для некоторых комп третьего уровня -- дорогое удовольствие, и они не могут крафтить их пачками.Давай вместе заниматься https и session ключами?
-
Итак, первая версия программы готова!Для её работы нужен стандартный компьютер с беспроводным модемом, а также робот с модемом и апгрейдами: верстак и контроллер инвентаря.
Затем ставим МЭ-интерфейс, адаптер, зарядник и робота как на картинке:
После этого берём апгрейд-базу данных и настраиваем её на те предметы, которые используются в крафте (пока что у меня только один рецепт):

Базу кладём в адаптер.
Затем на компьютер закидываем два файла: ME.lua и recipes.lua
ME.lua
local component=require('component') local event=require('event') local interface=component.me_interface local base=component.database local modem=component.modem local recipes=require('recipes') local robAddr="d9c29b1f-d308-4fb7-bf69-d7291346cef6" local baseSize=81 modem.open(1337) function readyInterface(name) needItems=recipes[name] for i=1,#needItems do needItem=needItems[i] print('Recipe item number '..tostring(i)..' is '..tostring(needItem['name'])..' : '..tostring(needItem['tag'])) n=0 found=false while not(found) and n<baseSize do n=n+1 local baseItem=base.get(n) if baseItem then print('Base item number '..tostring(n)..' is '..tostring(baseItem['name'])..' : '..tostring(baseItem['damage'])) if needItem['name']==baseItem['name'] and needItem['tag']==baseItem['damage'] then print('Was found!') found=true interface.setInterfaceConfiguration(i,base.address,n) end end end end end function convertRecipe(recipe) line='' for n=1,#recipe do for i=1,#recipe[n]['slots'] do line=line..tostring(recipe[n]['slots'][i]) end if n~=#recipe then line=line..':' end end return line end readyInterface('IC2:itemPartCircuit') r=convertRecipe(recipes['IC2:itemPartCircuit']) cont=true repeats=0 while cont do repeats=repeats+1 modem.send(robAddr,1337,r) _, _, sender, _, _, text=event.pull(3,'modem_message') if sender==robAddr and text=='ok' then print('Робот принял заказ') os.sleep(0.5) _, _, sender, _, _, text=event.pull(30,'modem_message') print(text) if sender==robAddr and text=='crafted' then print('Предмет создан') elseif sender==robAddr and text=='error' then print('Ошибка во время создания') end cont=false end if repeats==5 then cont=false print('Ошибка: робот не работает') end end modem.close()recipes.lua
recipes={} recipes['IC2:itemPartCircuit']={ {name='IC2:itemCable', tag=0, slots={1,2,3,7,8,9} }, {name='minecraft:redstone', tag=0, slots={4,6} }, {name='IC2:itemPlates', tag=4, slots={5} } } return recipesНа робота скидываем файл crafter.lua :
local component=require('component') local event=require('event') local inv_c=component.inventory_controller local modem=component.modem local robot=require('robot') local crafting=component.crafting local owner="5e07230a-17bb-4c20-b518-a2986093f86f" modem.open(1337) function craft(recipe) n=1 for i=1,#recipe do s=string.sub(recipe,i,i) if ':'==s then n=n+1 else s=tonumber(s) if s>3 and s<7 then s=s+1 elseif s>6 then s=s+2 end robot.select(s) inv_c.suckFromSlot(0,n) end end robot.select(4) toReturn=crafting.craft() robot.dropDown() return toReturn end a='123789:46:5' while true do _, _, sender, _, _, text=event.pull(2,'modem_message') if sender==owner then print('receive, ',text) os.sleep(0.5) modem.send(owner,1337,'ok') print('send ok') os.sleep(0.5) if craft(text) then modem.send(owner,1337,'crafted') else modem.send(owner,1337,'error') end end end craft(a)В файле ME.lua измените переменные: robAddr -- адрес модема робота, baseSize -- размер базы. В файле crafter.lua измените переменную owner -- адрес модема компа.
Приступим к запуску. На роботе запустим файл crafter.lua, после чего наш
рабробот будет ждать сообщения.После этого на компе запустим файл ME.lua. Сейчас программа настроена так, чтобы сделать одну базовую электросхему IC2. Данная версия не проверяет МЭ сеть на наличие предметов, поэтому положите их заранее.
Если вы всё сделали правильно и я не допустил косяков при написании этого сообщения, в вашей МЭ сети появится одна электросхема. Тестируйте на здоровье!
Класс! Только меня смутила переменная robAddr...Почему бы не просто computer.address?
-
Я для этих целей использую замену текста=)
-
Имею эмулятор СС, но не имею эмулятора ОС. Может быть можно, написав несколько подобных функций, сэмулировать ОС на эмуляторе СС? Вот require мы уже имеем. Теперь надо создать библиотеки computer, component, event и т.д и будем иметь полновесный эмулятор ОС.А зачем эмулировать event? os.pullEvent есть, os.listen сделать просто на параллели и os.pullEvent
Зачем эмулировать компонент? Есть же peripheral.wrap и peripheral.call
А функции computer api выполняет os
-
Код хороший, но подожди ка, а где же таблица и функции package? Это ведь специальный инструмент, что бы не забивать оперативную память, и ускорить работу программы при нескольких одинаковых вызовах require().Больше об этом написано здесь http://ilovelua.narod.ru/about_lua.html#Module_loaders
Можешь посмотреть как require и package реализовано в ОС https://github.com/MightyPirates/OpenComputers/blob/master-MC1.7.10/src/main/resources/assets/opencomputers/loot/OpenOS/lib/package.lua
Спасибо!Теперь засуну в прогруженные таблицы computer и component


Робот-шахтёр
в Роботы
Опубликовано:
Нет