• Вход для внешнего генератора, подключенный к счетчику/таймеру. Это необходимо для того, чтобы микроконтроллер мог отсчитывать временные интервалы. На практике такие таймеры очень часто работают от внутреннего тактового сигнала микроконтроллера.
• Один аналоговый вход для измерения уровня аналогового сигнала от датчика влажности.
• Один цифровой вход для контроля уровня воды в резервуаре.
• Один цифровой выход для открытия и закрытия водяного клапана.
• Один цифровой выход для управления звуковым сигнализатором.
• Микропроцессор для вычислений, считывания входных и формирования выходных сигналов.
• • Память программ, обычно ПЗУ какого-либо типа.
• Память данных для хранения рабочих переменных программы, обычно статическое ОЗУ.
Если учесть, что для выполнения указанных задач требуется не так уж и много времени, можно задействовать дополнительные входы микроконтроллера для контроля других параметров, таких как температура и освещенность. В результате мы сможем осуществлять более комплексное управление климатической обстановкой в теплице.
Пример 3.2
Наиболее сложной проблемой, с которой приходится сталкиваться программисту, часто является собственно постановка решаемой задачи. Для этого необходимо логическое мышление, которым обладает человек и которое отсутствует у машины. Именно способность принимать решения и является отличительной чертой хорошего программиста. Эта способность складывается из опыта, капельки таланта, а также хорошего понимания решаемой задачи.
Чтобы проиллюстрировать процесс принятия решения, продумаем последовательность элементарных действий, которые должен будет выполнить робот с микроконтроллерным управлением для перехода через регулируемый пешеходный переход на улице с оживленным движением.
Решение
1. Подойти к переходу и остановиться.
2. Посмотреть на светофор.
3. Принять решение — не горит ли в нашем направлении зеленый сигнал?
4. ЕСЛИ сигнал красный, ТО перейти к шагу 2, ИНАЧЕ продолжить.
5. Посмотреть налево.
6. Едут ли машины?
7. ЕСЛИ да, ТО перейти к шагу 5, ИНАЧЕ продолжить.
8. Посмотреть направо.
9. Едут ли машины (вообще-то все машины уже должны были остановиться, но кто знает!)?
10. ЕСЛИ да, ТО перейти к шагу 5, ИНАЧЕ продолжить.
11. Перейти через дорогу — задача решена!
На Рис. 3.10 описанный алгоритм представлен в графическом виде. В этой блок-схеме прямоугольники используются для обозначения действий, ромбы — для обозначения условий, а прямоугольники со скругленными углами — для обозначения точек входа и выхода. Линии со стрелками указывают последовательность выполнения действий и дополнительно помечаются в точках принятия решений. В принципе в данном конкретном случае графическое представление алгоритма не имеет больших преимуществ по сравнению с текстовым. Однако в более сложных задачах, со множеством условий и вариантов выполнения, графическое представление может оказаться гораздо удобнее для документирования поведения системы. А когда система становится очень сложной, то и простой перечень задач, и блок-схема становятся одинаково бесполезными. В этом случае описание системы необходимо строить по иерархическому принципу, начиная с самых общих вопросов и постепенно продвигаясь к более конкретным задачам.
Рис. 3.10. Блок-схема алгоритма перехода через дорогу
На первый взгляд этот пример может показаться довольно глупым и надуманным, но именно эти операции вам приходится совершать каждый раз при переходе загруженной улицы по регулируемому пешеходному переходу. И именно этот алгоритм вы должны заложить в робота, чтобы он смог сделать то же самое. Такая последовательность элементарных шагов, или инструкций, называется программой. Со стороны все эти действия, предпринимаемые роботом для перехода через улицу, могут показаться проявлением интеллекта. Но это не интеллект — интеллектом обладают люди. Это программист, запрограммировавший микроконтроллер робота, вложил в него необходимые знания.
Разумеется, робот не будет иметь ни малейшего понятия о том, что ему делать после перехода на другую сторону, если только мы не сообщим ему об этом. Что же касается человека, то он уже, образно говоря, «запрограммирован» — у него есть опыт!
Заметьте, что этапы пронумерованы в том порядке, в котором они должны выполняться. Счетчик команд, в данном случае читатель, начинает выполнение с 1-й команды (состояние сброса) и заканчивает выполнением 11-й команды. В микроконтроллере после выполнения действий, предписываемых текущим этапом, счетчик команд автоматически инкрементируется, указывая на следующий этап, если только текущая команда не была командой пропуска или перехода. При выполнении команды пропуска счетчик команд «перепрыгивает» через следующую команду, обычно при определенном условии или результате. А при выполнении команды перехода счетчик команд просто переходит к заданному этапу. Если бы таких команд не было, в программе нельзя было бы реализовать ветвления и циклы. Под циклом в данном случае понимается многократное повторение одних и тех же действий, например периодическая проверка наличия зеленого сигнала светофора до тех пор, пока он не включится.