При объявлении любой переменной необходимо указать ее тип. В нашем случае это целое число (номера контактов всегда будут целыми числами).
Теперь попробуйте изменить программу из главы 1, добавив функцию digitalWrite() и введя задержку в цикле loop(). Экспериментируя со значениями задержки, можно создавать различные эффекты мигания.
2.5. Использование цикла
На практике часто необходимо циклически изменять значения переменных для выполнения заданного алгоритма. В предыдущем примере можно реализовать цикл, чтобы увидеть, как влияют на частоту мигания разные значения задержки. Вы можете реализовать разные скорости мигания, задавая с помощью переменной цикла различные значения задержки. Пример иллюстрирует код из листинга 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 или добавить внешнюю микросхему ЦАП.