Chebuya 415 Опубликовано: 23 июня, 2018 Всем привет.Мне нужна ваша помощь. Я хочу сделать,чтобы если кто-то подходил к датчику движения-и подавался редстоун сигнал. Но вот проблема,сенсор нельзя впихнуть в микроконтроллер,да и не подключается он к внешним компонентам. Программа совсем не сложная,вдруг есть способ запустить программу в фоне?Потому что делать для этого целый компьютер ну совсем не хочется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
man_cubus 28 Опубликовано: 23 июня, 2018 (изменено) Вариант для RC common = {} common.event = require("event") common.cmp = require("component") common.side = require("sides").top common.red = common.cmp.redstone common.r_on = 15 common.r_off = 0 function common.reset_red() for i = 0, 5 do --хотя вообще-то так делать не стоит common.red.setOutput(i, common.r_off) end end function common.red_on() common.red.setOutput(common.side, common.r_on) end function common.red_off() common.red.setOutput(common.side, common.r_off) end function start(args) local valid_users = {["man_cubus"] = true} local sensitivity = 64 local r_timeout = 1 local sensor = common.cmp.motion_sensor sensor.setSensitivity(sensitivity) local function valid(name) return valid_users[name] end function common.motion_handler(...) local evt = {...} local function off() common.red_off() end if valid(evt[6]) then common.red_on() common.event.timer(r_timeout, off, 1) end end common.reset_red() common.event.listen("motion", common.motion_handler) end function stop() common.event.ignore("motion", common.motion_handler) common.red_off() end Код сохранить в /etc/rc.d/sense.lua и выполнить rc sense enable rc sense start Сигнал отправляется через верхнюю сторону блока, но ты сможешь это изменить (строка common.side = require("sides").top) Я дополнительно добавил возможность указать пользователей, которых детектор будет замечать чрез функцию valid. Если нужно чтобы сенсор срабатывал для всех, то просто возвращай из этой функции true Изменено 23 июня, 2018 пользователем man_cubus 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 23 июня, 2018 Ответ по существу уже прозвучал, но меня смущает формулировка вопроса: Но вот проблема,сенсор нельзя впихнуть в микроконтроллер,да и не подключается он к внешним компонентам. Программа совсем не сложная,вдруг есть способ запустить программу в фоне?Потому что делать для этого целый компьютер ну совсем не хочется.Если для выполнения задачи "целый компьютер" избыточен, а возможностей микроконтроллера недостаточно, то сгодится упрощенный компьютер, состоящий из корпуса, процессора, памяти, да EEPROM с программой. К тому же фоновые задачи могут иметь труднопрогнозируемый лаг, что сужает возможности их применения в процессах, требующих быстрой реакции. В этом случае заточенные под одну небольшую задачу микроконтроллеры и упрощенные компьютеры могут оказаться лучшим выбором. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор вопроса 415 Опубликовано: 23 июня, 2018 Даже написал.Спасибо,проверю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор вопроса 415 Опубликовано: 23 июня, 2018 Ответ по существу уже прозвучал, но меня смущает формулировка вопроса: Если для выполнения задачи "целый компьютер" избыточен, а возможностей микроконтроллера недостаточно, то сгодится упрощенный компьютер, состоящий из корпуса, процессора, памяти, да EEPROM с программой. К тому же фоновые задачи могут иметь труднопрогнозируемый лаг, что сужает возможности их применения в процессах, требующих быстрой реакции. В этом случае заточенные под одну небольшую задачу микроконтроллеры и упрощенные компьютеры могут оказаться лучшим выбором. Думаю,так проще.Но всё же,мне было интересно,возможно ли это.Хотя когда-то спокойно ставил на компы 3 уровня кодовый замок.Всем спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор вопроса 415 Опубликовано: 23 июня, 2018 Вот вариант для rc. Честно признаюсь что не тестировал и не отлаживал. Если возникнут проблемы - пиши. Хм,при rc sense start https://imgur.com/a/q7gbQct Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
man_cubus 28 Опубликовано: 23 июня, 2018 Хм,при rc sense start https://imgur.com/a/q7gbQct Битая ссылка Отладить смогу через полтора часа. А пока попробуй сам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
man_cubus 28 Опубликовано: 23 июня, 2018 (изменено) К тому же фоновые задачи могут иметь труднопрогнозируемый лаг, что сужает возможности их применения в процессах, требующих быстрой реакции. В этом случае заточенные под одну небольшую задачу микроконтроллеры и упрощенные компьютеры могут оказаться лучшим выбором. Возможно. Но есть пара возражений по существу и одно субъективное: Открытие двери не требует вот прямо моментальной реакции как правило. И для event.listen лаг сведен к достаточно малой величине чтобы не задумываться о нём. Упрощённые компьютеры - это замечательно, но если дверей/люков десяток, а игроков, которые ходят через них туда-сюда не так много (зачастую один владелец привата) , то один выделенный компьютер может быть более выгодным и легче расширяемым вариантом. Например если понадобится добавить еще и умное освещение на таких же сенсорах. RC рулит . А если серьёзно, то rc кроме всего прочего позволяет в rc.conf хранить конфиг к модулю и не переписывать код при добавлении новых сенсоров и редстоун-контроллеров. P.S. Решил допилить до варианта с многими сенсорами и многими редстоун-контроллерами Изменено 23 июня, 2018 пользователем man_cubus Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fingercomp 4 409 Опубликовано: 23 июня, 2018 К слову, моционный сенсор должен вставляться в микроконтроллеры, если вы не застряли где-то в начале прошлого года. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
man_cubus 28 Опубликовано: 23 июня, 2018 (изменено) Обновил код, теперь там отлаженная версия. Тут Fingercomp говорил о "свинской" уязвимости и я думаю, нелишне упомянуть тут об этом: если биркой назвать существо (например свинью) именем того пользователя, который есть в списке valid_users, то сенсор на это существо сработает. Так что не для критично важных вещей типа управления реактором, такую штуку использовать крайне осторожно. Изменено 23 июня, 2018 пользователем man_cubus Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 155 Опубликовано: 23 июня, 2018 есть пара возраженийА с чем тут можно спорить? С тем, что чувствительные к лагу процессы не должны отдавать распределиние приоритетов операционной системе? У каждой задачи своя специфика, и каждый из подходов может оказаться оптимальным в соответствующих условиях. Низкоприоритетные процессы с низкой нагрузкой прекрасно уживаются друг с другом и работают в фоне. Удобнее всего это сделать через механизмы, предоставляемые операционной системой. Процессы, требующие быстрой реакции, должны работать на выделенных компьютерах, желательно вообще без операционнной системы для снижения влияния её процессов. Открытие двери не требует вот прямо моментальной реакции как правилоЕсть и контрпримеры. Основным процессом может быть запущена zip-архивация, в результате работы которой двери будут открываться фоновым процессом с лагом в несколько секунд. А динамические схемы ядерных реакторов вообще требуют контролируемой задержки. Нужна уверенность в том, что при вызове computer.pullSignall() задержка будет иметь погрешность в пределах одного тика. Работа такой программы в фоне может привести к взрыву реактора. Упрощённые компьютеры - это замечательно, но если дверей/люков десяток, а игроков, которые ходят через них туда-сюда не так много (зачастую один владелец привата) , то один выделенный компьютер может быть более выгодным и легче расширяемым вариантом.Если компьютер выделенный, то и задача перестает быть для него фоновой. Такая программа сама распределяет приоритеты подзадач. К примеру, при управлении несколькими ядерными реакторами программа имеет возможность не только прогнозировать критические моменты каждого реактора, но и отсрочить их, безопасно распределяя управление периферией во времени. А когда критические моменты далеко, в это время можно дать команды на крафт и распределение свежих порций топлива, получить указания с центрального пульта или освежить инфу для него. То есть, контролировать множество устройств с одного компьютера является хорошей идеей. Но в ряде случаев плохой идей будет отдать распределение приоритетов между процессами операционной системе. rc кроме всего прочего позволяет в rc.conf хранить конфиг к модулю и не переписывать код при добавлении новых сенсоров и редстоун-контроллеровс тем же успехом центральный пульт может хранить прошивки и конфиги всех выделенных под конкретные задачи компьютеров, рассылать команды на их обновление, вести логи, отображать информацию о состоянии любой из систем и заниматься прочими низкоприоритетными задачами. Тут для RC самое место. Итог всё тот же: решение может считаться плохим или хорошим лишь применительно к конкретной задаче. Ну, а применительно к нашему форуму задачей вообще может оказаться получение опыта работы с RC. Тут выбор очевиден, против этого не возразить. И уж точно, не смотря на существование альтернатив, твой код заслуживает внимания. Это не оспаривается. Хорошая работа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chebuya Автор вопроса 415 Опубликовано: 23 июня, 2018 Да,всё работает.Спасибо,очень помогаете с изучением.В любом случае,спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Всем привет.Мне нужна ваша помощь.
Я хочу сделать,чтобы если кто-то подходил к датчику движения-и подавался редстоун сигнал.
Но вот проблема,сенсор нельзя впихнуть в микроконтроллер,да и не подключается он к внешним компонентам.
Программа совсем не сложная,вдруг есть способ запустить программу в фоне?Потому что делать для этого целый компьютер ну совсем не хочется.
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах