Функция digitalRead()

arduino-logo

Описание функции digitalRead

Функция digitalRead считывает значение с указанного контакта платы Ардуино: 1 (HIGH) либо 0 (LOW).

Синтаксис

digitalRead(pin) 

Параметры

  • pin — номер входа/выхода, c которого необходимо считать состояние.

Что возвращает

(int) 1 (HIGH) либо 0 (LOW)

Пример использования функции digitalRead

#define BTN_ON  6   // Пин для кнопки ON
#define BTN_OFF A3  // Пин для кнопки OFF (аналогично #define BTN_OFF 17)
#define LED 13      // Пин для светодиода

void setup() {
  pinMode(BTN_ON, INPUT);   //  Настройка пина на вход
  pinMode(BTN_OFF, INPUT);  //  Настройка пина на вход
  pinMode(LED, OUTPUT);     //  Настройка пина на выход
}

void loop() {
  if( digitalRead(BTN_ON) == 0 ) digitalWrite(LED, 1);    // Если на пине 6 логический "0", то установить на 13 пине логическую "1" (зажечь светодиод)
  if( digitalRead(BTN_OFF) == 0 ) digitalWrite(LED, 0);   // Если на пине A3 логический "0", то установить на 13 пине логический "0" (погасить светодиод)
  delay(100); //  Подождем 0,1 секунду
}

Соберем схему в протеусе с двумя кнопками и светодиодом. Первая кнопка подключена к цифровому контакту 6, вторая — к аналоговому контакту А3. К обоим контактам через подтягивающий резистор подтянуто напряжение питания +5В. Таким образом, если кнопка не нажата, функция digitalRead вернет логическую единицу TRUE. Если кнопка нажата, тогда будет возращено значение FALSE.

Светодиод подключен к контакту 13 платы Ардуино Нано.

Напишем простой скетч анализа нажатия кнопок. Кнопки настраиваются в режим входа, а светодиод — в режим вывода.

В разделе функции loop() сперва проверяем нажата ли кнопка ON. Если функция вернет 0, тогда мы зажигаем светодиод, путем установки высокого уровня напряжения на контакте 13.

Затем проверяем нажата ли кнопка OFF. Опять же, если функция digitalRead возвращает 0, то на этот раз гасим светодиод, то есть устанавливаем низкий логический уровень на контакте 13.

Пример использования функции digitalRead

Код функции digitalWrite

(hardware/arduino/avr/cores/arduino/wiring_digital.c 1.8.10)

int digitalRead(uint8_t pin)
{
	uint8_t timer = digitalPinToTimer(pin);
	uint8_t bit = digitalPinToBitMask(pin);
	uint8_t port = digitalPinToPort(pin);

	if (port == NOT_A_PIN) return LOW;

	// If the pin that support PWM output, we need to turn it off
	// before getting a digital reading.
	if (timer != NOT_ON_TIMER) turnOffPWM(timer);

	if (*portInputRegister(port) & bit) return HIGH;
	return LOW;
}
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии