Программируем Arduino. Основы работы со скетчами - Монк Саймон
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 из предыдущего скетча, она просто включает и выключает светодиод один раз с указанной задержкой.
Цифровые входы могут соединяться с цифровыми выходами других модулей, которые действуют не так, как выключатель, но устанавливают те же уровни напряжения HIGH и LOW. В таких случаях функции pinMode следует передавать аргумент INPUT вместо INPUT_PULLUP.
Цифровые выходы
Немного нового можно сказать о цифровых выходах с точки зрения программирования после экспериментов с контактом 13, к которому подключен встроенный светодиод.
Настройка контактов на работу в режиме цифровых выходов осуществляется в функции setup с помощью следующей команды:
pinMode(outputPin, OUTPUT);
Чтобы на цифровом выходе установить уровень напряжения HIGH или LOW, нужно вызывать команду digitalWrite:
digitalWrite(outputPin, HIGH);
Монитор последовательного порта
Так как плата Arduino подключается к компьютеру через порт USB, есть возможность пересылать сообщения между ними, используя компонент Arduino IDE, который называется монитором последовательного порта (Serial Monitor). Для иллюстрации изменим скетч 01_03 так, чтобы вместо изменения частоты мигания светодиода после установки уровня напряжения LOW на цифровом входе 7 он посылал сообщение.
Загрузите следующий скетч:
// sketch 01_04_serial
int switchPin = 7;
void setup()
{
pinMode(switchPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop()
{
if (digitalRead(switchPin) == LOW)
{
Serial.println("Paperclip connected");
}
else
{
Serial.println("Paperclip NOT connected");
}
delay(1000);
}
Теперь откройте монитор последовательного порта в Arduino IDE, щелкнув на кнопке с изображением, напоминающим лупу. Вы сразу же должны увидеть несколько сообщений, появляющихся одно за другим (рис. 1.14).

Рис. 1.14. Монитор последовательного порта
Разъедините контакты, убрав скрепку, и вы должны увидеть, что текст сообщения изменился.
Так как встроенный светодиод в этом скетче не используется, отпала и необходимость в переменной ledPin. Зато появилась новая команда Serial.begin, запускающая обмен сообщениями через последовательный порт. Ее параметр определяет скорость передачи. Подробнее о взаимодействиях через последовательный порт рассказывается в главе 13.
Чтобы записать сообщение в монитор порта, достаточно выполнить команду Serial.println.
В данном примере Arduino посылает сообщения в монитор последовательного порта.
Массивы и строки
Массивы предназначены для хранения списков значений. Переменные, которые нам встречались до сих пор, могли хранить только одно значение, обычно типа int. Массив, напротив, может хранить список значений и позволяет обращаться к отдельным значениям по их позициям в списке.
В C, как и в большинстве других языков программирования, нумерация позиций в массиве начинается с 0, а не с 1. Это означает, что первый элемент фактически является нулевым элементом.
Мы уже сталкивались с одной из разновидностей массивов в предыдущем разделе, где знакомились с монитором последовательного порта. Сообщения, такие как «Paperclip NOT connected» (скрепка не замыкает контакты), называют массивами символов, потому что фактически они являются коллекциями символов.
Например, научим Arduino посылать в монитор порта всякую чепуху.
Следующий скетч имеет массив массивов символов. Он выбирает их по одному в случайном порядке и посылает в монитор последовательного порта через случайные интервалы времени. Попутно этот скетч показывает, как в Arduino получать случайные числа.
// sketch 01_05_gibberish
char* messages[] = {
"My name is Arduino",
"Buy books by Simon Monk",
"Make something cool with me",
"Raspberry Pis are fruity"};
Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Программируем Arduino. Основы работы со скетчами - Монк Саймон, относящееся к жанру Программирование. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.

![Анатолий Томилин - Хочу всё знать [1970] Читать книги онлайн бесплатно без регистрации | siteknig.com](https://cdn.siteknig.com/s20/2/2/8/5/7/7/228577.jpg)
