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

Поиск по сайту

Результаты поиска по тегам 'EEPROM'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип публикаций


Блоги

  • Робот Байт
  • Fingercomp's Playground
  • 1Ridav' - блог
  • Totoro Cookies
  • Блог cyber01
  • IncluderWorld
  • KelLiN' - блог
  • Крутой блог
  • eutomatic blog
  • Programist135 Soft
  • Сайт в сети OpenNet
  • PieLand
  • Очумелые ручки
  • Блог недоблоггера
  • В мире Майнкрафт
  • LaineBlog
  • Квантовый блог
  • Блог qwertyMAN'а
  • ДубоБлог
  • Дача Игоря

Форумы

  • Программирование
    • Программы
    • База знаний
    • Разработчикам
    • Вопросы
  • Игровой раздел
    • Игровые серверы
    • Предложения по улучшению игрового процесса
    • Моды и плагины
    • Жалобы на игроков
    • Ивенты
  • Общение
    • Вопрос-ответ
    • Беседка программистов
    • Беседка-флудилка
    • Шкатулка
  • Технический раздел
    • Багтрекер
    • Архив

Искать результаты в...

Искать результаты, которые...


Дата создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по количеству...

Зарегистрирован

  • Начать

    Конец


Группа


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


ВКонтакте


Gtalk


Facebook


Twitter


Город


Интересы

Найдено 7 результатов

  1. В последних версиях OpenComputers обрастает всякими загадочными вещами. Игроки, которые только только освоились с предыдущей версией вдруг понимают, что надо изучать все заново. "А пошло оно все!" - думают игроки, и уходят на версию 1.3.6, или переучиваются на ComputerCraft, который проще, и не требует непонятного. А одна из самых загадочных - неведомый EEPROM. Это такая мелкая хрень, без которой не работает ни один компьютер, или даже робот. Хорошо еще, что есть стандартный EEPROM который называется Lua BIOS. Он легко крафтится и заставляет работать компьютеры как и раньше. Но найдем задачку посложнее, где Lua BIOS не поможет. Попробуем собрать микроконтроллер, который будет управлять входными дверями. 1. План Представим, как оно должно работать. Слева от двери (если входить) - микроконтроллер. Ради понтов, возьмем Микроконтроллер 2-ого уровня и поставим в него беспроводную сетевую плату. Кроме того добавим красную плату, чтобы управлять дверью. 1. Если контроллер принимает сигнал "open" - он открывает дверь. 2. Если примет сигнал "close" - он закрывает дверь. 3. Если примет посторонний сигнал - взрывает динамит. Дабы сокровища не достались хакерам. Для управления задействуем любой комп, у которого тоже будет беспроводная плата (или точка доступа). 2. Крафтим контроллер С этим проблем не возникнет. Потому, что я играю в креативе :P . Открываем NEI и берем нужные детали. В последний слот положим пока пустой EEPROM. Потом поставим на него прошивку, а пока - не важно. Нажимаем кнопку "Старт" и достаем готовый блок. 3. Готовим прошивку Теперь, когда все готово, мы построили сокровищницу и скрафтили контроллер - осталось самое главное. Программирование EEPROM'а отличается от программирования обычной программы. Потому, что обычно, наши программы выполняются в OpenOS, которая заботливо загружает нужные библиотеки, предоставляет всякие удобные фичи и прочее. Тем не менее писать мы будем именно в OpenOS. Запустим компьютер, напишем edit bios и введем следующие строки: red = component.proxy(component.list("redstone")())while true do red.setOutput(5, 0) computer.pullSignal(1) red.setOutput(5, 15) computer.pullSignal(1)end Дело в том, что большая часть библиотек, которые мы использовали - это библиотеки OpenOS. А значит мы не можем ими пользоваться в BIOS. Однако кое-что нам доступно. Это библиотеки computer и component, и соответственно все установленные в целевом агрегате (микроконтроллер) компоненты. Более чем достаточно для наших задач. Вышеприведенный код делает следующее: * ищет компонент с названием "redstone" и возвращает его прокси * в вечном цикле посылает нулевой редстоун-импульс направо (side = 5), т.е. гасит сигнал * ждет секунду (на самом деле - ожидает эвентов, то есть сигналов) * посылает редстоун сигнал с силой 15 направо * опять ждет секунду Преследуем двоякую цель: во-первых проверить, что EEPROM вообще работает так про него написано на Вики. Кто его знает? А во-вторых: убедиться, что сторона 5 это именно та сторона, где дверь. А не какая-нибудь другая. Нажмем Ctrl+S, чтобы сохраниться и Ctrl+W, чтобы закрыть редактор. Вставим пустой EEPROM (еще один) в слот нашего компьютера, вместо лежащего там Lua BIOS. И напишем в консоль такую команду: flash -q bios MCBios Программа flash предназначена для прошивки чипов. Флаг -q говорит ей, чтобы не задавала лишних вопросов, затем идет имя файла с нашим кодом (bios) и метка, которую программа шлепнет на чип (MCBios). Все. Доставайте. Lua BIOS на место класть не обязательно, ибо этот слот нам еще потребуется. (Но не забудьте его вернуть, если будете перезагружать компьютер) Чтобы заменить пустой EEPROM в контроллере на наш MCBios, надо положить контроллер и MCBios на верстак. При этом пустой чип вылетит, а новый встанет на его место. Поставим контроллер на пол и протестируем. После клика ПКМ на контроллере - замигала правая лампа. Значит все работает как нужно. 4. Теперь - серьезно Извлеките чип с MCBios обратно (так же как и вставляли, только наоборот). Или приготовьте новый пустой чип. Главное - не запутайтесь в них. Пишем клиент для контроллера. У меня он выглядит примерно так: red = component.proxy(component.list("redstone")())modem = component.proxy(component.list('modem')())modem.open(27)red.setOutput(5, 0)red.setOutput(2, 0) -- no explosions yet =)while true do name, _, sender, _, _, message = computer.pullSignal(2) if name == 'modem_message' then if message == 'open' then red.setOutput(5, 15) elseif message == 'close' then red.setOutput(5, 0) else -- hacker tries to get? red.setOutput(2, 15) -- fire in the hole!!! end endendmodem.close() Все согласно плану. Прошиваем чип, вставляем в контроллер, а контроллер ставим слева от дверей. Сзади к контроллеру осторожно прилаживаем запал. ПКМ! Теперь открываем новый файл на компьютере: edit send И пишем в него такой код: local com = require('component')local modem = com.modemlocal args = {...}modem.broadcast(27, args[1])print("Message '"..args[1].."' sent!") Сохраняем, и закрываем. Это будет программка для тестирования контроллера. 5. Тест! Пишем в консоль send open. Дверь открылась! Пишем send close. Дверь закрылась! Пишем send opeh Упс! Опечатка. О_О
  2. Очередная Программа для дистанционного управления дроном с планшета Может быть использована в разных целях, например просто поиграть с дроном или полетать на всегда востребованном свинолёте Скриншоты: Возможности программы: Сборка планшета и дрона Собственно вам потребуется планшет с минимально такой комплектацией: Корпус планшета (1 уровень) Центральный процессор (1 уровень) Память (2 уровень) Видеокарта (2 уровень) Плата беспроводной сети Жёсткий диск (1 уровень) (С установленной OpenOS) EEPROM (Lua Bios) Улучшение "Навигация" (По желанию, без него не будет работать управление с учётом направления взгляда) Интернет карта (По желанию, без неё не получится напрямую скачать программу с Pastebin) Также вам потребуется сам дрон с минимально такой комплектацией: Корпус дрона (1 уровень) Центральный процессор (1 уровень) Память (1 уровень) Плата беспроводной сети EEPROM (с программой) (Можно установить на уже собранный дрон) Улучшение "Поводок" Улучшение "Инвентарь" Установка программы Программа для планшета При наличии интернет карты можно скачать выполнив команду: pastebin get EYkxNTss ud.lua Программа для дрона Устанавливается на компьютер для последующей записи в чип EEPROM! При наличии интернет карты можно скачать выполнив команду: pastebin get G6JJfxfh udBios.lua Для записи программы для дрона в чип EEPROM, возьмите EEPROM вставте его в компьютер (вместо того что там был) и выполните команду: flash -q udBios.lua UDRC Теперь достаньте с компьютера уже прошитый чип EEPROM и используйте его при сборке дрона, а если дрон уже собран, то совместите текущий чип с дроном в верстаке. Использование: Поставте дрон и включите его. На планшете запустите программу ud. Текущая версия программы - v1.0
  3. UPD #1 - Добавлена смена инструментов (инструкция ниже!) UPD #2 - Прикручена система координат (пока ни как не используется) Робот который копает карьер, как бы не было банально, но он копает его максимально экономно! Характеристики робота: корпус 1 ур. 1шт, процессор 1 ур. 1шт, оперативная память 1ур. 1шт, улучшение инвентаря минимум 1шт (чем больше тем лучше) Для авто-смены инструментов нужно добавить контроллер инвентаря 1шт Для работы дать роботу кирку как минимум железную, а лучше всего электро-бур В программе есть настройки: Настройки задаются в исходном коде программы! trashSlots - количество слотов инвентаря под фильтры, и мусор который робот будет выкидывать по мере продвижения (в эти слоты желательно класть: камень, землю, гравий, песок, ... , булыжник (он ложится в последний слот, что-бы не тормозить функцию проверки блоков) предметы в слотах располагаются по мере их количества в предполагаемом месте работы (самые часто встречаемые, должны лежать в начале, что-бы не тормозить работу) !!! Все слоты-фильтры должны быть заполнены !!! lengh - Длинна карьера width - Ширина карьера (вводите четные числа, если введенное число не будет четным, от него отнимется 1) deepM - Высота карьера (вводите числа кратные 3, если число не будет кратное 3, от него отнимутся значения пока оно не будет кратное 3) Для авто-смены инструментов: -------------------------------------------------------------------------------------- toolSwich - смена инструментов роботом true - да / false - нет (если нет контроллера инвентаря оставить выключенным) tool1 - 1 слот для инструмента tool2 - последний слот для инструмента !!! Все отмеченные слоты должны быть заняты !!! -------------------------------------------------------------------------------------- Примечание!!! ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- Устанавливайте высоту карьера на 10 блоков меньше чем высота установки робота, во избежание застревания оного ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- Принцип работы: Робот опускается под землю, и идет змейкой в заданных параметрах проверяя блок под собой и над собой на совпадение в слотах-фильтрах. Если робот не нашел совпадение, то добывает блок, если совпадение найдено, движется дальше. После выкапывания всего, робот возвращается на поверхность и на место дыры под собой ставит блок из последнего слота-фильтра. Пример работы робота: https://www.dropbox.com/s/be9l5rnday5s7ej/2016-08-25_01.40.42.png?dl=0 https://www.dropbox.com/s/vxm0kmklyhpngud/2016-08-25_01.40.51.png?dl=0 Комплектация робота: https://www.dropbox.com/s/vqpn5uei5sjjmes/2016-08-25_02.19.47.png?dl=0 Настройки программы: https://www.dropbox.com/s/nww84qssk4vqa8z/2016-08-25_02.21.21.png?dl=0 Загрузка робота: https://www.dropbox.com/s/jbeuoudovdg63rf/2016-08-25_02.24.45.png?dl=0 Накопанные ресурсы за 1ч:10м: https://www.dropbox.com/s/vfg78en1hw1alx8/2016-08-25_03.41.41.png?dl=0 Робот прошел вниз 36 блоков. У него сломалась кирка и почти сел аккумулятор, так что ставьте глубину не больше 30 - 33 Исходный код: http://pastebin.com/fEa4Qxef https://gist.github.com/L3rok1/17e9265bc33032a9230d5feefe29165a
  4. Krutoy

    Crunch - Хрустим 4к лимит!

    Эта статья - частичный перевод программы с официального форума. Введение Представьте что вы программируете микроконтроллер. И тут вы упираетесь в предел размера файла - 4к. Вам придется уродовать ваш код, что бы втиснуться, но есть лучшее ренешие: Crunch! Crunch (хруст) - это программа, сжимающая код на Lua. Она уменьшает размер файла разными способами, начиная от удаления лишних пробелов и табуляций, заканчивая переименованием локальных переменных в более короткие имена. Еще, Crunch умеет создавать "самораспаковывающийся" архив, используя алгоритм LZ77. Программа позволяет сжать файл в 4 раза, уменьшая размер до 25% от первоначального! Skex (загрузчик для биоса) был уменьшен с 3 990 до 2 366 байт - уменьшение на 40%. Totoro Recursive Miner был уменьшен с 9 390 до 3 477 байт. В 2.7 раз меньше. Теперь его можно всунуть в биос. Установка Просто скачайте tar архив и распакуйте в корень. Все файлы установятся по своим местам. github Распаковщик .tar файлов: wget 'https://raw.githubusercontent.com/mpmxyz/ocprograms/master/home/bin/tar.lua' Crunch: wget 'https://raw.githubusercontent.com/mpmxyz/ocprograms/master/tars/crunch.tar'tar -xf crunch.tar Для документации по командам наберите в консоли man crunch
  5. Писать программы для eeprom - то еще занятие. Попробуем облегчить этот процесс. в \config\OpenComputers.cfg устанавливаем bufferChanges=false Это отключит буферизацию, и все изменения файлов в каталогах сохранения будут немедленно отображены внутри игрыЗагружаем игру в сингл, строим себе базу, ставим там компьютер, и инсталлируем на него OpenOS.После этого, в каталоге \saves\%save_name%\opencomputers\ появится UID нашего виртуального "винчестера", со всем содержимымЗаписываем туда файл bibi local gpu = component.proxy(component.list("gpu")()) gpu.bind(component.list("screen")()) local cy=1 prn=function(...) local t={...} for i=1,#t do t[i]=tostring(t[i]) end gpu.set(1,cy,table.concat(t, ' ')) cy=cy+1 end local readfile=function(f) for addr in component.list("filesystem") do local fs=component.proxy(addr) local h=fs.open(f) if h then --костыль для init.lua computer.getBootAddress=function() return addr end local s,r='','' while r do r=fs.read(h,math.huge) s=s..(r or "") end fs.close(h) return s,f end end end prn('bibi: press a key to force init.lua') computer.beep(440) local s,f=readfile('boot.lua') if ({computer.pullSignal(1)})[1]=='key_down' or not s then s,f=readfile('init.lua') end if s then local r,e=load(s,f) if r then r,e=pcall(r) end prn('bibi:', r, e) else prn('bibi: no file') end prn('bibi: press a key to reboot') repeat until ({computer.pullSignal()})[1]=='key_down' computer.shutdown(true) И файл boot.lua prn('Hello world', nil~=false) После чего в OpenOS делаем: flash -q bibi bibi reboot Наблюдаем наш хелловорлд и убеждаемся, что nil и false - это две большие разницы: Теперь открываем наш boot.lua в блокноте или в чем вам удобно писать код, разминаем мозги и пальцы и погружаемся в процесс творчества. В одном окне блокнот с кодом, в другом - майнкрафт с нашим виртуальным компьютером. Написали-сохранили-проверили. --- Ошибки компиляции нашего кода будут выглядеть так: Ошибки выполнения так: А если нам захочется в OpenOS то мы нажмем секретную кнопку "а кей" когда наш bibi пискнет при старте.Также в OpenOS мы попадем если bibi не найдет файла boot.lua. А если и init.lua не найдет, то скажет "no file" и будет ждать когда мы исправим ситуацию ЗЫ Не злоупотребляйте prn(), она очень служебная и не умеет scroll, конечно scroll это всего лишь условие и две строки, но зачем?! Пишите свои prn-ы с преферансом и барышнями, предварительно поиграв ну хотя-бы с таким вот хелловорлдом:
  6. Смысл в том, чтобы писать программы для дронов, микроконтроллеров и роботов на компьютере и отправлять для установки на соответсвующие устройства. Пример использования: update -d dron.lua --дебаг режим(можно перепрошить дистанционно) update -r dron.lua -релиз режим(одноразовая прошивка). Подробный мануал по установке и использовании напишу после релиза роботоспособной версии. Пожелания, предложение принимаются
  7. Привет all. (после публикации заметил ошибку в названии темы и тегах, код для OpenComputers а не для ComputerCraft, я их постоянно путаю) код 204 байта: _=component;m=_.proxy(_.list('modem')())m.open(7)u=table.unpack::r::e={computer.pullSignal()}if e[1]=='modem_message'then;_={load(e[6])}if _[1]then;_={pcall(_[1],u(e,7))}end;m.send(e[3],7,u(_));end;goto r или код 231 байт: ::r::pcall(load("_=component;m=_.proxy(_.list('modem')())m.open(7)u=table.unpack::r::e={computer.pullSignal()}if e[1]=='modem_message'then;_={load(e[6])}if _[1]then;_={pcall(_[1],u(e,7))}end;m.send(e[3],7,u(_));end;goto r"));goto r Записать в EEPROM любого устройства имеющего сетевую карту, и включить устройство. На отдельном компьютере выполняющем роль сервера выполнить код примера: modem.open(7) modem.broadcast(7, "return 'Hello ', _VERSION, ...", true, 42, 'bebebe') Прочитать ответ от модема, и понять что произошло. ============================================= Дополнительные примеры: broadcast(7, 'bebebe') broadcast(7, 'bebebe()') broadcast(7, 'return {}') broadcast(7, true) broadcast(7) broadcast(7, 'return computer.pullSignal()' ) code=[[ --my super puper long program nice code ]]; broadcast(7, сode) broadcast(7, 'component.proxy(component.list("eeprom")()).set(...)', codeforflashing) и прочие извращения 1,2 покажут обработку ошибок на стадии компиляции и выполнения; 3,4,5 покажут различие в коде 204 и 231 и ограничения передачи данных; 6,... - некоторые возможности Для самых бегемотов: Можно Хранить код 204 в setData Можно добавить аутентиикацию, чтоб вражина за стенкой не broadcast-ил нам тут с планшета Можно построить SCADA-систему из дронов, роботов, контроллеров и компьютеров. Что-то еще... ЗЫ mods/OpenComputers-MC1.7.10-1.5.12.26-universal.jar примеры не проверял, писал здесь сходу.
×
×
  • Создать...