Как по мне, такие алгоритмы лучше делать все-таки без прерываний, на флагах и счетчиках. Т.е. делается главный цикл и в нем постоянно проверяются все условия: датчики, тумблеры, счетчики прошедшего времени... Надо добавить алгоритм - добавь еще проверок, но всегда возвращайся в цикл. Никаких delay_ms(5000). Время выполнения такого цикла на авр будет десятки мкс, чего для большинства задач робототехники хватит с головой.
То есть программа выгдядит как-то так:
Цитата:
// расстановка флагов
1. Если протечка 1 - снять флаг клапана 1, перейти к 5
2. Если датчик наполнения 1 - снять флаг наполнения 1, перейти к 5
3. Если тумблер наполнения 1 - поставить флаг наполнения 1, перейти к 5
4. Если датчик опустошения 1 - поставить флаг наполнения 1, перейти к 5
5. Если протечка 2 - снять флаг клапана 2, перейти к 9
6. Если датчик наполнения 2 - снять флаг наполнения 2, перейти к 9
7. Если тумблер наполнения 2 - поставить флаг наполнения 2, перейти к 9
8. Если датчик опустошения 2 - поставить флаг наполнения 2, перейти к 9
9. Если (время - последнее время полива) > 24 часов - поставить флаг полива, засечь время начала полива
10. Если флаг полива и (время - время начала полива) > n секунд - снять флаг полива, обновить время последнего полива
//управление
11. Если флаг полива - выключить клапаны наполнения, включить клапан полива, включить помпу, перейти к 16
12. Если флаг наполнения 1 - выключить клапаны наполнения 2 и полива, включить клапан наполнения 1, включить помпу, перейти к 16
14. Если флаг наполнения 2 - выключить клапаны наполнения 1 и полива, включить клапан наполнения 2, включить помпу, перейти к 16
15. Выключить все клапаны и помпу
16. Перейти к 1
А в прерывании от таймера только инкрементировать глобальную переменную времени.
Добавлено спустя 2 минуты 11 секунд:yak-40 писал(а):
А зачем здесь прерывания? Простейшая программка один цикл и две подпрограммы
А с тумблерами как быть? Ну и всякие штуки типа если 24 часа прошли во время наполнения, то прервать наполнение и начать поливать (хотя не знаю, насколько это реально надо).