Опыт №2. Зажигаем светодиод

Введение

В этом опыте мы сначала зажжем встроенный светодиод на плате Arduino, а затем заставим мигать внешние светодиоды, подключенные к выводам платы.

Параллельно мы осовоим новые элементы яыка программирования, если Вы с ним еще не знакомы.

Отметим для преличия, что именно мигание светодиодом должна быть первой программой для Arduino, и потому именно эту программу обычно называют как Hello World на Arduino. 😉

Часть 1. Встроенный светодиод

На плате ардуино есть несколько светодиодов, и один из них можно зажигать программным путем для индикации происходящих в устройстве определенных процессов.

В зависимости от модели и версии платы, светодиод может быть разного цвета, но обычно он красный либо желтый и помечен буквой L.

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

Только плата ардуино.

Скетч

Итак, вот скетч, который 1 раз в секунду будет зажигать встроенный светодиод на полсекунды.

/*******************************************************
 * (C) jarduino.ru 2019
 * Изучение ардуино через опыты.
 *
 *  Опыт №2.1. Мигание светодиодом
 *
 * ****************************************************/

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

// основной цикл
void loop()
{
  digitalWrite(13, HIGH); // включить светодиод
  delay(500); // пауза в полсекунды
  digitalWrite(13, LOW); // выключить светодиод
  delay(1000); // пауза
}

Результат

Вы увидите как мигает встроенные светодиод.

Объяснение

За встроенным светодиодом закреплен цифровой пин 13. Т.е. если на пин 13 устанавливается высокий потенциал (HIGH), то светодиод зажигается, а если низкий (LOW) – гаснет. Делается это с помощью функции digitalWrite, которая имеет 2 параметра: номер цифрового пина и его значение – HIGH (высокое) или LOW (низкое).

Чтобы установить значение пина, его надо инициализировать на ввод. Делается это внутри функции setup() с помощью функции pinMode, которая имеет 2 параметра: номер цифрового пина и режим работы пина – OUTPUT (вывод) или INPUT (ввод).

  • OUTPUT говорит плате, что мы будем выводить через этот пин информацию (т.е. будет устанавливать значение HIGH или LOW).
  • INPUT говорит плате, что мы будем считывать значение с этого пина.

Часть 2. Подключение светодиода

Поскольку плата ардуино обычно находится в корпусе изделия, то встроенный светодиод не будет видет. Но его можно продублировать, подключив внешний светодид к пину 13 на плате. Внешний светодиод будет установлен в корпус таким образом, чтобы его хорошо было видно.

Давайте сделаем это.

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

  • Макетная плата
  • Светодиод
  • Сопротивление 220 Ом
  • Несколько проводов-перемычек

Схема сборки

Скетч

Скетч остается прежним.

Результат

Мы видим как одновременно мигают встроенный и подключенный нами светодиоды:

Объяснение

Слаботочный светодиод должен быть защищен с помощью резистора, подключенного последовательно со светодиодом. Обычно для этого используют резистор 220 Ом, поскольку напряжение на пине платы составляет 5V.

Часть 3. Мигание несколькими светодиодами

Аналогичным образом возможно подключить светодиод к любому цифровому пину (с 2 по 13 пин). Давайте подключим еще один светодиод и будем теперь их переключать по очереди каждую секунду.

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

В дополнение к компонентам предыдущего опыта нам понадобится еще одна пара светодиода и резистора.

Схема сборки

Подключим 2й светодиод к порту 12.

Скетч

Параллельно мы немного оптимизируем программу, вынеся номера пинов в константы программы, а временную задержку в глобальные переменные.

/**
 * (C) jarduino.ru 2019
 * Изучение ардуино через опыты.
 *
 * Опыт №2. Поочередное мигание двумя светодиодами
 */

// Иницилизация глобальных констант и переменных:
const byte pin_led1 = 13; // пин для светодиода 1
const byte pin_led2 = 12; // пин для светодиода 2
const unsigned int nDelay = 1000; // продолжительность свечения светодиода

bool bLedOn = false; // хранит текущее положение мигалки. если bLedOn = true, то горит светодиод 1.

// настройка платы
void setup()
{
  // Перевести пины для подключения светодиодов в режим вывода:
  pinMode(pin_led1, OUTPUT);
  pinMode(pin_led2, OUTPUT);
}

// главный цикл программы
void loop()
{
  // Каждый новый цикл инвертирует состояние светодиода

  // Инвертиировать состояние светодиодов:
  bLedOn = !bLedOn;

  // Выставить противоположные положения светодиодов:
  digitalWrite(pin_led1, bLedOn);
  digitalWrite(pin_led2, !bLedOn);

  // Пауза программы:
  delay(nDelay);
}

Результат

Учим C/С++

Здесь появились новые ключевые слова и конструкции:

bool – тип данных для логических переменных принимающих значения 1 или 0 (или true или false)

byte – тип данных, для переменных принимающих целые числа от 0 до 255. Подходящий тип для хранения номеров пина.

unsigned int – тип данных, представляющий целые числа от 0 до 65535. С помощью переменной такого типа можно хранить временные задержки до 65 секунд.

Хорошей практикой считается избегание любых константных значений в программе, вынося их в переменные или именованные константы, которые легко можно изменить в одном месте программы.

Приставка const перед объявлением переменной говорит о том, что значение данной переменной нельзя изменить в ходе выполнения программы.

Хорошей практикой считается использование const везде, где это возможно. Это позволит выявить многие логические ошибки еще  на этапе компиляции программы, а также это позволит компилятору соптимизировать исполняемый код, сократив используемую память.

Заключение

В этом опыте мы разобрались как работать с цифровыми пинами на плате на примере управления светодиодами.

Также мы познакомились с новыми элементами языка программирования:

  • типы данных bool, byte, unsigned int,
  • переменными и константами.

Оставляйте, пожалуйста, свои комментарии, делитесь со своими друзьями, задавайте вопросы или присылайте замечания!

One Reply to “Опыт №2. Зажигаем светодиод”

  1. zhekaus Post author

    Оставляйте, пожалуйста, свои комментарии, делитесь со своими друзьями, задавайте вопросы или присылайте замечания!

    Reply

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *