Библиотека для выполнения заданий по очереди - помогите найти
- Войдите на сайт для отправки комментариев
Добрый день!
Не могу никак найти такую библиотеку или описание метода:
Нужно, чтобы программа отслеживала какая нога замкнута на GND и на сколько секунд (это я смог сделать). Дальше функция замыкает уже другие ноги соответственно на то же количество секунд, но по очереди, чтобы не две одновременно.
Вот примерно так я себе это вижу:
На входе:A1-ON A2-ON A3-ON A1-OFF A2-OFF A3-OFF
На выходе: 1-ON 1-OFF 2-ON 2-OFF 3-ON 3-OFF
Не обязательно, конечно, ноги замыкать, просто любые задания, лишь бы они по очереди выполнялись. Я нашел кучу библиотек с мультитаскингом и заданиями, но они все равно все параллельно работают, а мне надо последовательно. Я уже и с буферами разобрался, ничего не помогает. Ткните, пожалуйста, в нужную библиотеку или, может быть, вы с таким стречались.
Заранее большое спасибо за помощь!
Забыл сказать, само собой, хотелось бы без delay.
если сторлько изучили, проще самому написать. Сформируйте список (буфер) заданий и выполняйте его почередно по прерыванию таймера.
Вот тут у меня и затык. Не могу найти в какое место вставить эту отсечку, что система занята.
Вот тут у меня и затык. Не могу найти в какое место вставить эту отсечку, что система занята.
какая система у тебя занята?
Занята выполнением задания. Задания все равно одновременно выполняются.
Последовательно очень просто - сформируйте массив длительности для N заданий t[N], включите i-задание (индекс=i), анализируйте время прошедшее со включения задания. Если прошло времени >= t[i], выключите это задание и включите следующее задание на время t[i+1].
При необходимости учитывайте переполнения счетчиков времени.
Массив потом сортировать?
Да, именно
Ок, а при таком подходе получится зарегистрировать 2 разных включения одной и той же ноги? Например один раз на 5 секунд, потом на 10.
Вписать один и тот же вывод в 2 разных задания, те по мере поступления событий пополнять буфер заданий.
То есть в целом вместо буфера использовать массив? Но тогда какие-то ячейки будут отработанными, ненужными. А массив-то не бесконечный. Вот я и спрашиваю, его сортировать?
Массив структур не будет физически бесконечным тк оперативная память ограничена и может переполниться. Если очередность заданий менять не нужно, то сортировать не надо.
Используйте "бесконечный" кольцевой буфер http://arduino.ru/forum/programmirovanie/koltsevoi-bufer-fifo
То есть в целом вместо буфера использовать массив? Но тогда какие-то ячейки будут отработанными, ненужными. А массив-то не бесконечный. Вот я и спрашиваю, его сортировать?
Когда в ТЗ(тех задании) "каша", то и в программе "каша". Определитесь что вам надо узнать: сколько был замкнут(разомкнут) каждый вход или же просто лента времени замыкания и размыкания входов. Если лента , то куда вы ее будете писать. А так "часы"[millis()] у вас есть . так в ленте и пишите "вывод A0 замкнут,время,вывод A1 замкнут, время,вывод A1 разомкнут,время,вывод A1 разомкнут,время и т д."
,"
production, из Вашего "подробного" описания, так и не понял, что Вам нужно.
Если нужно просто определенные действия выполнять по очереди, то заведите переменную состояния.
В начале работы присваитвайте ей 1.
Пока она равна 1, выполняется первое задание.
По завершении первого задания переменной присваивается значение 2.
Пока переменная равна 2, выполняется второе задание.
По завершении второго задания переменной присваивается значение 3.
и т.д.
Квест?
А хорошая идея, да. У меня была мысть только сделать bool занято/свободно, но ваша, пожалуй, лучше
В общем, никто не видел готового решения, как из параллельного разложить в последовательное?
В общем, никто не видел готового решения, как из параллельного разложить в последовательное?
А вам что интереснее? Найти или не найти. Я скорее склоняюсь к мысли , что второе для вас важнее.
http://arduino.ru/Reference/SwitchCase и var++