Программируем Arduino | страница 16



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

// 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.