Управление набором ламп освещения
- Войдите на сайт для отправки комментариев
Сб, 19/05/2018 - 01:45
Здравствуйте, задумка такая: есть десяток PIR датчиков HC-SR501, и десяток выключателей освещения, нужно все это совместить с помощью Arduino, и вести учет. Вопрос в том как красивее это реализовать. Пока представление следующее, написать функцию переключение выключателя освещения, она будет выглядить так:
void lampswitch (byte lampnumber) { digitalWrite(lampnumber,HIGH); delay(300); digitalWrite(lampnumber,LOW); }
в качестве параметра передавать ей номер лампы. Осталось только выяснить какой из десятка латчиков сработал, и передать его номер этой функции. Можно конечно опрашивать все десять последовательно, и если сигнал от какого то из датчиков HIGH, запустить lampswitch с соответствующим номером. Но может есть более короткое и красивое решение?
Спасибо!
Странно но у вас в коде я вижу что нужно передавать номер пина.
Очень сомневаюсь что это чем то поможет в реализации задачи.
Можно вообще ничего не опрашивать и ничего работать не будет
Делаем быстро качественно и недорого.... выбирайте 2....
Решение или красивое с точки зрения кода или затрат ресурсов? Короткое? опять тот же вопрос, короткое по коду или по ресурсам?.
Можно прерывания, можно циклы, можно наговнокодить все проверки руками, можно вообще уйти в ООП и сделать ебическую архитектуру для тривиальной задачи. Все варианты имеют право на жизнь, но не все они уместны для любой задачи.
Ваш случай сначало наговнокодить всё руками, потом перейти к циклам.
зы. Вы очень рано заморочились с оптимизацией, не нужно этого делать при отсутствии навыков программирования от слова совсем..
Делаете чтоб просто работало, а потом придет понимание что и где нужно оптимизировать.
А какой смысл включать лампу на 300мс, а потом выключать?
И делать это раз в три секунды?
..
Но может есть более короткое и красивое решение?
Там выключатель который управляется импульсом 300 мс, раз в три секунды не нужно.
Подскажите, пожалуйста хорошее ли решение: прерыванием по таймеру каждые 100 мс, считывать состояния пинов с подключенными PIR датчиками, в цикле от 1 до 10 по количеству датчиков, в случае если на пине HIGH, выполнить функцию lampswitch с параметром номера прохода цикла. Будет ли успевать Arduino за 100 мс считать состояния 10 пинов в цикле?
Спасибо!
прерыванием по таймеру каждые 100 мс, считывать состояния пинов с подключенными PIR датчиками, в цикле от 1 до 10 по количеству датчиков, в случае если на пине HIGH, выполнить функцию lampswitch с параметром номера прохода цикла.
Ну, как бы, считываем каждые 100мс. Время выполнения функции lampswitch - 300+ мс. Возможно, придётся выполнить до 10 таких функций.
Вот и думайте
Будет ли успевать Arduino за 100 мс
выполнить 1-10 функций по 300мс каждая?
А когда подумаете, то сами решайте
хорошее ли решение
Согласен, тогда можно использовать каждое третье прерываение по 100 мс, чтобы изменить lampnumber на LOW, можно делать это на всех пинах куда подключены лампы каждые 300 мс, вне зависимости от того что там было до этого? И соответсвенно функция lampswitch будет только включать HIGH на соответствующий пин, всеравно через 300 мс все они перейдут в low. Или есть решение проще? Стоит запоминать и делать LOW прицельно?
Учитесь сами, и налаживайте сами. Все сами.
А это тема по этому стилю http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-chainikov
Но я не настаиваю