Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Дисплеи на базе драйвера TM1637

TM1637

Библиотека 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

Существует несколько библиотек для работы с модулем. Разберём одну из них. Установим через менеджер библиотек вариант TM1637 Driver by AKJ. Это совсем свежая разработка за 2019 год (домашняя страница).

TM1637

При создании скетчей столкнулся с проблемой, что при яркости меньше 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

Следующая библиотека для экспериментов - TM1637 by Avishay Orpaz (GitHub).

TM1637

После установки доступен один тестовый пример. После запуска скетча выводятся самые разные примеры с дисплеем. Попробуйте разобраться самостоятельно.

Библиотека GyverTM1637

Самой удобной библиотекой является GyverTM1637, написанная на основе другой популярной библиотеки Grove_4Digital_Display.

Есть отдельная страница документации на русском языке с описанием функций, примерами, схемами и фотографиями. Там же найдёте ссылку на Гитхаб-проект.

Библиотека ставится вручную. В неё включены два примера. В примере GyverTM1637_demo_mini есть пара ошибок, из-за которых скетч не компилируется. Написал автору, надеюсь, что поправят этот момент.

Купить на AliExpress

Дополнительное чтение

7-сегментный индикатор

TinyAVR - ATtiny13, ATtiny25, ATtiny45, ATtiny85 - library for 7-segment display modules based on TM1637

Реклама