Листинг 2.1. Пример конфигурации
const int LED=9; // Константа - номер контакта светодиода
void setup()
{
pinMode (LED, OUTPUT); // Конфигурируем контакт светодиода как выход
digitalWrite(LED, HIGH); // Устанавливаем значение HIGH на выходе
}
void loop()
{
// В цикле ничего не выполняем
}
Соберите схему, как показано на рис. 2.2, и загрузите код листинга 2.1 в плату Arduino. Обратите внимание, что в этой программе я использовал оператор ини
- 48 -
циализации константы перед определением значения контакта Arduino. Обычно для хранения значений, которые могут изменяться во время выполнения программы, предназначены переменные. Поставив оператор const до объявления переменной, вы говорите компилятору, что это переменная "только для чтения" и она не будет изменяться во время выполнения программы. Всем экземплярам переменной LED в программе будет присвоено значение 9. В виде констант рекомендуется определять значения, которые не будут меняться при выполнении программы. Далее в некоторых примерах этой главы встретится иная ситуация: значения, которые могут изменяться при выполнении программы.
При объявлении любой переменной необходимо указать ее тип. В нашем случае это целое число (номера контактов всегда будут целыми числами).
Теперь попробуйте изменить программу из главы 1, добавив функцию digitalWrite() и введя задержку в цикле loop(). Экспериментируя со значениями задержки, можно создавать различные эффекты мигания.
На практике часто необходимо циклически изменять значения переменных для выполнения заданного алгоритма. В предыдущем примере можно реализовать цикл, чтобы увидеть, как влияют на частоту мигания разные значения задержки. Вы можете реализовать разные скорости мигания, задавая с помощью переменной цикла различные значения задержки. Пример иллюстрирует код из листинга 2.2.
Листинг 2.2. Изменение частоты мигания светодиода
const int LED=9; // Константа - номер контакта светодиода
void setup()
{
pinMode (LED, OUTPUT); // Конфигурируем контакт светодиода как выход
}
void loop()
{
for (int i=100; i<=1000; i=i+100)
{
digitalWrite(LED, HIGH);
delay(i);
digitalWrite(LED, LOW);
delay(i);
}
}
Скомпилируйте код листинга 2.2, загрузите его на свою плату Arduino и посмотрите, что происходит. Теперь разберемся, как это работает.
- 49 -
Оператор for всегда содержит три выражения, разделенные точкой с запятой:
• первое выражение присваивает начальное значение переменной-счетчику цикла.
В нашем примере переменная i получает начальное значение 100;
• второе выражение указывает, когда цикл должен остановиться. Операторы в теле цикла будут выполняться снова и снова, пока условие истинно. Запись <= означает меньше или равно. Таким образом, этот цикл будет выполняться тех пор, пока переменная i меньше или равна 1000;
• последнее выражение указывает, что должно произойти с переменной i каждый раз после выполнения операторов тела цикла. В нашем примере, значение счетчика цикла увеличивается на 100.
Чтобы лучше понять работу оператора for, подробно рассмотрим, что происходит за два прохода цикла:
1. Значение переменной i равно 100, 100 меньше или равно 1000, значит выполнять код в теле цикла.
2. На контакте 9 установлено значение HIGH, светодиод горит 100 мс (текущее значение i).
3. На контакт 9 подано значение LOW, светодиод потушен 100 мс (текущее значение i).
4. В конце цикла значение переменной i увеличивается на 100, теперь i равно 200.
5. 200 меньше или равно 1000, цикл повторяется снова.
6. На контакте 9 установлено значение HIGH, светодиод горит 200 мс (текущее значение i).
7. На контакт 9 подано значение LOW, светодиод потушен 200 мс (текущее значение i).
8. В конце цикла значение переменной i увеличивается на 100, теперь i равно 300.
9. Этот процесс повторяется, пока i не превосходит 1000 и затем i снова принимает значение 100 и все повторяется заново.
Итак, вы разобрались с работой цифровых контактов платы Arduino. Далее мы расскажем, как с помощью ШИМ сформировать аналоговые сигналы на цифровых контактах платы Arduino.
2.6. Широтно-импульсная модуляция с помощью analogWrite()
Вы освоили контроль над цифровыми контактами Arduino. Они очень удобны для переключения светодиодов, управления реле и двигателями постоянного тока. Но что делать, если необходимо вывести напряжение, отличное от 0 и 5 В. С помощью контактов одной только платы Arduino Uno это невозможно. Придется задействовать цифроаналоговый преобразователь или взять плату Arduino Due или добавить внешнюю микросхему ЦАП.
Читать дальше