Изучаем Arduino: инструметы и методы технического волшебства - [9]

Шрифт
Интервал

- 47 -

сеивания связано с ростом тепловыделения прибора. Для каждого компонента, как правило, задается максимально допустимая мощность. Максимальная мощность резистора в нашем примере равна 0,125 Вт. Формула для расчета мощности выглядит следующим образом:

Р = U·I, где Р - мощность, Вт; U- напряжение, В; I - сила тока, А.

Для резистора из схемы на рис. 2.3 при падении напряжения 3 В и силе тока 20 мА мощность равна

Р = 3·0,02 = 0,06 Вт.

Поскольку 60 мВт< 0,125 Вт = 125 мВт, следовательно, данный резистор не перегреется.

2.4. Программирование цифровых выводов


По умолчанию все внешние контакты Arduino сконфигурированы как входы. Если необходимо использовать контакт Arduino как выход, нужно его переконфигурировать, подав соответствующую команду микроконтроллеру.

Каждая программа для Arduino должна включать две обязательные функции:

setup() И loop().

В главе 1 уже упоминалось, что функция setup() запускается один раз в начале программы, а loop() работает как цикл. Поскольку каждый контакт обычно конфигурируется в программе один раз, логично делать это в теле функции setup().

Для начала напишем простую программу, которая при запуске сконфигурирует контакт 9 как выход. В программе будут еще две функции: pinMode() - для конфигурации контакта и digitalWrite() - для установки значения HIGH (5 В) на этом контакте (листинг 2.1 ).

Листинг 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.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 и все повторяется заново.