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

Механизм основанный на сенсоре движения

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

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

Конкретно в моем случае это дверь в мои апартаменты.

Изображение

Изображение

Принцип работы:

Если замечает движение, проверяет, есть ли ник ( если он есть) среди указанных в таблице( по умолчанию реагирует на меня и двд), если есть, то открывает дверь и ждет, пока не пройдет 5 секунд либо игрок не окажется по другую сторону двери. После этого ожидает 5 секунд, перед тем как начать регистрировать новые движения.

Также программа выдает различную информацию о своей работе:

Изображение

 

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

Для того, чтобы изменить список игроков, у которых есть доступ пройти, достаточно изменить таблицу, являющуюся первой строкой кода.

Также(не уверен) можно записать одно поле как nil(без кавычек), тогда, возможно, дверь будет пропускать мобов.

 

 

abletopass={"jammer312","dvd406"}
function check(cnick)
for k,v in pairs(abletopass) do
if cnick==v then return true end
end
return false
end
sensor = require("component").motion_sensor
red=require("component").redstone
while true do
local event=require("event")
while true do
type,addr,x,y,z,prnick = event.pull()
if type=="motion" and check(prnick) then
wait = true
print("motion of "..prnick.." at " .. x ..y .. z)
pass=(z>0)
event.timer(5,function () wait=false end)
red.setOutput(require("sides").top,15)
print("open")
while wait do
type,addr,x,y,z,nick=event.pull()
if type=="motion" and nick==prnick and pass==(z<0) then wait=false;print("passed at "..x..y..z) end
end
print("closing")
red.setOutput(require("sides").top,0)
os.sleep(5)
break
end
end
end

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


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

Программки выкладывайте в прямо в теме, чтобы не было проблем со сбором программ в последствии

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


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

эм а что бы в ней поменять чтоб с запада на восток работало?

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


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

Подозреваю, нужно существенно переделать код программы. А именно заменить z>0, z<0 на x>0, x<0 соответственно

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


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

Проблема в том, что как только ты подошёл к двери, она сама открывается без дальнейших действий с твоей стороны.

В этом есть плюсы, но есть и очевидные минусы. Подошёл к двери посмотреть, кто там...

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


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

Проблема в том, что как только ты подошёл к двери, она сама открывается без дальнейших действий с твоей стороны.

В этом есть плюсы, но есть и очевидные минусы. Подошёл к двери посмотреть, кто там...

Можно на КК сделать мониторинг кто возле твоей территории.

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


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

был странный баг(дверь открывалась не на нужное время а на доли секунды затем открывалась и закрывалась(цыкл)))

в виду того что я незнаю луа, методом научного исключения части кода удалил часть кода и баг прекратился,

хотя есть подозрение что надо было просто os.sleep(5) поменять на другое значение.

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

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


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

был странный баг(дверь открывалась не на нужное время а на доли секунды затем открывалась и закрывалась(цыкл)))

в виду того что я незнаю луа, методом научного исключения части кода удалил часть кода и баг прекратился,

хотя есть подозрение что надо было просто os.sleep(5) поменять на другое значение.

Методом научного тыка не зная Луа удалил часть кода и баг прекратился  :D  :smile9: Поднял настроение!!!

 

Разобрал телевизор, чего-то там перепаял, собрал все назад  - телевизор начал работать и еще детали лишние остались :)

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


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

В итоге получилось вот это.

 

abletopass={"MorfSD","Zeus"}
function check(cnick)
for k,v in pairs(abletopass) do
if cnick==v then return true end
end
return false
end
sensor = require("component").motion_sensor
red=require("component").redstone
while true do
local event=require("event")
while true do
type,addr,x,y,z,prnick = event.pull()
if type=="motion" and check(prnick) then
wait = true
print("motion of "..prnick.." at " .. x ..y .. z)
pass=(x>0)
event.timer(5,function () wait=false end)
red.setOutput(require("sides").top,15)
print("Дверь_открыта")
while wait do
type,addr,x,y,z,nick=event.pull()
end
red.setOutput(require("sides").top,0)
break
os.sleep(99)
end
end

end

 

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


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

В итоге получилось вот это:

 

Ты удалил строки

if type=="motion" and nick==prnick and pass==(z<0) then
          wait=false; print("passed at "..x..y..z) end

которые закрывали дверь раньше, чем истекут 5 секунд, если игрок уже прошел через нее.

 

И поменял местами строки

break
os.sleep(5)

В результате команду os.sleep() программа пропускает и  нет задержки в 5 сек. после того как кто-то прошел.

 

Странный баг был из-за того, что ты поменял условие на pass=(x>0) в одном месте, в в другом (тот кусок, который ты потом вырезал) - не поменял.

 

PS. Я бы выкинул все "реквайры" в начало программы, и добавил бы брейк таймера в условие преждевременного выхода. :P

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

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


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

так проблема в том что когда я прохожу через дверь я попадаю в слепую зону датчика,

дверь открывается датчиком только с улицы, из помещения дверь открывается нажимными плитами, 

общая толщина двери 3 блока

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

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


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

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

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

Гость
Ответить в тему...

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

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

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

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

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


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