mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-26 22:22:16 +03:00
Добавляем модуль поддержки 7 сегментного экрана серии TM16XX
This commit is contained in:
86
src/modules/display/TM16XX/TM16XX.cpp
Normal file
86
src/modules/display/TM16XX/TM16XX.cpp
Normal file
@@ -0,0 +1,86 @@
|
||||
#include "Global.h"
|
||||
#include "classes/IoTItem.h"
|
||||
|
||||
#include <TM1637.h>
|
||||
#include <TM1638.h>
|
||||
#include <TM16xxDisplay.h>
|
||||
|
||||
|
||||
|
||||
class TM16XX : public IoTItem {
|
||||
private:
|
||||
TM16xxDisplay *_display = nullptr;
|
||||
TM16xx *_module = nullptr;
|
||||
std::vector<String> _ids2show;
|
||||
|
||||
public:
|
||||
TM16XX(String parameters) : IoTItem(parameters) {
|
||||
//jsonRead(parameters, "id2show", _id2show);
|
||||
|
||||
int DIO, CLK, STB, chip, numDigits, intensity;
|
||||
bool onoff;
|
||||
String id2show;
|
||||
jsonRead(parameters, "DIO", DIO);
|
||||
jsonRead(parameters, "CLK", CLK);
|
||||
jsonRead(parameters, "STB", STB);
|
||||
jsonRead(parameters, "chip", chip);
|
||||
jsonRead(parameters, "numDigits", numDigits);
|
||||
jsonRead(parameters, "intensity", intensity);
|
||||
jsonRead(parameters, "on", onoff);
|
||||
|
||||
jsonRead(parameters, "id2show", id2show);
|
||||
if (id2show != "") _ids2show = splitStr(id2show, ",");
|
||||
|
||||
if (chip == 1637) {
|
||||
_module = new TM1637(DIO, CLK, numDigits);
|
||||
} else if (chip == 1638) {
|
||||
_module = new TM1638(DIO, CLK, STB, numDigits);
|
||||
}
|
||||
_module->setupDisplay(onoff, intensity);
|
||||
_display = new TM16xxDisplay(_module, numDigits);
|
||||
}
|
||||
|
||||
void doByInterval() {
|
||||
|
||||
}
|
||||
|
||||
void setValue(const IoTValue& Value, bool genEvent = true) {
|
||||
if (_display == nullptr) return;
|
||||
|
||||
value = Value;
|
||||
_display->println(getValue());
|
||||
IoTItem::setValue(Value, genEvent);
|
||||
}
|
||||
|
||||
void onRegEvent(IoTItem* eventItem) {
|
||||
if (_display == nullptr) return;
|
||||
if (!eventItem || _ids2show.size() == 0) return;
|
||||
|
||||
if (strInVector(eventItem->getID(), _ids2show)) {
|
||||
if (_ids2show.size() == 1) {
|
||||
_display->println(eventItem->getValue());
|
||||
} else {
|
||||
_display->println();
|
||||
for (int i = 0; i < _ids2show.size(); i++) {
|
||||
IoTItem* item = findIoTItem(_ids2show[i]);
|
||||
if (item) {
|
||||
_display->print(item->getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
~TM16XX() {
|
||||
delete _display;
|
||||
delete _module;
|
||||
};
|
||||
};
|
||||
|
||||
void *getAPI_TM16XX(String subtype, String param) {
|
||||
if (subtype == F("TM16XX")) {
|
||||
return new TM16XX(param);
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
133
src/modules/display/TM16XX/modinfo.json
Normal file
133
src/modules/display/TM16XX/modinfo.json
Normal file
@@ -0,0 +1,133 @@
|
||||
{
|
||||
"menuSection": "Экраны",
|
||||
|
||||
"configItem": [{
|
||||
"global": 0,
|
||||
"name": "7 сегментный дисплей TM16XX",
|
||||
"type": "Writing",
|
||||
"subtype": "TM16XX",
|
||||
"id": "tm",
|
||||
"widget": "inputTxt",
|
||||
"page": "Экраны",
|
||||
"descr": "Экран",
|
||||
"round": 0,
|
||||
|
||||
"chip": 1637,
|
||||
"numDigits": 4,
|
||||
"DIO": "13",
|
||||
"CLK": "14",
|
||||
"STB": "12",
|
||||
"intensity": "5",
|
||||
"on": "1",
|
||||
"id2show": ""
|
||||
}],
|
||||
|
||||
"about": {
|
||||
"authorName": "Ilya Belyakov",
|
||||
"authorContact": "https://t.me/Biveraxe",
|
||||
"authorGit": "https://github.com/biveraxe",
|
||||
"specialThanks": "",
|
||||
"moduleName": "TM16XX",
|
||||
"moduleVersion": "1.0",
|
||||
"usedRam": {
|
||||
"esp32_4mb": 15,
|
||||
"esp8266_4mb": 15
|
||||
},
|
||||
"moduleDesc": "Позволяет выводить на 7 сегментный экран серии TM16XX (TM1637, TM1638). Может быть расширен до поддержки TM1616, TM1620, TM1628, TM1630, TM1637, TM1638, TM1640, TM1650, TM1652 и TM1668",
|
||||
"propInfo": {
|
||||
"int": "Период времени в секундах обновления информации на экране по конкретному элементу.",
|
||||
"chip": "Номер чипа TM1637 или TM1638",
|
||||
"numDigits": "Число цифр на дисплее",
|
||||
"DIO": "Номер пина данных",
|
||||
"CLK": "Номер пина часового сигнала",
|
||||
"intensity": "Яркость 0-7",
|
||||
"on": "Вкл/выкл при старте 1/0",
|
||||
"STB": "Номер пина стекового сигнала - не используется на определенных моделях",
|
||||
"id2show": "id элемента конфигурации для отображения. Если пустая строка, то дисплей использует свою переменную. Если указать несколько значений через запятую, то все данные будут последовательно выводиться в строку."
|
||||
},
|
||||
"funcInfo": [
|
||||
{
|
||||
"name": "noBacklight",
|
||||
"descr": "Выключить подсветку",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"name": "backlight",
|
||||
"descr": "Включить подсветку",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"name": "noDisplay",
|
||||
"descr": "Спрятать все данные",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"name": "display",
|
||||
"descr": "Показать данные на экране",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"name": "toggle",
|
||||
"descr": "Переключает видимость значений на экране",
|
||||
"params": []
|
||||
},
|
||||
{
|
||||
"name": "x",
|
||||
"descr": "Устанавливает первую координату",
|
||||
"params": ["Номер строки первого символа"]
|
||||
},
|
||||
{
|
||||
"name": "y",
|
||||
"descr": "Устанавливает вторую координату",
|
||||
"params": ["Номер столбца первого символа"]
|
||||
},
|
||||
{
|
||||
"name": "descr",
|
||||
"descr": "Задает приставку слева от значения",
|
||||
"params": ["Строка"]
|
||||
},
|
||||
{
|
||||
"name": "id2show",
|
||||
"descr": "Задает ИД элемента, значение которого хотим отображать на экране",
|
||||
"params": ["Имя элемента конфигурации"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
"defActive": true,
|
||||
|
||||
"usedLibs": {
|
||||
"esp32_4mb": [
|
||||
"https://github.com/maxint-rd/TM16xx",
|
||||
"adafruit/Adafruit GFX Library @ ^1.11.5"
|
||||
],
|
||||
"esp8266_4mb": [
|
||||
"https://github.com/maxint-rd/TM16xx",
|
||||
"adafruit/Adafruit GFX Library @ ^1.11.5"
|
||||
],
|
||||
"esp8266_1mb": [
|
||||
"https://github.com/maxint-rd/TM16xx",
|
||||
"adafruit/Adafruit GFX Library @ ^1.11.5"
|
||||
],
|
||||
"esp8266_1mb_ota": [
|
||||
"https://github.com/maxint-rd/TM16xx",
|
||||
"adafruit/Adafruit GFX Library @ ^1.11.5"
|
||||
],
|
||||
"esp8285_1mb": [
|
||||
"https://github.com/maxint-rd/TM16xx",
|
||||
"adafruit/Adafruit GFX Library @ ^1.11.5"
|
||||
],
|
||||
"esp8285_1mb_ota": [
|
||||
"https://github.com/maxint-rd/TM16xx",
|
||||
"adafruit/Adafruit GFX Library @ ^1.11.5"
|
||||
],
|
||||
"esp8266_2mb": [
|
||||
"https://github.com/maxint-rd/TM16xx",
|
||||
"adafruit/Adafruit GFX Library @ ^1.11.5"
|
||||
],
|
||||
"esp8266_2mb_ota": [
|
||||
"https://github.com/maxint-rd/TM16xx",
|
||||
"adafruit/Adafruit GFX Library @ ^1.11.5"
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user