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

Характеристики TM1637
- Напряжение питание: 5,5 В
- Потребляемый ток: 0.2 — 80 мА
- Градаций яркости индикаторов: 8
- Двух проводной последовательный интерфейс (CLK, DIO)
Модуль имеет максимально простое устройство и собран на основе драйвера TM1637 с интерфейсом двухпроводной шины. Четырехразрядный индикатор ТМ1637 не поддерживает стандартный i2c протокол, поскольку у модуля отсутствует адрес ведомого устройства. Производители предлагают модели белого красного, синего и зелёного цвета; размеры семисегментного дисплея 0,36 или 0,56 дюйма.
Дисплей TM1637 подключение к Ардуино
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- семисегментный индикатор TM1637;
- датчик воды / датчик освещенности;
- провода «папа-мама».

Подключается TM1637 к Arduino с помощью четырех контактов — два провода отвечают за питание (5V и GND) а два других (CLK и DIO) подключатся к любым цифровым портам. Для работы с четырехразрядным индикатором TM1637 потребуется установить библиотеку TM1637Display.h, которая позволяет выводить на индикатор не только числа и переменные, но и некоторые буквы латинского алфавита.
Скетч. Модуль TM1637 вывод цифр и текста на индикатор
#include "TM1637Display.h" TM1637Display display(3, 2); // CLC, DIO const uint8_t tire[] = { SEG_G // - }; const uint8_t C[] = { SEG_A | SEG_F | SEG_E | SEG_D // C }; const uint8_t DONE[] = { SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // d SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // O SEG_C | SEG_E | SEG_G, // n SEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E }; void setup() { display.setBrightness(4); // яркость от 0 до 7, true/false display.clear(); display.setSegments(tire, 1, 0); // -___ delay(200); display.setSegments(tire, 1, 1); // _-__ delay(200); display.setSegments(tire, 1, 2); // __-_ delay(200); display.setSegments(tire, 1, 3); // ___- delay(200); display.clear(); display.setSegments(DONE, 4, 0); // dOnE delay(500); display.clear(); } void loop() { display.showNumberDec(1, true, 1, 0); // 1___ delay(500); display.showNumberDec(2, true, 1, 1); // 12__ delay(500); display.showNumberDec(3, true, 1, 2); // 123_ delay(500); display.showNumberDec(4, true, 1, 3); // 1234 delay(500); display.clear(); display.showNumberDec(00, true, 2, 1); // _00_ delay(500); display.setSegments(C, 1, 3); // _00C delay(500); display.clear(); }
Пояснения к коду:
- символы и буквы создаются в программе с помощью const uint8_t [] = {};
- более подробно функции и команды библиотеки TM1637Display.h для 4 разрядного индикатора прописаны в конце этой записи.

В следующей программе на дисплей будет выводиться переменная c — значения с аналогового датчика освещенности, но можно использовать любой другой аналоговый датчик для микроконтроллера Ардуино. С помощью этого примера на модуле будет выводится трехзначное число, а на четвертом сегменте будет отображаться латинская буква «с«, которая была создана в программе с помощью массива.
Скетч. Модуль TM1637 вывод переменных на дисплей
#include "TM1637Display.h" TM1637Display display(3, 2); // CLC, DIO int c; const uint8_t c[] = { SEG_G | SEG_E | SEG_D // c }; void setup() { Serial.begin(9600); pinMode(A1, INPUT); display.setBrightness(4); // яркость от 0 до 7, true/false display.clear(); } void loop() { c = analogRead(A1); Serial.println(c); display.showNumberDec(c, false, 3, 0); display.setSegments(c, 1, 3); delay(500); }
Пояснения к коду:
- код рассчитан на трехзначное число, если переменная будет иметь четырехзначное значение, то следует изменить в программе строчку display.showNumberDec(c, false, 4, 0); и отказаться от вывода символа ‘c‘

Описание команд библиотеки TM1637Display.h
setBrightness(brightness, true/false) — функция может использоваться в любом месте кода и устанавливает яркость дисплея. Можно указать уровень brightness от 0 (самая низкая яркость) до 7 (самая высокая яркость). Второй параметр используется для включения / выключения дисплея, false означает выключение индикации.
clear() — команда для очистки дисплея
setSegments(segments, length, position) эту функцию используют для настройки отдельных сегментов, где segments — это массив (создается в начале с помощью const uint8_t). Аргумент length указывает количество символов в массиве, при сборке термометра на TM1637 использовано два символа — °C. position — задает позицию, с которой следует печатать символ на светодиодном экране.
showNumberDec(number, leading_zeros, length, position), где первый аргумент number — это число, которое отображается на индикаторе. Второй аргумент leading_zeros используется для включения (true) или выключения (false) начальных нулей. 10 без начальных нулей будет печататься как __10, а с начальными нулями как 0010. Третий и четвертый аргумент функции такие же, как в предыдущей функции.
showNumberDecEx(number, dots, leading_zeros, length, position) — эта функция позволяет управлять точками дисплея. И отличается от функции showNumberDec только аргументом dots. Для дисплеев с двоеточием следует указать 0b01000000 для включения двоеточия на индикаторе и 0b00000000 для выключения.
Заключение. ТМ1637 дисплей с двоеточием в центре — это самое простое решение для создания секундомера или часов реального времени. Сам модуль выполнен из четырех семисегментных индикаторов, каждый из которых состоит из семи светодиодов, обозначенных буквами от «a» до «g», которые загораются независимо от друг друга. При подключении платы не требуется никаких дополнительных резисторов.










скетч не работает. Выдает ошибку.
//в скетче с буковкой с напутано попробуй этот скетч
#include «TM1637Display.h»
TM1637Display display(3, 2); // CLC, DIO
int b;
const uint8_t c[] = {
SEG_G | SEG_E | SEG_D
}; // c
void setup() {
Serial.begin(9600);
pinMode(A1, INPUT);
display.setBrightness(4); // яркость от 0 до 7, true/false
display.clear();
}
void loop() {
b = analogRead(A1);
Serial.println(b);
display.showNumberDec(b, false, 3, 0);
display.setSegments(c, 1, 3);
delay(500);
}
Доброго времени не могу зажечь точки. Хотя дисплей проверял 0b10000000
А так все работает.
попробуй вместо —
display.showNumberDec(b, false, 3, 0);
поставить —
display.showNumberDecEx(b,0b01000000, false, 3, 0);