Нагрейте терморезистор, зажав его между пальцами, как будто температура в помещении увеличилась. Спустя несколько секунд светодиод погаснет. Теперь отпустите терморезистор, и он остынет, но светодиод еще продолжит гореть некоторое время, потому что гистерезис в данной системе заставляет выждать, пока температура не станет достаточно низкой. В конечном счете, светодиод загорится снова. Получилось!
Но как же работает эта программа?
В программе существует такое понятие, как переменная. Это небольшая область памяти микроконтроллера, где может храниться числовое значение. Вы можете представить ее как «ячейку памяти». Из программы можно обратиться к ячейке при помощи имени переменной. Внутри ячейка содержит числовое значение.
Строка int digitemp = 0; означает, что объявил переменную с именем digitemp . Она является целочисленной (целым числом) и принимает значения начиная с нуля.
В строке int ledstate = 0 ; я объявил еще одну целочисленную переменную, чтобы отслеживать состояние светодиода на плате (включен или выключен). Нельзя попросить микроконтроллер посмотреть на светодиод и сказать, в каком он состоянии, поэтому я должен самостоятельно предусмотреть все требуемые действия.
Команда pinMode (13, OUTPUT) в секции setup сообщает микроконтроллеру о том, что следует сконфигурировать контакт 13 как выход. Задавать режим работы контакта А0 в качестве входа нет необходимости, потому что аналоговые выводы являются входами по умолчанию.
Теперь перейдем к основной части программы, К циклу. Сначала я задал команду analogRead , чтобы микроконтроллер прочитал состояние аналогового порта. Какого? Я указал 0, что означает аналоговый порт А0. В него вставлен проводник от моей макетной платы.
Что я собираюсь делать с информацией от АЦП после того, как она будет считана с порта? Есть только одно разумное место ее размещения: в переменной digitemp , которую я создал для этой цели.
Теперь, когда переменная digitemp содержит значение, я могу проверить ее. Если нагреватель включен (светодиод горит) И значение digitemp больше 490, то пора выключить нагреватель. Условие «если» проверяется следующим образом:
if (ledstate == 1 && digitemp > 490)
Двойной знак равенства (==) означает «выполнить сравнение и выяснить, одинаковы ли эти два значения». Одиночный знак равенства означает другую операцию: «назначить данное значение переменной».
Двойной символ & — это «логическое И». Да, здесь у нас применяется булева логика, как и в логическом элементе И. Но вместо того чтобы подключать микросхему, мы просто пишем строку кода.
Символ > означает «больше, чем».
Проверка условия «если» помещена в круглые скобки. Если утверждение в круглых скобках истинно, то микроконтроллер выполняет процедуру, расположенную между фигурными скобками. В этой процедуре с помощью команды ledstate = 0 записан тот факт, что светодиод будет выключен. Команда digitalWrite (13, LOW); в действительности выключает светодиод.
Вторая проверка условия «если» очень похожа, за исключением того, что она применяется, если светодиод выключен, а температура сильно снизилась. Тогда мы зажигаем светодиод.
Наконец, введена задержка на десятую долю секунды, поскольку нам не нужно проверять температуру чаще.
Вот и все.
Я объяснил здесь лишь некоторые синтаксические структуры, например, проверку условия «если» и двойной знак равенства, а также логический оператор && без перечисления всего списка конструкций, которые есть в языке С. Необходимые дополнительные сведения вы всегда сможете найти онлайн.
Запомните несколько моментов, относящихся к программе:
• Строки набраны с отступами, чтобы улучшить восприятие логической структуры программы. Компилятор игнорирует дополнительные пробелы, поэтому вы можете спокойно добавлять их в любом количестве.
• Для удобства среда IDE выделяет ошибки в тексте программы цветом.
• Когда вы присваиваете имя переменной, допустимо любое сочетание букв, цифр и символа подчеркивания — при том условии, что эта комбинация не совпадает с зарезервированным словом в языке С. Например, нельзя создать переменную с именем void .
• Кому-то нравится начинать названия с прописной буквы, а кому-то — со строчной. Выбор за вами.
• Каждая переменная должна быть объявлена в начале программы, иначе компилятор выдаст ошибку.
• Целочисленная переменная (объявленная при помощи ключевого слова int ) может принимать значение от -32 768 до +32 767. Язык С в этом микроконтроллере разрешает использовать переменные, которые имеют более широкий диапазон значений или которые могут быть дробными. Но до эксперимента 34 большие числа не понадобятся.
Читать дальше
Конец ознакомительного отрывка
Купить книгу