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


Фотография

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


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 11

#1 Оффлайн   jammer312

jammer312
  • Пользователи
  • Сообщений: 62
  • Уровень сигнала: 118,36%
  • В игре: 890 час. 55 мин.

Награды

           

Отправлено 30 Июль 2014 - 15:16

Небольшая программа, позволяющая активировать сигнал красного камня, когда видит указанных игроков.
Конкретно в моем случае это дверь в мои апартаменты.
Изображение
Изображение
Принцип работы:
Если замечает движение, проверяет, есть ли ник ( если он есть) среди указанных в таблице( по умолчанию реагирует на меня и двд), если есть, то открывает дверь и ждет, пока не пройдет 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


#2 Оффлайн   1Ridav

1Ridav

    Орден К.А.

  • Администраторы
  • Сообщений: 279
  • Уровень сигнала: 4,38%
  • В игре: 32 час. 57 мин.

Награды

            2      

Отправлено 30 Июль 2014 - 15:30

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

#3 Оффлайн   MorfSD

MorfSD
  • Пользователи
  • Сообщений: 113
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 11 Декабрь 2014 - 15:55

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



#4 Оффлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 748
  • Уровень сигнала: 4,84%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 11 Декабрь 2014 - 17:22

простенько. :smile3:  :smile9:



#5 Оффлайн   Zer0Galaxy

Zer0Galaxy
  • Гуру
  • Сообщений: 1 228
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

   5                              

Отправлено 11 Декабрь 2014 - 17:36

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


  • Alex это нравится

#6 Оффлайн   Aex

Aex
  • Пользователи
  • Сообщений: 55
  • Уровень сигнала: 60,71%
  • В игре: 456 час. 58 мин.

Отправлено 12 Декабрь 2014 - 03:47

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

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



#7 Оффлайн   GravityFolls

GravityFolls
  • Пользователи
  • Сообщений: 95
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 14 Декабрь 2014 - 03:20

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

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

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



#8 Оффлайн   MorfSD

MorfSD
  • Пользователи
  • Сообщений: 113
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 22 Декабрь 2014 - 12:17

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

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

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


Сообщение отредактировал MorfSD: 22 Декабрь 2014 - 12:20

  • Alex и Fingercomp это нравится

#9 Оффлайн   Alex

Alex
  • Администраторы
  • Сообщений: 3 742
  • Уровень сигнала: 52,19%
  • В игре: 392 час. 51 мин.

Награды

                 

Отправлено 22 Декабрь 2014 - 13:00

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

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

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

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

 

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



#10 Оффлайн   MorfSD

MorfSD
  • Пользователи
  • Сообщений: 113
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 22 Декабрь 2014 - 15:28

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

Спойлер



#11 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 735
  • Уровень сигнала: 0,29%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 22 Декабрь 2014 - 16:17

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

 

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

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: 22 Декабрь 2014 - 16:18


#12 Оффлайн   MorfSD

MorfSD
  • Пользователи
  • Сообщений: 113
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Отправлено 23 Декабрь 2014 - 11:54

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

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

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


Сообщение отредактировал MorfSD: 23 Декабрь 2014 - 11:56





Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных