Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/DetSimen/TM1637
биб-ка для китайского светодиодного модуля на 4 цифры
https://github.com/DetSimen/TM1637
Last synced: 2 months ago
JSON representation
биб-ка для китайского светодиодного модуля на 4 цифры
- Host: GitHub
- URL: https://github.com/DetSimen/TM1637
- Owner: DetSimen
- Created: 2019-12-03T06:34:47.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-08-24T03:34:38.000Z (over 1 year ago)
- Last Synced: 2024-08-02T15:47:05.243Z (5 months ago)
- Language: C++
- Size: 32.2 KB
- Stars: 7
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README
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;
}}; - можно спокойно выкинуть из кода