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 за несколько миллисекунд. Если логика скетча чувствительна к этому, добавьте программную задержку или используйте алгоритм антидребезга.