Arduino 4-х разрядный семи сегментный индикатор используется для создания счетчиков или таймеров и для вывода информации с датчиков в проектах. На этом дисплее производится модуль TM1637 Ардуино, который проще использовать. Рассмотрим распиновку четырёхразрядного 7 сегментного дисплея Ардуино, как подключить модуль к плате и рассмотрим примеры использования индикатора с примерами программ.
СОДЕРЖАНИЕ
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- 4 разрядный 7 сегментный индикатор
- резисторы
- тактовая кнопка
- макетная плата
- коннекторы
- библиотека TimerOne.h
Дополнительные материалы на эту тему:
Распиновка сегментов у модуля четырехсимвольного индикатора практически не отличается от распиновки семисегментного индикатора для Ардуино. Модуль индикатора 4×7 отличается количеством цифр (символов) — каждая цифра активируется выключением соответствующего катода на модуле. Таким образом, все светодиоды сегмента на четырех разрядах (например, A-A-A-A) подключены параллельно к общему катоду.
4 разрядный 7 сегментный индикатор распиновка

Характеристики 4 разрядный 7 сегментный индикатор
- Напряжение питания: от 3 В до 5 В
- Максимальный потребляемый ток: 150 мА (при питании 5 В)
- Диапазон рабочих температур: от -40°C до +85°C
Включением сегмента на модуле легко управлять, рассмотрим в теории небольшой пример. Первоначально на 4 разряда (D1, D2, D3, D4) подается напряжение. Чтобы активировать сегмент A на втором разряде, необходимо подать напряжение на контакт A (анод). Но сегмент не включится, пока мы не отключим напряжение на выводе D2. Таким образом, может быть зажжен любой светодиод (сегмент) на модуле дисплея.
Проблема с подключением и программированием от Ардуино заключается в том, что на четырехразрядном 7-сегментном индикаторе одновременно может отображаться только одна цифра. Поэтому необходимо вывести желаемое число на каждый разряд на короткое время. Человеческий глаз не успевает воспринять быстрое переключение светодиодов и создается впечатление, что все сегменты на разрядах светятся одновременно.
Как подключить четырехразрядный семисегментный индикатор к Ардуино

В первом примере мы продемонстрируем простую программу, чтобы вы могли четко понять, как работает 4-значный 7-сегментный дисплей для Arduino. Схема подключения индикатора к микроконтроллеру показана на рисунке выше, но в первом примере в программе используются не все контакты у микроконтроллера Arduino. Подключите четырехразрядный семисегментный индикатор к плате, согласно схеме, и загрузите код.
Скетч управление 4 разрядным 7 сегментным дисплеем
#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);
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);
}
Секундомер с кнопкой на 4-х разрядном индикаторе

В этом простом примере мы соберем схему — таймер на Ардуино с четырехразрядным семисегментным светодиодным индикатором. Перед загрузкой скетча необходимо подключить кнопку таймера к пину A0 и установить библиотеку в Arduino IDE TaimerOne.h. Таймер запускается только при нажатии кнопки, при отпускании кнопки таймер останавливается, а при повторном нажатии на кнопку сбрасывается на нуль.
Скетч 4 разрядный 7 сегментный дисплей с кнопкой
#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 считает секунды после нажатия кнопки. Когда первая цифра четырехзначного индикатора Arduino переполняется (счетчик переменной становится больше 9) — счетчик увеличивается на единицу. Если целью проекта является отображение температуры от датчика ds18b20 или времени, то для этого потребуется многоразрядный дисплей или несколько одноразрядных 7 сегментных индикаторов.

Не смог инициализировать таймер. Что-то не так с процедурой Timer1.initialize(100000)
Библиотеку TimerOne.h установили?