Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Библиотека TM1637 Driver by AKJ
TM1637 by Avishay Orpaz
Библиотека GyverTM1637
Модуль представляет собой небольшую плату, на которой установлен LED четырёхразрядный семисегментный LED-дисплей на основе I2C-драйвера TM1637. Существует несколько модификаций модуля. Например, есть модули с часовым разделителем в виде двоеточия и их удобно использовать как часы. Есть модули с разделителем в виде точки у каждого разряда. Могут встречаться и 8-разрядные версии.
Купить на AliExpress
Подключается модуль с помощью четырёх контактов по интерфейсу I2C. Два из них отвечают за питание и подключаются к выводам 5V и GND; выводы CLK и DIO подключаются к цифровым выводам платы.
TM1637 | Arduino
----------------
CLK | D
DIO | D
VCC | 5V
GND | GND
Существует несколько библиотек для работы с модулем. Разберём одну из них. Установим через менеджер библиотек вариант TM1637 Driver by AKJ. Это совсем свежая разработка за 2019 год (домашняя страница).
При создании скетчей столкнулся с проблемой, что при яркости меньше 5 дисплей "дурил" и показывал кривые результаты.
В состав библиотеки входят два примера - Clock и Counter. Пример Clock выводит время 12:00 (12 минут 00 секунд) и затем увеличивает до 12:30. В примере Counter выводится число -100 и увеличивается на единицу.
Напишем свой пример для знакомства. Минимальный код для вывода четырёхзначного числа. В моём случае пришлось менять выводы 2 и 3 местами, иначе модуль не включался. Поэтому я подправил код, возможно вам так делать не придётся.
#include <TM1637.h>
// У меня заработало в таком варианте. У вас может быть наоборот
// Pin 2 - > CLK
// Pin 3 - > DIO
TM1637 tm1637(2, 3);
void setup()
{
tm1637.init(); // инициализируем библиотеку
tm1637.setBrightness(5); // устанавливаем яркость дисплея
}
void loop()
{
// выводим число
tm1637.dispNumber(2020);
}
Функция setBrightness() устанавливает яркость дисплея от 0 (выключен) до 8 (самый яркий).
Поменять яркость можно через changeBrightness().
...
void loop()
{
tm1637.dispNumber(2020);
delay(1000);
tm1637.changeBrightness(3);
delay(1000);
tm1637.changeBrightness(5);
delay(1000);
tm1637.changeBrightness(7);
}
Включение и выключение двоеточия регулируется вызовом функции switchColon(). Заставим двоеточие мигать каждую секунду.
...
void loop()
{
tm1637.dispNumber(2020);
delay(1000);
tm1637.switchColon();
}
Для вывода отдельной цифры можно вызывать функцию display(uint8_t reg_address, uint8_t value). В первом параметре указываем номер разряда (отсчёт от 0), во втором - нужную цифру. Напишем простой счётчик, где будет меняться последняя четвёртая цифра от 0 до 9 каждую секунду.
#include <TM1637.h>
// Instantiation and pins configurations
// Pin 2 - > CLK
// Pin 3 - > DIO
TM1637 tm1637(2, 3);
void setup()
{
tm1637.init();
tm1637.setBrightness(5);
}
void loop()
{
tm1637.dispNumber(0000);
for (int number4 = 0; number4 < 9; number4++) {
delay(1000);
tm1637.display(3, number4);
}
}
В целом библиотека выглядит скудной и не очень интересной.
Следующая библиотека для экспериментов - TM1637 by Avishay Orpaz (GitHub).
После установки доступен один тестовый пример. После запуска скетча выводятся самые разные примеры с дисплеем. Попробуйте разобраться самостоятельно.
Самой удобной библиотекой является GyverTM1637, написанная на основе другой популярной библиотеки Grove_4Digital_Display.
Есть отдельная страница документации на русском языке с описанием функций, примерами, схемами и фотографиями. Там же найдёте ссылку на Гитхаб-проект.
Библиотека ставится вручную. В неё включены два примера. В примере GyverTM1637_demo_mini есть пара ошибок, из-за которых скетч не компилируется. Написал автору, надеюсь, что поправят этот момент.
Купить на AliExpress