Симулятор TM1637 онлайн: индикатор без железа
Четырёхразрядный индикатор на TM1637 стоит дешевле булки хлеба, но чтобы увидеть на нём свой код, нужен сам модуль, четыре провода и десять минут возни. Настройка порогов, проверка двоеточия, поиск опечатки в showNumberDec — всё это можно сделать до доставки модуля: в браузере индикатор рисуется карточкой, а скетч исполняется по-настоящему.
Карточка «Дисплей TM1637» лежит в палитре «Макетка» нашего симулятора: два пина CLK и DIO подписаны прямо на карточке, и как только скетч создаёт TM1637Display, дисплей оживает — цифры, двоеточие и яркость меняются вживую, а в мониторе порта появляется строка «[TM1637 подключён на CLK/DIO]». Ниже — что именно исполняет рантайм, скетч таймера 25:00 и честная граница между браузером и живым модулем.
Как дисплей появляется в симуляторе
- Возьмите карточку «Дисплей TM1637» из палитры «Макетка» — или ничего не берите: скетч с TM1637Display(CLK, DIO) подключает дисплей сам, номера пинов берутся из конструктора.
- На карточке горят четыре разряда и двоеточие между вторым и третьим — ровно то, что нарисовал скетч.
- Пины CLK и DIO кликабельны: можно перепроводить на другие ножки и сравнивать с конструктором.
- Первая команда дисплея печатает в Serial строку «[TM1637 подключён на CLK/DIO]» — удобно убедиться, что скетч дошёл до вывода.
Какие методы TM1637Display исполняет рантайм
| Метод библиотеки | Аргументы | Что увидите на карточке |
|---|---|---|
| setBrightness(0..7) | уровень, флаг вкл/выкл | яркость меняется; в симуляторе 0 полностью гасит экран |
| showNumberDec | число, ведущие нули, длина, позиция | цифры прижаты вправо, минус вразрез, больше 9999 — младшие четыре |
| showNumberDecEx | то же + бит точек 0x40 | двоеточие между второй и третьей цифрой — штатный режим часов |
| setSegments | массив сырых байтов | произвольные символы: минус 0x40, свои глифы по битам сегментов |
| clear | — | все разряды гаснут, двоеточие тоже |
Шестнадцатеричные цифры A–F рантайм тоже рисует: showNumberHex(0xABCD) даст «ABCD», а showNumberHex(0x1F, true) — «00:1F» с двоеточием. Отличие от живой библиотеки честное: там showNumberHex принимает только байт — потолок 0xFF, старшие байты уходят молча; в симуляторе число режется до четырёх последних hex-разрядов. Двоеточие — это бит 0x40 в showNumberDecEx, и каждый кадр его нужно ставить заново: обычный showNumberDec затирает разделитель, как и на живом модуле.
Скетч: таймер 25:00 с мигающим двоеточием
Классическая задача индикатора — таймер обратного отсчёта. Счёт ведётся в миллисах без delay, минут и секунд достаточно четырёх разрядов: 25:00 печатается числом 2500 с двоеточием. Вставьте скетч в симулятор и нажмите «Запуск»: цифры на карточке поползут вниз, двоеточие мигает раз в секунду, по нулю дисплей погаснет.
#include <TM1637Display.h>TM1637Display disp(4, 5); // CLK на D4, DIO на D5 unsigned long lastTick = 0;int sekundy = 25 * 60; // 25 минутbool colon = true; void setup() { Serial.begin(9600); disp.setBrightness(3); // 0..7; для настольного таймера хватает 3} void loop() { if (millis() - lastTick >= 500) { lastTick = millis(); colon = !colon; // полсекунды горит, полсекунды гаснет if (!colon) sekundy--; // минутный тик раз в секунду if (sekundy <= 0) { disp.clear(); Serial.println("vremya vyshlo"); while (true) {} // стоим на месте — таймер закончился } int mmss = (sekundy / 60) * 100 + sekundy % 60; disp.showNumberDecEx(mmss, colon ? 0x40 : 0, true, 4, 0); }}В мониторе порта при нуле появится «vremya vyshlo», а карточка погаснет — это clear(). Поменяйте яркость на 7 и сравните с 1: на живом модуле разница читается так же, только физически — 32 сегмента на полной яркости тянут около 80 мА, поэтому для батарейных часов ставят 1-2.
Часы на TM1637 с DS3231: что проверять в браузере
Связка «DS3231 даёт время — TM1637 рисует hh:mm» собирается в две строки: rtc.now() отдаёт часы и минуты, дальше showNumberDecEx(hh * 100 + mm, 0x40, true, 4, 0). RTC-модуль в рантайме тоже живёт: DateTime считается от времени машины, так что ход часов после begin проверяется прямо в браузере. На живой плате DS3231 забирает точность себе: кварц Arduino уплывает на минуты за неделю, модуль с термокомпенсацией — на секунды за год. Полный проект с выбором табло разобран в лендинге про часы на Arduino, а тонкости RTC — в обзоре модуля DS3231.