Чтение онлайн

на главную - закладки

Жанры

Программируем Arduino. Основы работы со скетчами
Шрифт:

}

void loop

{

for (int i = 0; i < 10; i++)

{

digitalWrite(ledPin, HIGH);

delay(delayPeriod);

digitalWrite(ledPin, LOW);

delay(delayPeriod);

}

}

ПРИМЕЧАНИЕ

Это наш первый законченный скетч, поэтому его имя указано в строке комментария в начале файла. Все скетчи с подобными именами можно загрузить на веб-сайте автора www.simonmonk.org. Чтобы установить все скетчи в окружение Arduino, распакуйте файл со скетчами

в каталог Arduino, который находится в папке Documents (Документы). Среда разработки Arduino IDE автоматически создает эту папку при первом запуске.

Команда for определяет переменную с именем i и присваивает ей начальное значение 0. За точкой с запятой (;) следует текст i < 10. Это условие продолжения цикла. Иными словами, пока значение i остается меньше 10, продолжают выполняться команды, заключенные в фигурные скобки.

Последний элемент в команде for — i++. Это сокращенная форма записи выражения i = i + 1, которое прибавляет 1 к значению i. Увеличение значения i на единицу происходит в конце каждого цикла. Это выражение гарантирует прекращение цикла, потому что, увеличивая i на 1, вы в конечном счете получите значение больше 10.

Функции

Функции — это способ группировки программных команд в удобный для использования блок. Функции помогают поделить скетч на управляемые и простые в использовании фрагменты.

Например, напишем скетч, который сначала быстро мигает светодиодом 10 раз, а затем начинает мигать с частотой один раз в секунду.

Прочитайте следующий листинг, а потом я объясню, как он работает.

// sketch 01_02_blink_fast_slow

int ledPin = 13;

void setup

{

pinMode(ledPin, OUTPUT);

flash(10, 100);

}

void loop

{

flash(1, 500);

}

void flash(int n, int delayPeriod)

{

for (int i = 0; i < n; i++)

{

digitalWrite(ledPin, HIGH);

delay(delayPeriod);

digitalWrite(ledPin, LOW);

delay(delayPeriod);

}

}

Функция setup теперь включает строку flash(10, 100);. Она означает: «мигнуть 10 раз с периодом задержки delayPeriod 100 мс». Команда flash не является встроенной командой Arduino — вы создадите эту очень полезную функцию сами.

Определение функции находится в конце скетча. Первая строка в определении функции

void flash(int n, int delayPeriod)

сообщает Arduino, что определяется новая функция с именем flash, которая принимает два параметра, оба типа int. Первый параметр, с именем n, определяет, сколько раз светодиод должен мигнуть, а второй, с именем delayPeriod, определяет величину паузы после включения или выключения светодиода.

Эти два параметра можно использовать только внутри функции. Так, n используется в команде for, где определяет количество повторений цикла, а delayPeriod — внутри команд delay.

Функция loop скетча также использует функцию flash, но с более длинным периодом задержки delayPeriod и количеством повторений,

равным 1. Так как эта команда находится внутри функции loop, она будет выполняться снова и снова, заставляя светодиод мигать непрерывно.

Цифровые входы

Чтобы извлечь максимум пользы из данного раздела, найдите короткий кусок провода или просто металлическую скрепку.

Загрузите следующий скетч и запустите его:

// sketch 01_03_paperclip

int ledPin = 13;

int switchPin = 7;

void setup

{

pinMode(ledPin, OUTPUT);

pinMode(switchPin, INPUT_PULLUP);

}

void loop

{

if (digitalRead(switchPin) == LOW)

{

flash(100);

}

else

{

flash(500);

}

}

void flash(int delayPeriod)

{

digitalWrite(ledPin, HIGH);

delay(delayPeriod);

digitalWrite(ledPin, LOW);

delay(delayPeriod);

}

Используя кусок провода или выпрямленную скрепку, замкните контакты GND и 7, как показано на рис. 1.13. Это можно делать на включенной плате Arduino, но только после выгрузки в нее скетча. Это связано с тем, что некий предыдущий скетч мог настроить контакт 7 на работу в режиме выхода — в этом случае замыкание на GND может повредить контакт. Так как скетч настраивает контакт 7 на работу в режиме входа, его безопасно соединять с контактом GND.

Вот что происходит в результате: когда контакты замкнуты, светодиод мигает чаще, а когда не замкнуты — реже.

Давайте исследуем скетч и посмотрим, как он работает.

Рис. 1.13. Опыт с цифровым входом

Во-первых, в скетче появилась новая переменная с именем switchPin. Этой переменной присвоен номер контакта 7. Скрепка в данном эксперименте играет роль выключателя. В функции setup контакт 7 настраивается на работу в режиме входа командой pinMode. Во втором аргументе команде pinMode передается не просто значение INPUT, а INPUT_PULLUP. Оно сообщает плате Arduino, что по умолчанию вход должен иметь уровень напряжения HIGH, если на него не подан уровень LOW соединением этого контакта с контактом GND (скрепкой).

В функции loop мы используем команду digitalRead для проверки уровня напряжения на входном контакте. Если он равен LOW (скрепка замыкает контакты), вызывается функция с именем flash и значением 100 (в параметре delayPeriod). Это заставляет светодиод мигать чаще.

Если входной контакт имеет уровень напряжения HIGH, выполняются команды в разделе else инструкции if. Здесь вызывается та же функция flash, но с более продолжительной задержкой, заставляющей светодиод мигать реже. Функция flash является упрощенной версией функции flash из предыдущего скетча, она просто включает и выключает светодиод один раз с указанной задержкой.

Поделиться:
Популярные книги

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Отчий дом. Семейная хроника

Чириков Евгений Николаевич
Проза:
классическая проза
5.00
рейтинг книги
Отчий дом. Семейная хроника

Скандальная свадьба

Данич Дина
1. Такие разные свадьбы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Скандальная свадьба

Путанабус. Трилогия

Старицкий Дмитрий
Фантастика:
боевая фантастика
6.93
рейтинг книги
Путанабус. Трилогия

Идеальный мир для Лекаря 25

Сапфир Олег
25. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 25

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI

Проданная невеста

Wolf Lita
Любовные романы:
любовно-фантастические романы
5.80
рейтинг книги
Проданная невеста

Потомок бога

Решетов Евгений Валерьевич
1. Локки
Фантастика:
попаданцы
альтернативная история
аниме
сказочная фантастика
5.00
рейтинг книги
Потомок бога

С Д. Том 16

Клеванский Кирилл Сергеевич
16. Сердце дракона
Фантастика:
боевая фантастика
6.94
рейтинг книги
С Д. Том 16

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

От Советского Информбюро - 1941-1945 (Сборник)

Неизвестен 3 Автор
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
От Советского Информбюро - 1941-1945 (Сборник)

Санек 3

Седой Василий
3. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 3

Прометей: повелитель стали

Рави Ивар
3. Прометей
Фантастика:
фэнтези
7.05
рейтинг книги
Прометей: повелитель стали

Отмороженный 14.0

Гарцевич Евгений Александрович
14. Отмороженный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Отмороженный 14.0