Koteyk0o
-
Публикации
53 -
Зарегистрирован
-
Посещение
-
Победитель дней
1
Сообщения, опубликованные пользователем Koteyk0o
-
-
Почему же? Сколько раз выполнится функция в цикле, столько же раз выполнится и print
я неправильно написал, как раз таки да, сколько выполнится функция, столько выполнится и print
а мне надо чтобы Print выполнился только один раз, хоть и функция в цикле
По идее надо сделать переменную, и если print выполняется один раз, то записываем это в переменную, и print больше не выполняется
Или можно сделать как-то еще?
-
То-есть допустим есть цикл, есть функция
В функции есть команда print('Привет')
Функция находится в цикле, ибо там обновляется информация
Но в функции команда print('Привет') выполняется только один раз, хоть и функция в цикле
-
Ну а как допустим сделать действие один раз в цикле?
-
Это я знаю, да
Но так как страница находится в цикле, если поместить в код страницы term.clear() допустим, то страница будет постоянно очищаться, то-есть мигать
-
Спасибо, а как очистить экран один раз после переключения страницы?
То-есть убрать старую инфу с экрана
А то бывает что символы после переключения накладываются
-
Наверное это глупая тема, но все же.
Допустим у меня есть несколько страниц в дисплее с информацией и графикой.
Как очистить один раз экран в цикле?
И когда осуществляется переход между страницами дисплея, надо его чистить.
Но при этом, на некоторых страницах есть информация, которая обновляется в реал тайме.
И как сделать переход между страницами, не останавливая выполнение программы? Ну то-есть не используя os.sleep, чтобы информация на экранах могла обновляться, но и при этом был переход между страницами.local component = require("component") local term = require("term") local gpu = component.gpu local computer = require('computer') local rs = component.redstone local green = 0x04ff00 -- зеленый цвет local red = 0xff0000 -- красный цвет local gray = 0x262525 -- серый цвет local white = 0xffffff -- белый цвет local yellow = 0xfaff00 -- желтый local purple = 0xc300ff -- фиолетовый local black = 0x000000 -- черный local blue = 0x000cff -- синий gpu.setBackground(black) local function getAllSpecificComponets(filter) local tableObjects ={} for address, componentType in component.list(filter) do table.insert(tableObjects, component.proxy(address)) end return tableObjects end local function mfsu() -- первая страница информации gpu.setResolution(4,3) gpu.setForeground(white) gpu.set(1,1,'MFSU') myMFSU = getAllSpecificComponets('mfsu') gpu.set(1,3,tostring(math.floor(myMFSU[6].getStored()*100/40000000))..' %') end local function clocks() -- вторая страница информации gpu.setResolution(5,3) gpu.setForeground(white) gpu.set(2,1,'TIME') myMFSU = getAllSpecificComponets('mfsu') gpu.set(1,3,os.date('%H:%M')) end while true do mfsu() -- Как вот тут сделать переход между страницами, не прерывая обновление информации? clocks() end -
-
Не работает!1!1111!!

Блин, автор был последний раз на форуме в Июне, походу не увижу рабочий монитор жидкостей((
Ни у кого нет норм монитора жидкостей?
-
по идее как-то так
string.gmatch(s, pattern) s:gmatch(pattern)
то есть есть стринги какие-то, которые летят из чата, а комп их в цикле принимает
local e, adr, ..., msg = event.pull("chat_command")и обрабатывает строку msg
Попробуй так:
local function split(str) local data = {} for word in str:gmatch("%a+") do table.insert(data, word) end return data end words = split('Hello Bob') print(words[1]) --> Hello print(words[2]) --> BobСпасибо большое, все работает
И как раз понял как это все работает

-
чатбокс юзера в вайт-лист сам по себе не добавит. Нужен, видимо, еще и комблок какой-нибудь к компу прикрутить. То есть, этой системой должен обладать админ какой-то. Но зачем тогда этот компутронис, если админ может просто набрать /whitelist add nick
Ну а так-то, сообщения из чата нужно просто распарсить на слова отдельные и проверить: если первое слово == adduser, то проверим, есть ли второе слово, и если есть, то это и есть ник.
Да, забыл написать, есть компик с прогой, прога чекает чат чатбоксом
А как разобрать сообщение на отдельные слова и проверить ник? В инете не нашел инфы
И забыл написать, вайт-лист в проге, не на сервере
То-есть список тех игроков, на сообщения которых чатбокс будет реагировать
-
В общем есть чат бокс из Computronics
И надо сделать добавление юзера в вайт-лист командой из чата
допустим $$adduser НИК
Как считать ник?
Допустим отправляем в чат $$adduser Koteyk0o и получаем сообщение "$$adduser Koteyk0o"
Как из этого сообщения считать ник?
-
после else в строчках 173 и 182 добавь gpu.setForeground(red)
А вообще, зачем столько лишних символов? Код можно в трое сократить
Даа, точно, после else забыл про gpu.setForeground(red)
Жесть, целый час искал проблему, не мог понять в чем косяк
Да, код попробую сократить
Огромное спасибо
a еще лучше назначить каждой иконке координаты и значение в таблице, чтобы не путаться
Да, спасибо, поправлю код
-
Сделал небольшую хрень для визуализации питания систем дома
Но есть проблема с 3 последними стрелкамиИменно почему-то последние 3 стрелки тупят, со всем остальным норм
Мне кажется это потому, что возможно я неправильно использую gpu.setForeground
Проблема находится на строчках 157-185
При активации стрелки на строчке 157, активируются все стрелки которые находятся ниже, то-есть 169,178 строчки
С остальными стрелками все нормально, они загораются как надо
Буду очень благодарен за помощь
Кодговнокод прогиlocal component = require("component") local term = require("term") local gpu = component.gpu local rs = component.redstone namecolor = 0xffffff -- цвет названия программы fontcolor = 0x77f3f9 -- цвет названия систем green = 0x04ff00 -- зеленый цвет red = 0xff0000 -- красный цвет gray = 0x636363 -- серый цвет white = 0xffffff -- белый цвет timing = 0.5 -- задержка обновления информации (в секундах) gpu.setResolution(60,20) gpu.setBackground(0x000000) rs.setBundledOutput(3,4,255) -- ПОСЛЕ НАСТРОЙКИ УБРАТЬ ЭТОТ МУСОР rs.setBundledOutput(3,3,255) -- И ЭТО ДЕРЬМО ТОЖЕ НАХЕР term.clear() -- Выводим название проги на экран gpu.setForeground(namecolor) gpu.set(20,1,'ENERGY SUPPLY MONITOR') -- Выводим названия систем gpu.setForeground(fontcolor) gpu.set(19,6,'HV Solar Panel Supply') gpu.set(2,11,'Primary---MFSU---System') gpu.set(37,11,'Secondary-MFSU-System') gpu.set(37,15,'Computers / AE Supply') gpu.set(1,15,'Tools') gpu.set(8,15,'User1') gpu.set(16,15,'User2') gpu.set(24,15,'AE Tools') -- рисуем одну одинокую полосочку gpu.setForeground(gray) gpu.set(27,11,'─') gpu.set(28,11,'─') gpu.set(29,11,'─') gpu.set(30,11,'─') gpu.set(31,11,'─') gpu.set(32,11,'─') gpu.set(33,11,'─') gpu.set(34,11,'─') while true do -- Цикл рисования хлама os.sleep(timing) -- Отображение отключенных систем if rs.getBundledInput(3,13) > 0 then -- Питание комнаты приборов отключено gpu.setForeground(white) gpu.set(1,20,'Tools OFF') else gpu.setForeground(white) gpu.set(1,20,' ') end if rs.getBundledInput(3,14) > 0 then -- Питание комнаты User1 отключено gpu.setForeground(white) gpu.set(15,20,'User1 OFF') else gpu.setForeground(white) gpu.set(15,20,' ') end if rs.getBundledInput(3,15) > 0 then -- Питание комнаты User1 отключено gpu.setForeground(white) gpu.set(29,20,'User2 OFF') else gpu.setForeground(white) gpu.set(29,20,' ') end if rs.getBundledInput(3,12) > 0 then -- Питание приборов МЭ системы отключено gpu.setForeground(white) gpu.set(43,20,'AE Tools OFF') else gpu.setForeground(white) gpu.set(43,20,' ') end -- Отображение стрелок if rs.getBundledInput(3,0) > 0 then -- стрелка подачи питания на компы и мэ gpu.setForeground(green) gpu.set(47,12,'│') gpu.set(47,13,'│') gpu.set(47,14,'▼') else gpu.setForeground(red) gpu.set(47,12,'│') gpu.set(47,13,'│') gpu.set(47,14,'▼') end if rs.getBundledInput(3,2) > 0 then -- стрелка зарядки вторичной МФСУ системы от солнечных панелей gpu.setForeground(green) gpu.set(39,7,'│') gpu.set(39,8,'│') gpu.set(39,9,'│') gpu.set(39,10,'▼') else gpu.setForeground(red) gpu.set(39,7,'│') gpu.set(39,8,'│') gpu.set(39,9,'│') gpu.set(39,10,'▼') end if rs.getBundledInput(3,6) > 0 then -- стрелка подзарядки основной МФСУ системы от солнечных панелей gpu.setForeground(green) gpu.set(19,7,'│') gpu.set(19,8,'│') gpu.set(19,9,'│') gpu.set(19,10,'▼') else gpu.setForeground(red) gpu.set(19,7,'│') gpu.set(19,8,'│') gpu.set(19,9,'│') gpu.set(19,10,'▼') end if rs.getBundledInput(3,7) > 0 then -- стрелка питания комнаты с приборами gpu.setForeground(green) gpu.set(3,12,'│') gpu.set(3,13,'│') gpu.set(3,14,'▼') else gpu.setForeground(red) gpu.set(3,12,'│') gpu.set(3,13,'│') gpu.set(3,14,'▼') end if rs.getBundledInput(3,8) > 0 then -- стрелка питания комнаты user 1 gpu.setForeground(green) gpu.set(10,12,'│') gpu.set(10,13,'│') gpu.set(10,14,'▼') else gpu.setForeground(red) gpu.set(10,12,'│') gpu.set(10,13,'│') gpu.set(10,14,'▼') end if rs.getBundledInput(3,9) > 0 then -- стрелка питания комнаты user 2 gpu.setForeground(green) gpu.set(18,12,'│') gpu.set(18,13,'│') gpu.set(18,14,'▼') else gpu.setForeground(red) gpu.set(18,12,'│') gpu.set(18,13,'│') gpu.set(18,14,'▼') end if rs.getBundledInput(3,10) > 0 then -- стрелка питания приборов МЭ системы gpu.setForeground(green) gpu.set(24,12,'│') gpu.set(24,13,'│') gpu.set(24,14,'▼') else gpu.setForeground(red) gpu.set(24,12,'│') gpu.set(24,13,'│') gpu.set(24,14,'▼') end if rs.getBundledInput(3,1) > 0 then -- стрелка подзарядки первичной системы от вторичной gpu.setForeground(green) gpu.set(26,11,'─') gpu.set(25,11,'◄') else gpu.set(26,11,'─') gpu.set(25,11,'◄') end if rs.getBundledInput(3,5) > 0 then -- стрелка подзарядки вторичной системы от первичной gpu.setForeground(green) gpu.set(35,11,'─') gpu.set(36,11,'►') else gpu.set(35,11,'─') gpu.set(36,11,'►') end endРаботает нормально, загорается одна стрелочка, как и надо

А вот тут косяк, должна гореть одна нижняя стрелочка, горят все три сразу

-
И слипы тут использовать уже нельзя иначе событие от модема может быть пропущено. Таймаут должен задаваться первым параметром функции pull.
Т.е. алгоритм должен быть где то таким:
while true do Ждем событие от модема в течение времени 0.5 сек Если пришло "LampON", blink = true Если пришло "LampOFF", blink = false Если blink == true -- настоящие программеры пишут просто blink -- изменяем состояние лампы -- именно изменяем, а не включаем, ждем, выключаем и снова ждем -- иначе выключаем лампу endА можно использовать слушателя или многопоточность, но это на крайний случай.
Спасибо, понял
Получается когда лампа мигает с помощью слипов, и приходит событие от модема, то оно просто пропускается из-за сна системы
Спасибо большое за помощь
-
Ты меня не слушаешь.
blink - это не эвент. Это переменная с флагом. Она сохраняет своё состояние. Пока в переменной находится значение true - лампа будет мигать.
Потому что главный цикл повторяется снова и снова.
А чтобы главный цикл повторялся без задержек - тебе надо модифицировать вызов event.pull() и добавить туда ограничение на время.
Тогда функция будет ждать эвентов пару десятых секунды, затем завершаться, потом будет мигать лампа (один раз), потом снова будет пара десятых секунды ожидания эвентов - а потом снова одно мигание. И так пока ты не сменишь значение флага.
Что blink это не эвент а переменная это я понял, просто не так выразился
Я имел ввиду то, что когда эвент blinkOFF, то переменной blink присваивается значение false
добавил в event.pull таймаут 0.5 секунд, но все равно комп отказывается видеть команду на выключение, и из-за этого не присваивает переменной blink значение false, и мигание просто не отключается
чувствую себя тупым(((
local component = require("component") local event = require("event") local m = component.modem local rs = component.redstone m.open(27) -- открываем порт rs.setBundledOutput(4,0,0) -- вырубаем все сигналы rs.setBundledOutput(4,3,0) rs.setBundledOutput(4,9,0) rs.setBundledOutput(4,15,0) rs.setBundledOutput(4,1,0) rs.setBundledOutput(4,4,0) rs.setBundledOutput(4,14,0) rs.setBundledOutput(4,6,0) os.sleep(0.2) m.broadcast(80,'Компьютер загружен') -- сообщаем главному компьютеру о загрузке while true do local _, _, from, port, _, message = event.pull(0.5,modem_message) print('message= ',message) if message == 'LampON' then -- значение переменной 1 local blink = true end if message == 'LampOFF' then -- значение переменной 0 local blink = false end if blink == true then -- если переменная больше нуля, то мигаем rs.setBundledOutput(4,4,255) os.sleep(0.4) rs.setBundledOutput(4,4,0) os.sleep(0.3) end end -
Нет. У тебя же есть флаг, который отвечает за то, что хранит инфу о том, надо мигать или нет.
Тут можно даже использовать логическое значение: local blink = false.
Когда получаешь соообщение на включение - переключаешь флаг на true.
А дальше главный цикл начинает выглядеть так (условно):
* проверили эвенты
* если эвент на включение - blink = true
* если эвент на выключение - blink = false
* if blink then мигаем один раз end
В таком случае лампа мигает один раз, и на этом все
А необходимо сделать так, что когда blink = true лампа мигает бесконечное кол-во раз, пока не будет эвента на выключение, то-есть blink = false
-
А чтобы лампа мигала постоянно, предлагаю снизить время ожидания эвентов в том случае, если выполняется условие мигания. Тогда программа будет проверять эвенты, мигать, потом снова проверять эвенты, потом снова мигать.
Спасибо за разъяснение, но как я понимаю она будет мигать тогда, когда будет команда на включение
И выходит придется постоянно подавать команду на включение?
-
В общем когда в комп по сети отправлена команда "LampON", то он должен мигать лампой которая подключена к нему бандлед кабелем.
Команда принимается, все ок, но это нельзя выключить
когда подается команда "LampOFF" компьютер на нее не реагирует, пока не убьешь цикл мигания
В чем косяк?
Подскажите пожалуйста, какая у меня ошибка в моем
кодеговнокоде))local component = require("component") local event = require("event") local m = component.modem local rs = component.redstone m.open(27) -- открываем порт rs.setBundledOutput(4,0,0) -- вырубаем все сигналы rs.setBundledOutput(4,3,0) rs.setBundledOutput(4,9,0) rs.setBundledOutput(4,15,0) rs.setBundledOutput(4,1,0) rs.setBundledOutput(4,4,0) rs.setBundledOutput(4,14,0) rs.setBundledOutput(4,6,0) os.sleep(0.2) m.broadcast(80,'Компьютер загружен') -- сообщаем главному компьютеру о загрузке while true do local _, _, from, port, _, message = event.pull("modem_message") print("Got a message from " .. from .. " on port " .. port .. ": " .. tostring(message)) if message == 'LampON' then -- значение переменной 1 lampstatus = 1 end if message == 'LampOFF' then -- значение переменной 0 lampstatus = 0 end while lampstatus > 0 do -- если переменная больше нуля, то мигаем rs.setBundledOutput(4,4,255) os.sleep(0.4) rs.setBundledOutput(4,4,0) os.sleep(0.3) end end -
Полный путь указывай, от корня.
спасибо большое
-
1
-
-

Прога не работает, или я делаю что-то не так?
-
1
-
-
Можно ловить событие redstone_changed. Но оно не работает с цветными кабелями.
Спасибо большое, этого в принципе хватило
Если сигнал изменился -> какой сигнал изменился -> если тот сигнал который нам надо -> выполняем то что задано
-
И еще вопрос, есть обычная физическая кнопка, она подключена допустим к красному проводу в шине.
Когда ее нажимаю, должно написать button pressed.
Но ничего не происходит.
Что не так?
local component = require("component") local rs = component.redstone while true do if rs.getBundledInput(left,red) > 0 then print("BUTTON PRESSED") end end -
Doob, Alex, огромное вам спасибо))
-
Всем привет
В общем есть прога, она установлена на главном компе, и чекает все сообщения в сети на 3333 порту
И есть второй комп, который при нажатии на кнопку отправляет в сеть сообщение с цифрой нажатой кнопки (То-есть пятая кнопка это сообщение в виде "5555")
То-есть на кнопку нажал, сообщение отправилось, главный комп сообщение принял, включил определенный редстоун сигнал, и выключил его
У меня такого не происходит, пока не нажмешь какую нибудь другую кнопку на втором компе
И как можно реализовать вкл/выкл одной кнопкой?
То-есть пришло сообщение, сигнал включился, пришло сообщение еще раз - выключился
И еще вопрос, как помигать лампочкой через редстоун адаптер?
То-есть допустим 1 секунду горит, 1 секунду не горит. и так бесконечно пока не прекратишь этот цикл
На ардуинке все просто, там через delay можно сделать)) или millis, а тут не особо врубаюсь как это сделать
Сорян за такие тупые вопросы, но только начал осваивать Lua((
local component = require("component") local event = require("event") local m = component.modem local rs = component.redstone local sides = require("sides") local colors = require("colors") m.open(3333) print(m.isOpen(3333)) while true do local _, _, from, port, _, message = event.pull("modem_message") print("Got a message from " .. from .. " on port " .. port .. ": " .. tostring(message)) if message == 5555 then rs.setBundledOutput(5,11,255) print("button5") end if message == 1111 then print("button1") end if message == 2222 then print("button2") end if message == 3333 then print("button3") end if message == 4444 then print("button4") end end

Очистка экрана один раз за цикл, и переход между страницами информации
в Разные (отсортировать)
Опубликовано:
Вся функция должна выполняться в цикле, но в функции есть команда, которая выполняется один раз, помимо другого
То-есть вот так примерно
local function kek() print('Привет') -- print надо выполнить один раз if rs.getBundledInput(1,1) > 0 then rs.setBundledOutput(1,5,255) else rs.setBundledOutput(1,5,0) end end while true do kek() os.sleep(0.5) end