Управляем встроенным светодиодом

Принцип

Встроенный в Arduino UNO светодиод подключён к контакту (пину) 13 платы. Чтобы зажечь его, надо на указанном пине установить высокий уровень, чтобы погасить — низкий.

Состоянием пина 13 управляет бит 5 (счёт от нуля) в регистре данных порта B Arduino, и нужно лишь задать этому биту требуемое значение 0 или 1. Однако невозможно задать значение только одному биту этого регистра: записать или считать можно только целиком весь регистр, байт (у него есть собственное имя PORTB). Другие пины порта могут выполнять какую-то свою функцию, поэтому менять бит 5 надо так, чтобы не затронуть другие биты:

Но перед этим надо настроить пин 13 на работу в режиме выхода.

Реализация

Предусмотрена маска пятого бита — байт, в котором бит 5 равен 1, а остальные биты равны 0:

mask = 0b00100000.

Считать PORTB, установить биту 5 значение 1 (коротко: "установить бит 5"), не затрагивая другие биты, записать результат в порт B можно одним оператором:

PORTB = PORTB | mask;

или, в сокращённой записи

PORTB |= mask;

Считать PORTB, установить биту 5 значение 0 (коротко: "сбросить бит 5"), не затрагивая другие биты, записать результат в порт B можно, аналогично, одним оператором:

PORTB &= ~mask;

Эта же маска применяется к регистру направления DDRB для переключения пина 5 в режим выхода:

DDRB |= mask;

Нужное значение бита 5 — 0 или 1 — вводят с клавиатуры компьютера в мониторе последовательного порта Arduino IDE. Программа проверяет, какой символ был принят, и, если это '0' или '1', выполняет рассмотренный выше оператор с маской, которым, соответственно, сбрасывается или устанавливается бит 5.

Файлы

Текст программы содержится в файле Ind_y_Ardu.ino, который можно получить с Github по ссылке.

Как вариант, можно получить с Github весь репозиторий цикла "Ардуино и индикаторы" и выполнить команду

git restore -s LED_builtin -- Ind_y_Ardu.ino

Файл Ind_y_Ardu.ino в рабочей области будет перезаписан версией для управления встроенным светодиодом Arduino.

Источники

  1. Alex Gyver. Битовые операции. https://alexgyver.ru/lessons/bitmath/
  2. Arduino - Port Manipulation. https://docs.arduino.cc/retired/hack..
  3. LED Interfacing With Arduino UNO With Port Registers. https://www.instructables.com/LED-...
  4. Alex Gyver. Монитор порта. Serial. https://alexgyver.ru/lessons/serial/
  5. Serial.Read с примером использования. https://arduino.ru/Reference/Serial/Read

К оглавлению