Перейти к содержимому
  • 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

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


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

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

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

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

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

  • 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 

 


 

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


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

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

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 сек. Глаз не заметит мигания и будет думать, что оно всегда включено. Нужен еще один слип после выключения, наверно.

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


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

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 эмодзи.

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

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

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


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