Главная chevron_right Функции chevron_right Цифровой ввод/вывод chevron_right digitalRead()

digitalRead()

digitalRead() считывает логический уровень на цифровом выводе и возвращает HIGH или LOW — удобно для кнопок, датчиков и любых цифровых сигналов.

Полная статья

Описание

digitalRead() определяет, какой логический уровень присутствует на указанном цифровом выводе, и возвращает одно из двух значений: HIGH или LOW. Это основной способ получить состояние кнопки, датчика или любого другого цифрового сигнала в скетче.

Синтаксис

digitalRead(pin)

Параметры

pin — номер цифрового вывода Arduino, состояние которого нужно считать. Перед вызовом функции вывод обычно настраивают через pinMode() как INPUT или INPUT_PULLUP.

Возвращает

Функция возвращает HIGH, если на выводе обнаружен высокий логический уровень, или LOW, если уровень низкий.

Пример кода

В примере ниже кнопка подключена к выводу 7, а встроенный светодиод Arduino управляется через вывод 13. Состояние кнопки считывается каждый цикл loop() и сразу же передаётся на светодиод.

int ledPin = 13;  // светодиод подключён к цифровому выводу 13
int inPin = 7;    // кнопка подключена к цифровому выводу 7
int val = 0;      // переменная для хранения считанного значения

void setup() {
  pinMode(ledPin, OUTPUT);  // настраивает цифровой вывод 13 как выход
  pinMode(inPin, INPUT);    // настраивает цифровой вывод 7 как вход
}

void loop() {
  val = digitalRead(inPin);   // считывает состояние входного вывода
  digitalWrite(ledPin, val);  // устанавливает состояние светодиода в соответствии с состоянием кнопки
}

Где применяется

  • Кнопки и переключатели — самый частый сценарий: считать нажата ли кнопка и отреагировать на это событие.
  • Цифровые датчики — датчики движения, геркон, концевые выключатели и другие устройства, которые выдают сигнал HIGH/LOW.
  • Межплатное взаимодействие — чтение сигнала от другого микроконтроллера или модуля по одному проводу.
  • Отладка схемы — быстрая проверка уровня на выводе через Serial.println(digitalRead(pin)) без осциллографа.

Практические замечания

  • Настройте режим вывода заранее. Перед первым вызовом digitalRead() вызовите pinMode(pin, INPUT) или pinMode(pin, INPUT_PULLUP) в setup(). Если этого не сделать, поведение вывода не определено.
  • Плавающий вывод даёт случайный результат. Если к выводу ничего не подключено, digitalRead() может вернуть как HIGH, так и LOW — и значение будет меняться хаотично. Используйте INPUT_PULLUP и подключайте кнопку к GND, либо добавьте внешний подтягивающий резистор.
  • Аналоговые выводы работают как цифровые. Выводы A0–A5 (и их аналоги на других платах) можно читать через digitalRead(), указав их имена: digitalRead(A0). Исключение — выводы A6 и A7 на Arduino Nano, Arduino Pro Mini, а также A6 и A7 на Arduino Mini: они поддерживают только аналоговое чтение.
  • Функция не блокирует выполнение. digitalRead() возвращает результат мгновенно и не задерживает программу, поэтому её безопасно вызывать в быстрых циклах.
  • Дребезг контактов. При работе с механическими кнопками одно нажатие может вызвать несколько переходов HIGH/LOW за несколько миллисекунд. Если логика скетча чувствительна к этому, добавьте программную задержку или используйте алгоритм антидребезга.