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

Включение редстоуна на определенное время + вкл/выкл одной кнопки

Вопрос

Всем привет

В общем есть прога, она установлена на главном компе, и чекает все сообщения в сети на 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
Изменено пользователем Koteyk0o

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


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

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

простой переключатель

if message == 12345 then
  if redstone.getOutput(side) == 0 then -- если на выходе 0
    redstone.setOutput(side, 15) -- подать 15
  else -- иначе
    redstone.setOutput(side, 0) -- подать 0
  end
end

мигание

while true do
  redstone.setOutput(side, 15)
  os.sleep(1) -- задержка в секундах
  redstone.setOutput(side, 0)
  if [[условие]] then
    break -- выход из цикла
  end
end

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


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

 

 

  1. цикл
  2. redstone.setOutput(side, 15)
  3. os.sleep(1) -- задержка в секундах
  4. redstone.setOutput(side, 0)

оно же так выключится и через наносекунду опять включится на 1 сек. Глаз не заметит мигания и будет думать, что оно всегда включено. Нужен еще один слип после выключения, наверно.

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


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

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

По идее, должно работать.

команды по сети:

  • modem.send(address, 3333, 'red')  - переключит состояние красн. сигнала.  http://ocdoc.cil.li/api:colors
  • modem.send(address, 3333, 'green', 5)  - будет мигать зелен. сигн. 5 раз
  • modem.send(address, 3333, 'on') - включит все сигналы

и т.д.

 

 

 

local side = sides.back -- сторона подключения многожильного кабеля (опционально, left/right/top/bottom/back/front)
local t_blink = 0.5 -- пауза, сек. в мигалке. 

local function unSetAll()-- вЫрубает все вых. сигналы в бандлэдКейбле
  for i = 0, 15 do
    rs.setBundledOutput(side, i, 0)
  end
end

local function setAll()-- врубает все вых. сигналы в бандлэдКейбле
  for i = 0, 15 do
    rs.setBundledOutput(side, i, 255)
  end
end

function colorBlink(color, count) -- "мигалка" выбранным цветом (c запоминанием начального состояния)
  if rs.getBundledInput(side, color) > 0 then
    for i = 1, count do
      rs.setBundledOutput(side, color, 0)
      os.sleep(t_blink)
      rs.setBundledOutput(side, color, 255)
      os.sleep(t_blink)
     end
   else
     for i = 1, count do
       rs.setBundledOutput(side, color, 255)
       os.sleep(t_blink)
       rs.setBundledOutput(side, color, 0)
       os.sleep(t_blink)
      end
    end
end

local function colorSwitch( color )-- проверим, не включен ли данный цвет, если включен, то выключим. Если выключен, то включим его:
  if rs.getBundledInput(side, color) > 0 then
    rs.setBundledOutput(side, color, 0)
  else
    rs.setBundledOutput(side, color, 255)
  end
end

--== главный цикл ==
while true do
  local _, _, from, port, _, message, arg01 = event.pull("modem_message")
  --проверим, существует ли цвет вообще в таблице colors, и если да, то выполним свитч. Также проверим другие возможные команды  
  --по сети(выключить всё, включить всё, остановить программу)
  if colors[message] then
      if not arg01 then
        colorSwitch(colors[message])
      else
	colorBlink(colors[message], tonumber(arg01))
      end
   elseif message == 'off' then
       unSetAll()
   elseif message == 'on' then
       setAll()
   elseif message == 'stop' then
       break
  end
end 

 


 

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


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

Doob, Alex, огромное вам спасибо))

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


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

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

Когда ее нажимаю, должно написать 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

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


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

Можно ловить событие redstone_changed. Но оно не работает с цветными кабелями.

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


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

Можно ловить событие redstone_changed. Но оно не работает с цветными кабелями.

Спасибо большое, этого в принципе хватило

Если сигнал изменился -> какой сигнал изменился -> если тот сигнал который нам надо -> выполняем то что задано

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

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


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

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

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

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

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

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

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

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

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


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