СОДЕРЖАНИЕ ►
Светодиодный четырехразрядный семисегментный индикатор Ардуино используется для создания счетчиков или таймеров на Arduino, вывода числовых значений с датчиков в готовых проектах. Рассмотрим распиновку четырехсимвольного светодиодного индикатора, как подключить модуль к плате Arduino и рассмотрим несколько примеров использования индикатора с подробным описанием программ.

Распиновка 4 разрядного 7 сегментного индикатора
Распиновка сегментов индикатора, состоящего из четырех символов ничем не отличается от одно символьного семисегментного индикатора Ардуино. Отличие модуля в количестве разрядов (символов) — каждый разряд включается отключением питания от соответствующего катода. Таким образом все светодиоды одного сегмента в разрядах (например, A-A-A-A) подключены параллельно к общему катоду.

С включением сегмента довольно просто разобраться. Разберем небольшой пример. Изначально на все 4 разряда (D1, D2, D3, D4) подано напряжение. Чтобы включить сегмент A на втором символе, необходимо на ножку A (анод) подать напряжение. Но сегмент не загорится, пока мы не отключим напряжение у ножки D2. Таким образом можно включать любой светодиод на модуле 7 сегментного индикатора.
Проблема подключения индикатора к Arduino состоит в том, что используется сразу много пинов на плате. Кроме того, выводить на индикаторе одновременно можно только одну цифру. Поэтому необходимо за очень короткое время по очереди выводить нужную цифру на каждом из разрядов. Человеческое зрение не успевает уловить переключение и вам будет казаться, что все разряды горят одновременно.
Подключение 4 разрядного 7 сегментного индикатора
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- четырехразрядный семисегментный индикатор;
- макетная плата (breadboard);
- тактовая кнопка;
- аналоговый датчик воды;
- резисторы 220 Ом;
- провода «папа-папа».

В первом примере мы продемонстрируем простую программу, чтобы можно было наглядно понять, как работает 4-разрядный 7-сегментный индикатор к Ардуино. Схема подключения индикатора к микроконтроллеру представлена на схеме выше, но в первом примере не все пины Ардуино используются в программе. Подключите светодиодный четырехразрядный индикатор к плате и загрузите следующий код.
Скетч 4-разрядного семисегментного индикатора
#define g 11 // назначаем имена пинов для удобства #define d1 A1 #define d2 A2 #define d3 A3 #define d4 A4 void setup() { pinMode(g, OUTPUT); // назначаем режим работы пинов pinMode(d1, OUTPUT); pinMode(d2, OUTPUT); pinMode(d3, OUTPUT); pinMode(d4, OUTPUT); digitalWrite(d1, HIGH); // подаем напряжение на пины разрядов digitalWrite(d2, HIGH); digitalWrite(d3, HIGH); digitalWrite(d4, HIGH); digitalWrite(g, HIGH); // подаем напряжение на сегмент (G) delay(1000); } void loop() { digitalWrite(d1, LOW); // включаем первый разряд digitalWrite(d4, HIGH); delay(200); digitalWrite(d2, LOW); // включаем второй разряд digitalWrite(d1, HIGH); delay(200); digitalWrite(d3, LOW); // включаем третий разряд digitalWrite(d2, HIGH); delay(200); digitalWrite(d4, LOW); // включаем четвертый разряд digitalWrite(d3, HIGH); delay(200); }
Пояснения к коду:
- в процедуре void setup мы подали напряжение на четыре разряда светодиодного индикатора, чтобы они не горели изначально при начале программы;
- в основном цикле void loop мы поочередно включаем разряды (включение происходит при режиме
LOW), при этом сегмент G остается всегда включен.
В следующем примере соберем схему — таймер Ардуино с четырехразрядным семисегментным индикатором на светодиодах. Перед загрузкой скетча необходимо подключить к пину A0 тактовую кнопку и установить библиотеку в Arduino IDE TaimerOne.h. Запуск таймера происходит только при нажатой кнопке, а при отпускании кнопки таймер останавливается и обнуляется при повторном нажатии.
Скетч таймера на 4-разрядном семисегментном индикаторе
#include "TimerOne.h" #define a 5 #define b 6 #define c 7 #define d 8 #define e 9 #define f 10 #define g 11 #define d1 A1 #define d2 A2 #define d3 A3 #define d4 A4 long n = 0; int x = 100; int count = 0; void setup() { pinMode(a, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT); pinMode(e, OUTPUT); pinMode(f, OUTPUT); pinMode(g, OUTPUT); pinMode(d1, OUTPUT); pinMode(d2, OUTPUT); pinMode(d3, OUTPUT); pinMode(d4, OUTPUT); pinMode(A0, INPUT); Timer1.initialize(100000); Timer1.attachInterrupt( add ); } void loop() { while (digitalRead(A0) == LOW) { clearLEDs(); pickDigit(0); // включаем первую цифру (тысячи) pickNumber((n / 1000)); delay(5); clearLEDs(); pickDigit(1); // включаем вторую цифру (сотни) pickNumber((n % 1000) / 100); delay(5); clearLEDs(); pickDigit(2); // включаем третью цифру (десятки) pickNumber(n % 100 / 10); delay(5); clearLEDs(); pickDigit(3); // включаем четвертую цифру (единицы) pickNumber(n % 10); delay(5); } if (digitalRead(A0) == HIGH) { n = 0; count = 0; } } // определение разряда void pickDigit(int x) { digitalWrite(d1, HIGH); digitalWrite(d2, HIGH); digitalWrite(d3, HIGH); digitalWrite(d4, HIGH); switch (x) { case 0: digitalWrite(d1, LOW); break; case 1: digitalWrite(d2, LOW); break; case 2: digitalWrite(d3, LOW); break; default: digitalWrite(d4, LOW); break; } } // определение символа (цифры) void pickNumber(int x) { switch (x) { default: zero(); break; case 1: one(); break; case 2: two(); break; case 3: three(); break; case 4: four(); break; case 5: five(); break; case 6: six(); break; case 7: seven(); break; case 8: eight(); break; case 9: nine(); break; } } // очистка индикатора void clearLEDs() { digitalWrite(a, LOW); digitalWrite(b, LOW); digitalWrite(c, LOW); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); } void zero() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, LOW); } void one() { digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); } void two() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, LOW); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, LOW); digitalWrite(g, HIGH); } void three() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, HIGH); } void four() { digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); } void five() { digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); } void six() { digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); } void seven() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); } void eight() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); } void nine() { digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); } void add() { count ++; if (count == 10) { count = 0; n++; if (n == 10000) { n = 0; } } }
Пояснения к коду:
- если не подключить кнопку — таймер запустится сразу после загрузки кода;
- в процедуре
void addидет отсчет секунд —count. Когда первый разряд четырехсимвольного индикатора Ардуино переполняется (переменнаяcountстановится больше 9) — увеличивается на одну единицу счетчик.










Вопрос: Мы можем активировать любой из разрядов.
Возьмем сначала 1ый и включим на нем 2 сегмента, активируем 2ой и на нем горят те же два сегмента что и на 1ом, активируем третий, и на всех трех горят одни те же сегменты, которые мы включили изначально для первого разряда
Как включить разные сегменты на разных разрядах?
Например, показать число 123
Тут же написано, надо очень и очень быстро включать их по порядку, сначала первую цифру, потом вторую и т.д. Если это делать очень быстро то человеческий глаз этого не заметит!
Плохой скетч, схема тоже. Ошибка на ошибке, девятка наоборот зажигается
У Вас на индикаторе имеется еще два сегмента (;-двоеточие) для разделения часов и минут, при отображении времени. Как их реализовать
король этот сайт офигенный! Это у тебя в башке скетч …
на кнопку надо ставить резистор в 10 кОм (а не 220 Ом как пишет автор)
Схема составлена не верно, перепутаны регистры, на индикаторе вместо едениц моргает тысячи, вместо десятков — сотни.
Здравствуйте, где написанно #include , у меня пишет «No such file or directory», как это сделать?
скачать надо
Почему нельзя запрограммировать ардуино считать значения таймера в параллельном/последовательном коде, а индикатор взять с дешифратором? В вашем случае вы заставляете компьютер делать дурную работу, время и энергию на которую можно было бы потратить более рационально.
Вместо резистора на 10 кОм можно подключить порт в digital и настроить его как INPUT_PULLUP и одну ножку кнопки подключить в digital а другую в GND и при чтении инвертировать значение кнопки с помощью восклицательного знака.