Перейти к публикации
Форум - ComputerCraft
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 соответственно

  • Like 1

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


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

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

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

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


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

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

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

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

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


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

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

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

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

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

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


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

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

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

хотя есть подозрение что надо было просто 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

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×