Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/DetSimen/TM1637

биб-ка для китайского светодиодного модуля на 4 цифры
https://github.com/DetSimen/TM1637

Last synced: 2 months ago
JSON representation

биб-ка для китайского светодиодного модуля на 4 цифры

Awesome Lists containing this project

README

        


Небольшая библиотека для китайских четырехзначных светодиодных модулей на TM1637. Типа такого
https://ru.aliexpress.com/item/32797695630.html с десятичными точками или такого
https://ru.aliexpress.com/item/32797703570.html с двоеточием.

На первом удобно делать всякие вольтметры, а на втором - погодные станции с часами :)

Тип дисплея описан как

enum class enTM1637Type : bool { Number = false, Time = true }; // перечисление: тип дисплея числа/время

в конструкторе, наряду с другими параметрами, указывается тип подключенного дисплея, часы или числа.

TM1637 Display(ClockPin, DataPin, DisplayType);

Например,

TM1637 Display(11, 10, enTM1637Type::Number); для индикатора с точками
TM1637 Display(11, 10, enTM1637Type::Time); для индикатора с двоеточием

Тип дисплея в конструкторе можно и не указывать, тогда автоматом будет считаться, что подключен модуль с двоеточием, для часов.

TM1637 Display(11, 10); подключен индикатор с двоеточием

Библиотека умеет выводить строки функцией Print с параметром const char *. Естесственно, если строка длинная, из неё выводятся только первые 4 символа, остальные отбрасываются. Но иногда и 4 символа могут оказаться полезными

Display.Print("Err5");

когда, например надо сигнализировать об ошибке, а под рукой нету других экранчиков

символы, которые может вывести библиотека описаны в массиве, хранящимся в PROGMEM, чтоб не занимать драгоценное ОЗУ

static const T1637SegmentData SegmentsData[] PROGMEM {
{ '0',0x3F },
{ '1',0x06 },
{ '2',0x5B },
{ '3',0x4F },
{ '4',0x66 },
{ '5',0x6D },
{ '6',0x7D },
{ '7',0x07 },
{ '8',0x7F },
{ '9',0x6F },
{ 'A',0x77 },
{ 'b',0x7c },
{ 'C',0x39 },
{ 'd',0x5E },
{ 'E',0x79 },
{ 'F',0x71 },
{ ' ',0x00 },
{ '-',0x40 },
{ '*',0x63 }, // значок градуса, т.е пишем -25* выведется -25 и значок градуса
{ '_',0x08 },
{ 'r',0x50 },
{ 'H',0x76 },
{ 'I',0x06 },
{ 'h',0x74 },
{ 'L',0x38 },
{ 'n',0x54 },
{ 'o',0x5C },
{ 't',0x78 },
{ 'O',0x3F },
{ 'P',0x73 },
{ 'S',0x6D },
{ 'U',0x3E },
{ 'u',0x1C },
{ 'Y',0x6E }

};
Таблицу можно самому изменять/дополнять своими экзотическими буквами инопланетных словарей, больше нигде ничего править не нужно, только изменить/добавить строчку в массив по аналогии с имеющимися парой "символ"-"его матрица" в проекции на сегменты.

Можно вывести знаковое двухбайтное целое функцией Print(Num);

Display.Print(-50); или

int val = analogRead(A0);
Display.Print(val);

естественно, если число больше 4 знаков, оно обрежется, т.е 32767 вывести не получится, выведется 3276

Еще функцией Print() можно вывести число с плавающей точкой, но, естественно, тоже с ограничением в первых 4 цифры. Если тип дисплея - числовой, то запятая выведется в правильном месте, если дисплей для времени, то точек в нем нет, поэтому на него нецелые числа выводить бессмысленно.

Display(PI); выведет 3.141
Display(1.5); выведет 1.5

Числа по умолчанию выравниваются по правому краю дисплея, а строки - по левому

Функцией PrintTime(часы,минуты) можно вывести время с ведущими нулями и по правильным сторонам от двоеточия

Display.PrintTime(Clock.GetHours(), Clock.GetMinutes()); или
Display.PrintTime(9,6); выведет 09:06

Функцией PrintDeg(int8_t Temperature); можно быстро вывести температуру со значком градуса на конце

Display.PrintDeg(-15); выведет -15*

печать одного символа в определенном месте экрана
APosition - в какой позиции печатать 0..NUM_DIGITS-1
ASymbol - символ, который надо напечатать
символ сразу же перекодируется и выводится
ничего больше вызывать не надо

void PrintAt(const uint8_t APosition, const char ASymbol);

Функцией ToggleColon() удобно пользоваться когда делаешь часы, она переключает двоеточие с вкл на выкл и обратно, можно самому не запоминать нужно ли сейчас гасить или зажигать двоеточию, функция сама разберется, главное её вызвать вовремя.

Display.ToggleColon();

Точку/двоеточие можно включить/выключить вручную, функцией ShowPoint() с параметром true/false.

Display.ShowPoint(true); включить точку
Display.ShowPoint(false); выключить точку

Яркость свечения устанавливается функцией

Display.SetBrightness(0..7); c параметром в виде числа от 0 (минимальная яркость) до 7 (макс. яркость)

Ну и для очистки - есть функция Clear(), вызываешь и дисплей становится тёмный и страшный, как моя жызнь.

Display.Clear();

Список публичных функций, которые можно вызывать снаружи, внимательно читаем описания к ним

// канструктор. Принимает 2 пина (обязательно) и тип дисплея (необязательно)
// AClockPin - номер пина для тактирования (вывод CLK на дисплейчике)
// ADataPin - номер пина для данных (вывод DAT на дисплейчике)
// ADisplayType - тип дисплея, для чисел или для времени (с точками/двоеточием)
// по умолчанию - выбран дисплей с двоеточием (для времени)
//
TM1637(uint8_t AClockPin, uint8_t ADataPin, enTM1637Type ADisplayType = enTM1637Type::Time);

// печатает первые NUM_DIGITS символов переданной строки
// с выравниванием. По умолчанию, выравнивание - влево
//
void Print(const char *AString, const enTM1637Align AAlign = enTM1637Align::Left);

// печатает двухбайтовое целое число со знаком
// по основанию ARadix (по умолчанию 10)
// число выравнивается вправо
// печатается не более NUM_DIGITS начальных цыфр числа, включая знак
//
void Print(const int ANumber, const uint8_t ARadix = 10);

// печать дробных чисел со знаком.
// c точностью APrecision знаков после запятой, по умолчанию - 2
// Если число длинное - печатаются первые NUM_DIGITS символов
// Если индекс точки находится в пределах 0 - NUM_DIGITS то она тоже печатается
//
void Print(const double AValue, const uint8_t APrecision = 2);

// для удобства печати времени, передаёшь часы/минуты, печатает
// на своих местах, слева и справа от двоеточия
//
void PrintTime(const uint8_t AHours, const uint8_t AMinutes);

// для удобства. Передаешь число (со знаком) - печатает его и символ градуса за ним
//
void PrintDeg(const int8_t ADegrees);

// очистка дисплея
//
void Clear(void);

// устанавливает яркость дисплея от 0 до 7. 7 - самый яркий.
//
void SetBrightness(const uint8_t AValue);

// включает/выключает показ десятичной точки
//
void ShowPoint(const bool APointVisible);

// переключает точку. если была включена - выключает и наоборот
// удобно мигать двоеточием в часах, не надо самому запоминать состояние
//
void ToggleColon(void);

// печать символа в определенном месте экрана
// APosition - в какой позиции печатать 0..NUM_DIGITS-1
// ASymbol - символ, который надо напечатать
// символ сразу же перекодируется и выводится
// ничего больше вызывать не надо
//
void PrintAt(const uint8_t APosition, const char ASymbol);

// аналогично Print(const char *AString)
// только оператором, чтоб можно было писать
// tm1637<<"Err2";
//
const TM1637 &operator <<(const char *AString) {
OutString(AString);
return *this;
}

}; - можно спокойно выкинуть из кода