Допустим эти же 3 кнопки нажали 15 раз с разным временем удержания и в разном порядке, клапан должен отработать кажудю кнопку в порядке очереди и ждать следующей команды
Допустим эти же 3 кнопки нажали 15 раз с разным временем удержания и в разном порядке, клапан должен отработать кажудю кнопку в порядке очереди и ждать следующей команды
Без пауз, отрабатывает все поступившие сигналы один за другим, поступило 20 сигналов, отработала в порядке очереди и ждёт следующее поступлениеedyapd писал(а): ↑03.11.2019{, 16:46}Должна ли быть пауза между комнатами? Я имею ввиду, в первой нажали 1 и 2 держат. Во второй нажали 1 и 3 (при этом я так понял, что они не знают, что система уже занята), подержали скажем 10 и 15 сек на клапан. Должна ли система сделать паузу после того как отработала первую комнату, прежде чем перейти ко второй?
И должна ли система включать клапана сразу же, если она свободна?
Это понятно уже.KeyArduino писал(а): ↑03.11.2019{, 16:44}Допустим эти же 3 кнопки нажали 15 раз с разным временем удержания и в разном порядке, клапан должен отработать кажудю кнопку в порядке очереди и ждать следующей команды
Отправлено спустя 1 минуту 47 секунд:
Почти ответили. Не понятно - клапан должен закрываться между отработкой нажатий разных кнопок?KeyArduino писал(а): ↑03.11.2019{, 16:49}Без пауз, отрабатывает все поступившие сигналы один за другим, поступило 20 сигналов, отработала в порядке очереди и ждёт следующее поступление
Да, должен закрываться, то есть полностью отрабатывать цикл, закрываться и открываться при поступлении следующей задачи или если задачи стоят в очереди. Принял, открылся на энное количество секунд, отработал закрылся, следующая задача
Если клапан при отработке всех задач в очереди не должен закрываться то Вам не нужна очередь.KeyArduino писал(а): ↑03.11.2019{, 16:49}Без пауз, отрабатывает все поступившие сигналы один за другим, поступило 20 сигналов, отработала в порядке очереди и ждёт следующее поступление
отработала команды с одной комнаты, переходит к следующей и т.д., а тем временем с комнат может набиться с десяток а то и больше команд, вот их нужно ставить (записывать) в очередь, и в порядке очереди выполнятьedyapd писал(а): ↑03.11.2019{, 17:01}Пожалуй если бы вы нарисовали что-то подобное, а в самом низу то, как это должна отработать система, то было бы намного понятней.
потому как если клапана независимы, то можно ли отрабатывать команды следующей комнаты свободным клапаном, в то время как комната не освободила ещё все клапана.
Вот именно что заканчивать задание клапан должен закрытием, отработал одно закрылся, отработал следующее закрылся и т.д. Типа как на конвейере тару наполняют, подъехала тара наполнил закрылся, подъехала следующая, наполнил закрылся
В таком случае очередь необходима.KeyArduino писал(а): ↑03.11.2019{, 17:08}Да, должен закрываться, то есть полностью отрабатывать цикл, закрываться и открываться при поступлении следующей задачи или если задачи стоят в очереди. Принял, открылся на энное количество секунд, отработал закрылся, следующая задача
Мысль верная. Только для решения поставленной задачи в штатных блоках нехватает FIFO.KeyArduino писал(а): ↑03.11.2019{, 16:41}Может как то с блоками массивов можно организовать, если кнопками задачи по порядку будут записываться в массив а потом считывать и выполнять по очереди?
Эт я размышляю, на деле не знаю будет ли работать
В моей схеме этого нет ибо у вас не описано ,что такое команда . У вас было сказано что команда это нажатие кнопки ,а работа клапана по времени равна времени нажатия .Поэтому запоминать кто сколько держал и сколько нажимал не представляеся не возможным ,нужно просто время распределить между пользователями и организовать очередь пользователей для подачи команд управления ,а не запоминать кто когда нажимал и сколько .KeyArduino писал(а): ↑03.11.2019{, 16:38}Блоки памяти тут я как понял не используются? Ведь допустим в разных комнатах по нажимали кнопки многократно, на ардуино прилетело допустим 15 команд по открытию клапанов, где, каким блоком она их будет собирать а потом отправлять на выполнение?
Если каждый будет нажимать кнопки сколько хочет раз и на любое время ,то как узнать что нужно переходить у другой комнате ???KeyArduino писал(а): ↑03.11.2019{, 17:08}Да, должен закрываться, то есть полностью отрабатывать цикл, закрываться и открываться при поступлении следующей задачи или если задачи стоят в очереди. Принял, открылся на энное количество секунд, отработал закрылся, следующая задача
Здесь очень живое прикладное обсуждение - напишу об этом в ветке "Разработки ecoins".
Кнопка однозначно связывается с клапаном ...3 кнопки - 3 клапана- 3 комнатыDryundel писал(а): ↑03.11.2019{, 17:55}Идея есть. Задействуем стек. Пишем в него время нажатий в миллисекундах. Считываем последнее значение массива.
Ведь я так понял конкретное открытие клапана связывать с конкретной кнопкой не надо. Критично лишь время открытия и последовательность.
Надо как то тактировать постоянное продвижение с в стеке и еще связать это с временем отработки.
Надо пробовать.
Бин! Еще понимать бы для чего это нужно.
Тут посидел, подумал. Наверное стоит сделать в каждой комнате по Ардуино, которое бы обрабатывало нажатия. При этом запрос в очередь выставляло бы только после того, как полностью сформирована команда (отпущена последняя кнопка). Только в таком случаи вы будете знать сколько по времени должен быть открыт клапан.KeyArduino писал(а): ↑03.11.2019{, 13:19}Если по подробней, то с трёх комнат (три блока управления с тремя кнопками) поступают сигналы на блок управления, который будет отрабатывать эти задачи в порядке поступившей очереди. К блоку выполнения подключены 3 клапана (Всё это представляет из себя ардуино, 9 кнопок (по 3 в каждой комнате) и к ардуино подключены 3 клапана.
Например: Независимо друг от друга на ардуино подаються сигналы с разных комнат (С первой допустим команда включить 2 и 3 клапан (время отработки клапана зависит от времени удержания кнопки), со второй включить 1 и 2 клапан и с третей включить 1 и 3 клапан), клапана всего 3 и нужно собрать поступившие со всех трёх комнат сигналы и выполнить их в порядке поступившей очереди.
Да, истина где то рядом, спасибо за предложение, буду пробовать!edyapd писал(а): ↑03.11.2019{, 18:06}Тут посидел, подумал. Наверное стоит сделать в каждой комнате по Ардуино, которое бы обрабатывало нажатия. При этом запрос в очередь выставляло бы только после того, как полностью сформирована команда (отпущена последняя кнопка). Только в таком случаи вы будете знать сколько по времени должен быть открыт клапан.
Ардуино, которое заведует клапанами получает запрос на очередь и помещает его в массив. И отвечает, что запрос на очередь поставлен. Ардуино в комнате должно снять запрос. Когда после отработки очередной команды массив сдвигается вверх и из него берётся номер очередной комнаты. Делается запрос к Ардуино, которая стоит в комнате и та отвечает, сколько и каким клапаном лить.
Тогда Ардуино в комнате может накапливать сколько угодно команд(ограничено памятью). И после формирования команды снова отправлять запрос на очередь.
Как вам такая система?
По ходу разрабатывается наливайка на три столика )
Столик на троих и три напитка. Коктейль будет у каждого свой.на троих столик