Четыре цифры с двоеточием — для часов, таймеров и счётчиков. Два провода, яркие сегменты, библиотека в одну строку.
Как работает
Микросхема TM1637 управляет четырьмя семисегментными разрядами и двоеточием. Протокол двухпроводной — CLK и DIO, — похож на I2C, но им не является: адреса нет, и на общую шину I2C модуль не вешают.
Библиотека TM1637Display: display.setBrightness(0..7), showNumberDec(число), showNumberDecEx(1234, 0b01000000, true) — число с двоеточием и ведущими нулями, то есть часы.
#include <TM1637Display.h>
TM1637Display display(18, 19); // такт, данные
void setup() {
// Яркость и включение — одна команда: нулевая яркость не гасит
// индикатор, для этого есть отдельный довод.
display.setBrightness(4);
display.clear();
}
void loop() {
// Число целиком: библиотека сама разложит его по разрядам.
display.showNumberDec(42);
delay(800);
// С ведущими нулями — второй довод. Для часов нужен именно он,
// иначе «09» показывается как « 9».
display.showNumberDec(42, true);
delay(800);
// Отрицательные помещаются, пока хватает разрядов под знак.
display.showNumberDec(-99);
delay(800);
// Больше 9999 не влезет: библиотека покажет младшие разряды, а не
// ошибку. Проверять диапазон — дело скетча.
display.showNumberDec(12345);
delay(800);
}
#include <TM1637Display.h>
// Индикатор на выводах 4 и 5. Любых: протокол похож на I2C — те же
// старт, стоп и подтверждение, — но адреса в нём нет, и разряды идут
// младшим вперёд. Поэтому на аппаратный контроллер I2C микросхему
// повесить нельзя, и библиотека тактирует выводы вручную.
//
// Отсюда практическое следствие: A4 и A5 остаются свободными для
// настоящей шины, и часы с датчиком собираются без конфликтов.
TM1637Display display(4, 5); // такт, данные
void setup() {
// Яркость и включение — одна команда. Нулевая яркость индикатор не
// гасит, для этого есть отдельный довод.
display.setBrightness(4);
display.clear();
}
void loop() {
unsigned long s = millis() / 1000;
// Минуты и секунды в четырёх разрядах: часы так и делают.
int shown = (s / 60) % 100 * 100 + s % 60;
// Второй довод — ведущие нули. Для часов нужен именно он, иначе
// «09» показывается как « 9». Третий — двоеточие посередине.
display.showNumberDecEx(shown, 0b01000000, true);
delay(200);
}
В железе
Выводы CLK и DIO — любые цифровые. На модуле стоят подтягивающие резисторы, отдельные не нужны.
Частые ошибки
Подключение к выводам I2C с библиотекой Wire — TM1637 не отвечает на адрес, это другой протокол.
Нет вызова setBrightness() — у части модулей по умолчанию индикатор погашен.
Двоеточие мигает вместе с цифрами, потому что всё перерисовывается каждый проход. Обновляйте экран только при смене значения.
Длинные провода (больше 30 см) без экрана — сбои в протоколе, цифры «мусорят».