×
Traktatov.net » Изучаем Arduino: инструметы и методы технического волшебства » Читать онлайн
Страница 14 из 138 Настройки

При объявлении любой переменной необходимо указать ее тип. В нашем случае это целое число (номера контактов всегда будут целыми числами).

Теперь попробуйте изменить программу из главы 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 или добавить внешнюю микросхему ЦАП.