Помогите с алгоритмом 2 выхода 2 времени

servilat
Offline
Зарегистрирован: 12.12.2013

День добрый.

С виду простой алгоритм но застрял на нем серьезно.

имеем 2 цифровых выхода D5, D6

1. условие одновременно в логической единице оба быть немогут, в 0 могут.

также имеем 2 времени для D5 максимально 10 секунд активное состояние, для D6 максимально 12 секунд активное состояние.

Вход в процедуру с 0 на обоих выходах.

теперь самое интересное алгоритм, точнее их подходит даже два варианта.

1. вариант

time       D5        D6

1sec        H          L

1sec         L          H

2sec         H          L

2sec         L           H

.................................

.................................

10sec        H          L

10sec        L           H

10sec        H          L      - D5 больше 10 в 1 держать нельзя, его не инкрементируем больше

11sec        L           H

10sec        H          L

12sec        L           H      - D6 уперся во время тоже, это окончание работы.

выход.

Общее время по такому алгоритму просчитать могу, но оно никак не приблизило к решению.

2 вариант работы инкрементируем по секунде оба

 time       D5        D6

1sec        H          L

2sec         L          H

3sec         H          L

4sec         L           H

.................................

.................................

9sec         H           L

10sec        L           H

10sec        H          L

11sec        L           H

10sec        H          L

12sec        L           H

выход.

Алгоритмы без delay  

время в левой колонке это время удержания выхода в единице, а не тайминг выполнения программы.

Буду благодарен за любые подсказки.

b707
Offline
Зарегистрирован: 26.05.2017

Для начала прочитайте и вникните в стандартный пример "Blink without delay". чтобы понять, как уйти от использования задержек в коде.

Потом посмотрите, что такое метод конечных автоматов - ваша задачка простейший пример как раз такого автомата.