TM1637
Вставка
- Опубліковано 2 жов 2024
- Модуль отображения информации на 4 семисегментных индикатора и символ двоеточия на микросхеме TM1637.
Даташит на TM1637: drive.google.c...
Пример использования модуля: drive.google.c...
Скетч NetTime для ESP8266: drive.google.c...
Скетч для ESP8266 и DHT11: drive.google.c...
9:13 - на всякий случай проверил календарь.. )
Здравствуйте уважаемый Автор проекта, очень понравилось Ваше видео!
Сделайте пожалуйста видео о том как вывести в сериал и на TM1637 дисплей данные в виде float.
Задача такова, вывести значение float что-бы значение нулей перед запятой можно было в коде менять от 0.00 до 00000.00 (для вывода в сериал) и на TM1637, то есть выводить разрядность не заполненных данными пустых нолей перед запятой, расскажите пожалуйста об этом подробнее как с этим работать в коде. вообщем нужно заполнять нулями сегменты если они ещё не заполнены данными. как это правильно сделать?
Заранее благодарен.
Здравствуйте.
Разочарую Вас, но подавляющее большинство дисплеев на TM1637 не имеют десятичных точек в разрядах, так что отобразить вещественные числа на них не получится, только целые или время. Я же даже дату извращался через дефисы выводить.
С сериалом все просто - формируете нужное строковое представление числа хотя бы функцией sprintf и выводите.
Поясните пожалуйста, как работает этот кусок кода?
if (start || (++startPos > datalen - 4))
startPos = 0;
tm.display((uint32_t)data[startPos] | ((uint32_t)data[startPos + 1]
В массиве data лежит анимация. Соответственно, передвигаем по массиву "окно" из 4-х байт в виде длинного целого и содержимое этого окна выводим на экран. Поскольку порядок байт для экрана не совпадает с порядком хранения в массиве, то переворачиваем байты перед передачей экрану.
Можно ли в этом модуле поменять индикатор на более крупный, подключив его через транзисторы или какой нибудь драйвер нагрузок, например ULN2003
А чем вам MAX7219 не угодил? Зачем из копеечного модуля еще какого-то Франкенштейна городить?
Спасибо!
спасибо за ответ, а как будет выглядеть вариант без плавающей точки в разряде но с нолями?
Приведете пример если не сложно?
Спасибо!
Очередной разряд = младший разряд;
Цикл по количеству используемых цифр;
Выводим в очередной разряд Число % 10;
Число /= 10;
Очередной разряд сдвигаем влево;
Конец цикла.
Очень благодарен, спасибо, попробуем воплотить в жизнь ;)
Написал свой скетч на основе стандартного примера NTPClient, добавил только к ему вывод даты, а так же что бы время тикало даже оффлайн, на основе millis(), так вот почему оно не точно в оффлайне тикает, за минуты 2 начинает отставать уже на сек 3-4? Как такое может быть? Пускай даже в следующий раз оно обновляется позже (зависит от др. кода что постоянно вертится в loop) чем через заданных 10 сек но, все равно интервал ведь на основе millis() так же меняется и должно четко прибавляться к unix time секунды.
У меня расхождение было 1.5 сек. за сутки.
Плохое питание? Глючный кварц в модуле?
да врят ли в питании дело, только в кварце разве что. Это я на плате NodeMCU все делаю, у меня в др. модуле esp-12E сделаны таймеры на основе millis() (без часов NTP, устанавливается периуд с точностью от 1 сек до 24 часов ) и как то все так четко работает - перед сном считаю сколько осталось спать, выставляю таймер, что бы после будильника через минутки 3 включилась розетка в которою воткнут wi-fi роутар и все четко срабатывает. :) Вот хотелось бы сделать на основе часов тоже самое, но как то стремно с такой не точностью :)
У меня модули Weemos D1 mini, причем только один родной, остальные клоны. И вроде нареканий на них не имею. Хотя DS3231 за 40 руб. да еще и с 4 кБ EEPROM с ресурсом в миллион стираний полагаю оптимальным вариантом.
Все я кожись понял в чем проблема, это кривое преоброзование интервала из миллисекунд в секунды. У меня миллисекунды делятся на 1000, но результат может быть не целочисленным.
и часть миллисекунд теряется. Что то нужно с этим делать, остатком миллисекунд, куда его пришить то к unix time?