Задачи в очередь
- Phazz
- Полковник
- Сообщения: 3147
- Зарегистрирован: 17 окт 2016, 15:38
- Откуда: Сургут
- Имя: Анатолий
- Благодарил (а): 236 раз
- Поблагодарили: 117 раз
Задачи в очередь
[ref]KeyArduino[/ref], Мой вариант, кнопки 3 (лень было добавлять больше) добавить можно сколько угодно. Запоминает 100 нажатий, это тоже можно увеличить.
viewtopic.php?p=78977#p78977
viewtopic.php?p=78977#p78977
Последний раз редактировалось Phazz 05 ноя 2019, 21:28, всего редактировалось 1 раз.
- KeyArduino
- Сержант
- Сообщения: 130
- Зарегистрирован: 21 июл 2019, 19:16
- Имя: Дмитрий
- Контактная информация:
Задачи в очередь
1000 извинений Анатолий, не хочу озвучивать идею, если всё получится, то видос отсниму, а пока привёл приблизительно нужную логику, извиняюсь что так расплывчато получилось, я сам это почувствовал.Rovki писал(а): 03 ноя 2019, 19:42 Удивил меня КлючкАрдуино ,что не смог сформулировать четко задачу ,как в своих видео уроках...
Отправлено спустя 12 минут 43 секунды:
Спасибо конечно, но что то у меня ничего не работает, подключил кнопки и светодиоды, и тишина, на нажатие кнопок нет реакции на светодиодах. Но всё равно спасибо за старание и потерянное время!Phazz писал(а): 04 ноя 2019, 10:26 KeyArduino, Мой вариант, кнопки 3 (лень было добавлять больше) добавить можно сколько угодно. Запоминает 100 нажатий, это тоже можно увеличить.

- Rovki
- Полковник
- Сообщения: 5738
- Зарегистрирован: 22 апр 2016, 17:25
- Откуда: Чехов
- Имя: Анатолий
- Благодарил (а): 68 раз
- Поблагодарили: 222 раза
- Контактная информация:
Задачи в очередь
Без проблемKeyArduino писал(а): 04 ноя 2019, 21:141000 извинений Анатолий, не хочу озвучивать идею, если всё получится, то видос отсниму, а пока привёл приблизительно нужную логику, извиняюсь что так расплывчато получилось, я сам это почувствовал.Rovki писал(а): 03 ноя 2019, 19:42 Удивил меня КлючкАрдуино ,что не смог сформулировать четко задачу ,как в своих видео уроках...


Электронщик до мозга костей и не только
- KeyArduino
- Сержант
- Сообщения: 130
- Зарегистрирован: 21 июл 2019, 19:16
- Имя: Дмитрий
- Контактная информация:
Задачи в очередь
Вот в это посте подскажите по возможности viewtopic.php?f=18&t=5815&p=78857#p78857
Вроде что то элементарное, а что то догнать не могу
- Dryundel
- Полковник
- Сообщения: 2457
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 6 раз
- Поблагодарили: 31 раз
Задачи в очередь
[ref]KeyArduino[/ref], Вот Вам блок FIFO
. .
В железе не тестировал, но в протеусе работает. Описания внутри пока нет. Доделаю - выложу.
Логика такая:
1. В настройках выставляем размер буфера (массива) - в вашем случае очереди.
2. Подачей единицы на вход Insert записываем очередную переменную со входа In в буфер (в конец очереди)
3. Подачей единицы на вход Extract извлекаем первую по очереди переменную из буфера (очереди) на выход Out
4. Если в буфере пусто, то на выходе Void - единица и больше ничего из очереди не извлекается.
5. Если буфер полон (см. размер массива) то на выходе Full - единица и ничего в очередь больше не ставится.
Ну а нажатия с со счетчиками (таймерами) надеюсь сообразишь как сделать.
Ждем обещанный видос!!!
Отправлено спустя 9 часов 2 минуты 42 секунды:
Вот есть один маленький нюанс в этом блоке FIFO
Когда извлекаем из буфера последнюю переменную и буфер опустошается, то на выходе Out повисает эта последняя переменная. Больше ведь ничего не извлекается т.к. буфер пуст.
Вопрос в том, надо ли сделать так, что бы при пустом буфере и при очередном сигнале на входе Extract переменная на выходе Out обнулялась?
Не знаю будет ли это правильно. Ведь если в буфер записывается следующая переменная, то получится что на выходе между этими двумя переменными окажется "0", а это ведь тоже значение.
Вопрос ко всем не равнодушным.
Как сделать? С обнулением или без?
. .
В железе не тестировал, но в протеусе работает. Описания внутри пока нет. Доделаю - выложу.
Логика такая:
1. В настройках выставляем размер буфера (массива) - в вашем случае очереди.
2. Подачей единицы на вход Insert записываем очередную переменную со входа In в буфер (в конец очереди)
3. Подачей единицы на вход Extract извлекаем первую по очереди переменную из буфера (очереди) на выход Out
4. Если в буфере пусто, то на выходе Void - единица и больше ничего из очереди не извлекается.
5. Если буфер полон (см. размер массива) то на выходе Full - единица и ничего в очередь больше не ставится.
Ну а нажатия с со счетчиками (таймерами) надеюсь сообразишь как сделать.

Ждем обещанный видос!!!

Отправлено спустя 9 часов 2 минуты 42 секунды:
Вот есть один маленький нюанс в этом блоке FIFO
Когда извлекаем из буфера последнюю переменную и буфер опустошается, то на выходе Out повисает эта последняя переменная. Больше ведь ничего не извлекается т.к. буфер пуст.
Вопрос в том, надо ли сделать так, что бы при пустом буфере и при очередном сигнале на входе Extract переменная на выходе Out обнулялась?
Не знаю будет ли это правильно. Ведь если в буфер записывается следующая переменная, то получится что на выходе между этими двумя переменными окажется "0", а это ведь тоже значение.
Вопрос ко всем не равнодушным.

У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Сержант
- Сообщения: 138
- Зарегистрирован: 19 апр 2018, 13:37
- Имя: Павел
Задачи в очередь
Добрый день, хотел узнать не поможете ли вы мне с задачей.
Я делаю прошивку для дозатора жидкостей, логику работы одного насоса по таймеру я отработал, меню час дописываю, но в скором времени я дойду до пункта когда потребуется ставить их в очередь на выполнение.
По сути для запуска нужно всего лишь номер насоса и время в миллисекундах сколько подавать и команда на запуск (Ртриг), проблема в том что на одно время может быть задано не одно а несколько задач и они должны отработать и стереться и списка задач.
Всего 6 насосов, одновременно может работать только один насос, включатся на определенное время.
Может быть кто подскажет как это реализовать?
Я делаю прошивку для дозатора жидкостей, логику работы одного насоса по таймеру я отработал, меню час дописываю, но в скором времени я дойду до пункта когда потребуется ставить их в очередь на выполнение.
По сути для запуска нужно всего лишь номер насоса и время в миллисекундах сколько подавать и команда на запуск (Ртриг), проблема в том что на одно время может быть задано не одно а несколько задач и они должны отработать и стереться и списка задач.
Всего 6 насосов, одновременно может работать только один насос, включатся на определенное время.
Может быть кто подскажет как это реализовать?
Задачи в очередь
Как по мне, так стоит ориентироваться на два верхних выхода, прежде чем что-то записывать или считывать. Поэтому без разницы, что будет на выходе "Out". Если блок будет быстрее работать без обнуления, то так и оставить.
Офтопик
[spoiler]Не сочтите за придирку, но мне кажется empty будет более правильно, чем void, в данном значении. an empty array, an empty line.[/spoiler]
- Dryundel
- Полковник
- Сообщения: 2457
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 6 раз
- Поблагодарили: 31 раз
Задачи в очередь
Возможно Вы и правы. Пожалуй так и сделаю когда блок оформлю.edyapd писал(а): 05 ноя 2019, 13:24 Не сочтите за придирку, но мне кажется empty будет более правильно, чем void, в данном значении. an empty array, an empty line.
И незачем так стесняться своего мнения.

Здоровая критика всегда приветствуется.
- AlexCrane
- Капитан
- Сообщения: 903
- Зарегистрирован: 20 окт 2017, 13:22
- Откуда: Ульяновск
- Имя: Александр
- Поблагодарили: 12 раз
Задачи в очередь
[ref]Dryundel[/ref], Текущее количество переменных в буфере можно вывести?
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....
Если нет возможности отблагодарить материально, хотя бы оцени пост....
- Dryundel
- Полковник
- Сообщения: 2457
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 6 раз
- Поблагодарили: 31 раз
Задачи в очередь
Не помню. Сейчас копну библиотеку. Если есть такая функция, добавлю.AlexCrane писал(а): 05 ноя 2019, 14:54 Dryundel, Текущее количество переменных в буфере можно вывести?
Отправлено спустя 4 минуты 52 секунды:
Хотя можно ведь и ...
Ща попробуем.

- Phazz
- Полковник
- Сообщения: 3147
- Зарегистрирован: 17 окт 2016, 15:38
- Откуда: Сургут
- Имя: Анатолий
- Благодарил (а): 236 раз
- Поблагодарили: 117 раз
Задачи в очередь
Немного забыл логику работы Стэка ))). Оказалось он совсем не подходит.
Исправил, проверил - все работает.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 516
- Зарегистрирован: 25 фев 2018, 08:48
- Откуда: Оренбург
- Имя: Александр
Задачи в очередь
[ref=#404040]Phazz[/ref], а если бы еще на стабильной версии сделать (интересно взглянуть на ход мыслей) то совсем было бы хорошо. А делать и показывать на бета версиях ...
- Phazz
- Полковник
- Сообщения: 3147
- Зарегистрирован: 17 окт 2016, 15:38
- Откуда: Сургут
- Имя: Анатолий
- Благодарил (а): 236 раз
- Поблагодарили: 117 раз
- Dryundel
- Полковник
- Сообщения: 2457
- Зарегистрирован: 22 май 2017, 23:15
- Откуда: Ярославль
- Имя: Андрей
- Благодарил (а): 6 раз
- Поблагодарили: 31 раз
Задачи в очередь
Пользуйтесь.AlexCrane писал(а): 05 ноя 2019, 14:54 [ref]Dryundel[/ref], Текущее количество переменных в буфере можно вывести?

.
[spoiler=Описание]Буфер FIFO подобен СТЕК. Основное отличие в очереди извлечения данных. Если СТЕК работает по принципу "первый пришел - последний ушел", то у FIFO принцип работы - "первый пришел - первый ушел"
С помощью данного блока FIFO v1.0 осуществляется запись целочисленных переменных в массив и извлечения этих переменных в порядке очереди.
Принцип и логика работы:
1. В настройках выставляем размер буфера (массива) - параметр size_fifo. Он определяет сколько переменных сможет вместить блок.
2. Подачей единицы на вход Insert записываем очередную переменную со входа In в буфер (в конец очереди)
3. Подачей единицы на вход Extract извлекаем первую по очереди переменную из буфера (очереди) на выход Out.
4. Если в буфере пусто, то на выходе Empty - единица и больше ничего из очереди не извлекается.
5. Если буфер полон то на выходе Full - единица и ничего в очередь больше не ставится.
6. На выход Volum выводится текущее количество переменных хранящихся в буфере. С помощью этого выхода удобно следить за заполненностью буфера.[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Phazz
- Полковник
- Сообщения: 3147
- Зарегистрирован: 17 окт 2016, 15:38
- Откуда: Сургут
- Имя: Анатолий
- Благодарил (а): 236 раз
- Поблагодарили: 117 раз
Задачи в очередь
Для 5.3.0KulibinOrsk писал(а): 05 ноя 2019, 18:41 [ref=#404040]Phazz[/ref], а если бы еще на стабильной версии сделать (интересно взглянуть на ход мыслей) то совсем было бы хорошо. А делать и показывать на бета версиях ...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Сержант
- Сообщения: 138
- Зарегистрирован: 19 апр 2018, 13:37
- Имя: Павел
Задачи в очередь
Дозатор для дозирования жидкостей, задаешь номер насоса от 1 до 6, количество в миллилитрах (миллисекунды*коэфф), время и дни недели показания сравниваются с часами, все сохраняется в ЕЕПРОМ. Если время совпадает, то включается № насос на заданное время.
Всего можно сохранить 100 таймеров, и время может совпадать (допустим на насос 2 и 4 нужно подать в одно и тоже время 100мл (1мл примерно 1 секунда, тем самым 100х2=200сек) и сравнение проходить только для насос №2 срабатывает, а насос №6 не срабатывает так как во время сравнение времени работал насос №2 и время в часах уже поменялось. А может и больше насосов сработать одновременно, требуется создать определенную очередь срабатывания (определенный буфер).
Я это вижу так, идет постоянное сравнение и если происходит совпадений сохраненного времени то записывается некий список в конец очереди и после исполнения этой задачи удалялся из списка.
Если это можно сделать стандартными блоками было бы еще лучше
Отправлено спустя 39 секунд:
Может кто помощь с этой задачей?
Всего можно сохранить 100 таймеров, и время может совпадать (допустим на насос 2 и 4 нужно подать в одно и тоже время 100мл (1мл примерно 1 секунда, тем самым 100х2=200сек) и сравнение проходить только для насос №2 срабатывает, а насос №6 не срабатывает так как во время сравнение времени работал насос №2 и время в часах уже поменялось. А может и больше насосов сработать одновременно, требуется создать определенную очередь срабатывания (определенный буфер).
Я это вижу так, идет постоянное сравнение и если происходит совпадений сохраненного времени то записывается некий список в конец очереди и после исполнения этой задачи удалялся из списка.
Если это можно сделать стандартными блоками было бы еще лучше
Отправлено спустя 39 секунд:
Может кто помощь с этой задачей?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость