Страница 1 из 1

выполнение плат по условию

Добавлено: 08 фев 2020, 20:23
evgen23
Приветствую коллеги. Объясните, кому не лень, как работает выполнение плат по условию и выполнять в цикле? Как этим грамотно пользоваться?
или ссылочку киньте, а то искал искал, так и не нашел...

выполнение плат по условию

Добавлено: 08 фев 2020, 21:09
Alias
Мне не лень, но с телефона много не напишешь.
Выполнение плат по условию - механизм разгрузки Ардуино от ненужных в данный момент расчётов.
Допустим, у вас с десяток датчиков температуры: в котле, в бойлере, на радиаторе SSR, помещении и в подвале. Нет смысла в каждом цикле гонять код, ведь совершенно очевидно, что в подвале температура не меняется каждую секунду, зато котел лучше проверять почаще. Соответственно, сделаем опрос датчиков, скажем, каждые 1, 10, 5 секунд и 1 и 10 минут соответственно. Для этого от часов реального времени через делители частоты будем присваивать на один программный цикл единицу специальным булевым переменным с именами, допустим, 1с, 5с, 10с, 1м, 10м, а платы, где стоят датчики, а вместе с ними и вся логика, к ним относящаяся, будем выполнять по условию, что 1с= true для платы с первым датчиком и так далее. Таким образом, мы высвободим мощности для других задач.
На выполнении плат по условию можно организовать меню любой сложности, работу с дисплеями и так далее, все зависит от потребностей и фантазии.
Выполнение в цикле - это когда плата будет выполняться в цикле до бесконечности, пока выполняется условие, при этом выполняться будет только одна эта плата.

выполнение плат по условию

Добавлено: 09 фев 2020, 12:20
evgen23
[ref=#404040]Alias[/ref], спасибо. Это то, что я себе представлял.
Теоретическое понимание есть, только на практике не получается этим воспользоваться... не работает..
Возьмем, к примеру, управление сдвижными воротами. Есть 2 кнопки, одна А открыть, другая В закрыть.
В процессе открытия необходимо остановить ворота нажатием любой кнопки, а далее, в зависимости от
потребности, либо продолжить открытие, либо включить закрытие... Я разделил алгоритм на 2 платы,
для кнопки А и для кнопки В. Вот теперь для меня самое интересное.. Не получается заставить выполнять
плату кнопки А, пока ворота открываются.. (предполагаемый алгоритм: опрос кнопок, если нажата А, то выполнение платы открытия
до сработки концевика, либо до нажатия любой кнопки для остановки.)
Мне бы понять, как в программе заложен механизм использования выполнения плат по условию, в цикле.

выполнение плат по условию

Добавлено: 09 фев 2020, 13:00
Alias
Мне кажется, что в данном случае городить огород из плат по условию нет никакого резона, не тот масштаб. Тут все реализуется простой логикой. Я по-прежнему с телефона, бука под рукой нет, чтобы накидать наглядно.
Смысл использования выполнения плат возникает, если в программе много тяжёлых задач. Например, у меня в проекте на Меге более сотни переменных, пять свободных пинов и чтобы ардуинка нормально это переваривала, использовал полтора десятка флагов для выполнения конкретных плат.
Например, дисплей 5110 отображает информацию в 6 строках и 14 столбцах, это, насколько понял, достаточно тяжёлое занятие. Поэтому генерация текста со множеством манипуляций в дежурном режиме происходит только один раз в шесть секунд, как и обновление экрана. Чаще и не нужно.
Сложный блок пересчёта уставок выполняется один раз в час, суточная аналитика - только в полночь, опросы датчиков - три разных интервала, и так далее.
Постоянно крутятся только две платы: RTC и генератор синхроимпульсов на его основе для работы плат по условию, у ecoins это называется Диспетчер задач, и мониторинг клавиатуры.

выполнение плат по условию

Добавлено: 09 фев 2020, 15:35
evgen23
Alias писал(а): 09 фев 2020, 13:00 Мне кажется, что в данном случае городить огород из плат по условию нет никакого резона, не тот масштаб. Тут все реализуется простой логикой.
это проще всего... тут как раз не сложный код хочется реализовать с условиями и циклом, чтобы понять, как это работает.

Я понять хочу.... а ВЫ, коллега, меня отговариваете..)))

Отправлено спустя 1 минуту 23 секунды:
...понять, как работает в flprog.

выполнение плат по условию

Добавлено: 09 фев 2020, 15:54
Alias
Хорошо. Пишите, коллега )))
На первой плате ставим генератор импульсов - симметричный мультивибратор или как там, скажем, на 1Гц. Нет, мало, давайте пятьсот мс. За ним - счетчик, пишущий текущее значение в переменную.
На второй плате берём эту переменную, конвертируем число в текст, выводим на дисплей или в uart, как удобнее.
Запускаем. Что происходит? Верно, число увеличивается.
Теперь возвращаемся к первой плате, ставим условие Выполнять в цикле, пока переменная меньше десяти.
Запускаем. Что видим? А выводы?
Для таких опытов можно иметь специальную Nano на шнурке usb, чтобы при любом сомнении накидать схемку и проверить корректность ее работы. Я так отлаживаю отдельные блоки из своих проектов, чтобы доподлинно знать, что там происходит. Визуализация через дисплей или uart. Без подобного рода техоснастки можно даже в простых проектах в тупик зайти.

выполнение плат по условию

Добавлено: 09 фев 2020, 16:52
Rodgerask
//del

выполнение плат по условию

Добавлено: 09 фев 2020, 17:15
Ingwar
Проект в 6.2.2
условия_платы.flp
Подключите, нажимайте 2-ве кнопки в различных комбинациях, смотрите в СОМ порт и наблюдайте светодиод на плате.
Так Вы быстрее поймете как это работает.
Если нет возможности/желания использовать последние версии
[spoiler]
Безымянный.png
[/spoiler]

выполнение плат по условию

Добавлено: 09 фев 2020, 17:34
evgen23
[ref=#404040]Alias[/ref], спасибо very much.. понял примерно... осталось на практике закрепить..))
[ref]Ingwar[/ref], спасибо за пример..)

выполнение плат по условию

Добавлено: 09 фев 2020, 17:42
vovka1973
evgen23 писал(а): 09 фев 2020, 17:34 понял примерно...
что именно поняли ?по логике нажимаете на кнопку А выполняется условие где можно нажать кнопку В ,нажимаем кнопку В выполняется условие где работает счетчик ,но отпускаем кнопку А по идеи счетчик должен перестать работать так как условие В должно перестать работать ,а счетчик работает пока не отпустим кнопку А и опять ее нажмем. Я вот так и не понял почему так работают условия если с одной платой все хорошо то с двумя и более ерунда какая-то :smile37:

выполнение плат по условию

Добавлено: 09 фев 2020, 17:46
Alias
От меня примеров не ждите, я с градусником и на пилюлях, в доступности только телефон. Впрочем, я уже об этом дважды упомянул, молчаливо извинившись.
Rodgerask писал(а): 09 фев 2020, 16:52 Очень много текста.... и нет ни примера ни проекта...хотя от вас всегда так.
Слишком все голословно выглядит...НЕНАГЛЯДНО что-ли...причем вы то сами требуете этого от других.
Требую? И где же? Хотелось бы подтверждения Ваших слов. Да хоть в ЛС.

выполнение плат по условию

Добавлено: 09 фев 2020, 18:13
Rodgerask
//del

выполнение плат по условию

Добавлено: 09 фев 2020, 18:27
Alias
Не нашлось? Тогда просим модераторов удалить флуд?
PS Vladislaveu это не Ваш второй ник? Вернее первый, он же старше на полчаса. И ID пользователя соседний. Да и почерк тот же.

выполнение плат по условию

Добавлено: 09 фев 2020, 19:36
edyapd
[ref]vovka1973[/ref], вы попробуйте на пальцах или карандашом на листке.
Переменная А становится true когда нажимаем кнопку А.
Переменная Б становится true когда нажимаем кнопку Б, при условии, что переменная А true.
Ну со счётчиком там всё понятно, плата заработала и счётчик начал считать.
Теперь отпускаем кнопку А. Переменная А стала false. А переменная Б - ?
А если отпустить кнопку Б, это как-то повлияет на переменную Б?
Дальше думаю сами разберётесь.

выполнение плат по условию

Добавлено: 09 фев 2020, 23:45
Iqubik
У меня вот так:

каждая плата это один девайс/функция
каждой плате есть свой bool=EnPlata1
управление функциями из меню bool(true/false)

Меню выбирает какую функцию активировать (true), меняя значение EnPlata1=true - нужная плата стартует. Профит. Нужно выключить или включить плату - для этого есть набор булевых переменных.

выполнение плат по условию

Добавлено: 10 фев 2020, 03:43
vovka1973
edyapd писал(а): 09 фев 2020, 19:36 вы попробуйте на пальцах или карандашом на листке.
то есть вы хотите сказать это правильно скетч работает ? я отпускаю кнопку А переменная В становиться false и плата где переменная В true все равно работает счетчик ? на пальцах я думал так при отпускании кнопки А выполняется сброс всех плат в false так как В становиться false. А это не так и если делать так логику где нужно соблюсти правило что бы сработало то с начало отпускаем кнопку В потом кнопку А ,а как же защита от дураков которые правило не знают ?

Отправлено спустя 3 минуты 41 секунду:
Iqubik писал(а): 09 фев 2020, 23:45 У меня вот так:
у вас плата срабатывает один раз и нет зависимости следующей платы от предыдущей как в том примере.

выполнение плат по условию

Добавлено: 10 фев 2020, 04:22
edyapd
vovka1973 писал(а): 10 фев 2020, 03:43 я думал так при отпускании кнопки А выполняется сброс всех плат в false так как В становиться false. А это не так и если делать так логику где нужно соблюсти правило что бы сработало то с начало отпускаем кнопку В потом кнопку А ,а как же защита от дураков которые правило не знают ?
Условие, для того, чтобы переменная Б стала false есть только одно - отпускание кнопки Б. То, что переменная А стала false только прекращает выполнение второй платы и не более. А по сути получается, что переменная Б просто защёлкнулась. И теперь, отпустив кнопку Б, мы можем наблюдать как работает счётчик. НО, если при отпущенной кнопке Б нажать на А, то переменная Б сразу станет false, так как разблокируется возможность её изменения.
Про защиту от дураков не совсем понял.

выполнение плат по условию

Добавлено: 10 фев 2020, 04:45
vovka1973
Я понял про что вы. Просто после отпускания кнопки А потом кнопки Б плата все равно считает пока не выполнить условие с начало опускаем кнопку В потом А, думаю просто так нельзя делать изначально будут не понятки в сложном скетче

выполнение плат по условию

Добавлено: 10 фев 2020, 06:44
edyapd
vovka1973 писал(а): 10 фев 2020, 04:45 думаю просто так нельзя делать изначально будут не понятки в сложном скетче
Тут уже решать тому, кто делает так. Для одних это "баг", для других "фича".