Цифровые сигналы

Урок 4: Цифровые сигналы — ввод и вывод

Цели урока:

  1. Познакомиться с понятием цифровых сигналов.
  2. Научить использовать функции pinMode()digitalWrite() и digitalRead().
  3. Закрепить знания на практике, создав проекты с мигающим светодиодом, кнопкой и "бегущим огнём".

Теоретическая часть

Что такое цифровые сигналы?

Цифровые сигналы — это сигналы, которые могут принимать только два значения:

  • HIGH (высокий уровень): 5 В (или 3.3 В на некоторых платах).
  • LOW (низкий уровень): 0 В.

Цифровые сигналы используются для:

  • Управления устройствами (например, включение/выключение светодиода).
  • Чтения состояния устройств (например, проверка, нажата ли кнопка).

Функции для работы с цифровыми сигналами

Функция pinMode()

Функция pinMode() настраивает пин как вход (INPUT) или выход (OUTPUT).

Синтаксис:

pinMode(pin, mode);
  • pin Номер пина, который вы хотите настроить (например, 2, 3, 13).
  • mode: Режим работы пина:
    • INPUT — пин работает как вход.
    • OUTPUT — пин работает как выход.
    • INPUT_PULLUP — пин работает как вход с включенным внутренним подтягивающим резистором.

Пример использования:

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

Функция digitalWrite()

Функция digitalWrite() устанавливает значение на выходном пине (HIGH или LOW).

Синтаксис:

digitalWrite(pin, value);
  • pin Номер пина, на который вы хотите подать сигнал.
  • value Значение, которое нужно установить:
    • HIGH — подать напряжение 5 В (или 3.3 В на некоторых платах).
    • LOW — подать напряжение 0 В.

Пример использования:

void loop() {
  digitalWrite(13, HIGH); // Включить светодиод
  delay(1000);            // Ждать 1 секунду
  digitalWrite(13, LOW);  // Выключить светодиод
  delay(1000);            // Ждать 1 секунду
}

Функция digitalRead()

Функция digitalRead() используется для чтения значения на входном пине (HIGH или LOW).

Синтаксис:

digitalRead(pin);
  • pin: Номер пина, с которого вы хотите прочитать значение.

Пример использования:

void loop() {
  int buttonState = digitalRead(2); // Чтение состояния кнопки на пине 2
  if (buttonState == HIGH) {
    digitalWrite(13, HIGH); // Включить светодиод, если кнопка нажата
  } else {
    digitalWrite(13, LOW);  // Выключить светодиод, если кнопка не нажата
  }
}

Подтягивающие резисторы

Что такое подтягивающий резистор?

Подтягивающий резистор — это резистор, который подключается между входным пином и источником питания (VCC) или землей (GND). Он используется для стабилизации состояния пина, когда кнопка или другой входной компонент не активен.

Зачем он нужен?

Когда кнопка не нажата, пин, к которому она подключена, находится в "плавающем" состоянии. Это означает, что его значение может случайно меняться между HIGH и LOW, что приводит к ложным срабатываниям. Подтягивающий резистор фиксирует состояние пина, когда кнопка не нажата.

Краткое упоминание о ШИМ (PWM)

Некоторые цифровые пины на Arduino (например, 3, 5, 6, 9, 10, 11 на Arduino Uno) поддерживают ШИМ (широтно-импульсную модуляцию). Это позволяет управлять аналоговыми устройствами, такими как яркость светодиода или скорость мотора, с помощью цифровых сигналов.

Пример использования:

analogWrite(9, 128); // Установить яркость светодиода на 50%

Подробнее о ШИМ мы поговорим в следующем уроке, посвященном аналоговым сигналам.

Практическая часть

Задание 1: Мигающий внешний светодиод

Цель задания:

Создать проект, в котором внешний светодиод будет мигать с интервалом 1 секунда.

Необходимые компоненты:

  • Светодиод.
  • Резистор 220 Ом.
  • Провода.
  • Макетная плата (можно и без нее).

Схема подключения:

  • Подключите анод (длинная ножка) светодиода к пину 13 через резистор 220 Ом.
  • Подключите катод (короткая ножка) светодиода к GND.

Код программы:

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

void loop() {
  digitalWrite(13, HIGH); // Включить светодиод
  delay(1000);            // Ждать 1 секунду
  digitalWrite(13, LOW);  // Выключить светодиод
  delay(1000);            // Ждать 1 секунду
}

Вот готовый проект на Wokwi, нажмите кнопку "Start the simulation" и посмотрите что будет.

Задание 2: Управление светодиодом с помощью кнопки

Цель задания:

Создать проект, в котором светодиод включается только при нажатии кнопки.

Необходимые компоненты:

  • Светодиод.
  • Резистор 220 Ом.
  • Кнопка.
  • Провода.
  • Макетная плата (можно и без нее).

Схема подключения (рисунок ниже):

  • Подключите анод светодиода к пину 13 через резистор 220 Ом.
  • Подключите катод светодиода к GND.
  • Подключите один контакт кнопки к пину 2, а другой — к 5 V.
  • Подключите резистор 10 кОм между пином 2 и GND (подтягивающий резистор).
Схема подключения кнопки в arduino

Код программы:

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

void loop() {
  int buttonState = digitalRead(2); // Чтение состояния кнопки

  if (buttonState == HIGH) { // Если кнопка нажата
    digitalWrite(13, HIGH);  // Включить светодиод
  } else {
    digitalWrite(13, LOW);   // Выключить светодиод
  }
}

Вот готовый проект на Wokwi, нажмите кнопку "Start the simulation" и после этого понажимайте на кнопку.

Задание 3: "Бегущий огонь"

Цель задания:

Создать эффект "бегущего огня" с использованием 3-5 светодиодов.

Необходимые компоненты:

  • 3-5 светодиодов.
  • Резисторы 220 Ом.
  • Провода.
  • Макетная плата (можно и без нее).

Схема подключения (рисунок ниже):

  • Подключите аноды светодиодов к пинам 2, 3, 4, 5, 6 через резисторы 220 Ом.
  • Подключите катоды светодиодов к GND.
Схема подключения светодиодов в arduino

Код программы:

void setup() {
  pinMode(2, OUTPUT); // Настройка пинов как выходов
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
}

void loop() {
  for (int i = 2; i <= 6; i++) {
    digitalWrite(i, HIGH); // Включить светодиод
    delay(200);            // Ждать 200 мс
    digitalWrite(i, LOW);  // Выключить светодиод
  }
}

Вот готовый проект на Wokwi, нажмите кнопку "Start the simulation" и посмотрите что произойдет.

Вопросы для закрепления:

  1. Что такое цифровой сигнал?
  2. Какие функции используются для работы с цифровыми сигналами?
  3. Как подключить светодиод к Arduino?
  4. Как работает подтягивающий резистор?
  5. Какие пины на Arduino поддерживают ШИМ (PWM)?

Домашнее задание:

  1. Создайте проект, где светодиод мигает только при нажатии одной кнопки, а при нажатии другой — перестает мигать.
  2. Подключите 3 светодиода и заставьте их мигать поочередно с разной скоростью.

Советы по работе в Wokwi:

  1. Используйте встроенные примеры кода в Wokwi для быстрого старта.
  2. Экспериментируйте с разными компонентами, чтобы лучше понять их работу.
  3. Не бойтесь ошибаться — симулятор позволяет легко исправлять ошибки и пробовать новые идеи.

Что мы узнали:

  • Познакомились с понятием цифровых сигналов.
  • Научились использовать функции pinMode()digitalWrite() и digitalRead().

Следующий урок: Аналоговые сигналы