Эксперимент № 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 Автор записи

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

    Reply

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

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