Files
IoTManager/src/modules/display/Oled128/Oled128.cpp

174 lines
4.6 KiB
C++
Raw Normal View History

2023-10-01 15:48:23 +02:00
#include "Global.h"
#include "classes/IoTItem.h"
#include <GyverOLED.h>
2023-10-01 18:27:58 +02:00
GyverOLED<SSD1306_128x64, OLED_BUFFER> oled;
// GyverOLED<SSD1306_128x32, OLED_BUFFER> oled;
// GyverOLED<SSD1306_128x32, OLED_NO_BUFFER> oled;
// GyverOLED<SSD1306_128x64, OLED_NO_BUFFER> oled;
// GyverOLED<SSD1306_128x64, OLED_BUFFER, OLED_SPI, 8, 7, 6> oled;
// GyverOLED<SSH1106_128x64> oled;
2023-10-01 15:48:23 +02:00
class Oled128 : public IoTItem {
private:
unsigned int _x;
unsigned int _y;
unsigned int _k;
int _shrift;
String _id2show;
String _descr;
String _descr1;
2023-10-01 18:27:58 +02:00
int _prevStrSize;
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
bool _isShow = true; // экран показывает
2023-10-01 15:48:23 +02:00
public:
Oled128(String parameters) : IoTItem(parameters) {
2023-10-01 18:27:58 +02:00
String addr, size, xy, k;
2023-10-01 15:48:23 +02:00
_prevStrSize = 0;
jsonRead(parameters, "addr", addr);
if (addr == "") {
2023-10-01 18:27:58 +02:00
// scanI2C();
2023-10-01 15:48:23 +02:00
return;
}
jsonRead(parameters, "coord", xy);
_x = selectFromMarkerToMarker(xy, ",", 0).toInt();
_y = selectFromMarkerToMarker(xy, ",", 1).toInt();
jsonRead(parameters, "descr", _descr);
jsonRead(parameters, "id2show", _id2show);
jsonRead(parameters, "descr1", _descr1);
2023-10-01 18:27:58 +02:00
// jsonRead(parameters, "scale", _k);
2023-10-01 15:48:23 +02:00
jsonRead(parameters, "shrift", _shrift);
// Wire.begin(2,0); // Инициализация шины I2C для модуля E01
2023-10-01 18:27:58 +02:00
oled.init(); // инициализация экрана
2023-10-01 15:48:23 +02:00
}
void doByInterval() {
2023-10-01 18:27:58 +02:00
printBlankStr(_prevStrSize);
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
String tmpStr = "";
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
// if (_descr != "none") tmpStr = _descr + " " + getItemValue(_id2show);
if (_descr != "none")
tmpStr = _descr + " " + getItemValue(_id2show) + " " + _descr1;
else
tmpStr = getItemValue(_id2show);
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
// oled.setScale(2);
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
oled.setScale(_shrift);
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
oled.setCursorXY(_x, _y);
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
oled.print(tmpStr);
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
oled.update();
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
_prevStrSize = tmpStr.length();
2023-10-01 15:48:23 +02:00
}
IoTValue execute(String command, std::vector<IoTValue> &param) { // будет возможным использовать, когда сценарии запустятся
if (command == "scroll") {
2023-10-01 18:27:58 +02:00
String tmpStr = "";
oled.clear();
uint32_t tmr = millis();
oled.autoPrintln(false);
int val = 128;
for (;;) {
// oled.clear(); // ЗАКОММЕНТИРУЙ, ЕСЛИ ВКЛЮЧЕН БУФЕР
// oled.setScale(2);
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
oled.setScale(_shrift);
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
oled.setCursor(val, _y);
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
oled.print(tmpStr);
2023-10-01 15:48:23 +02:00
oled.update();
2023-10-01 18:27:58 +02:00
val--;
if (millis() - tmr > 5000)
; // return;
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
_isShow = true;
}
2023-10-01 15:48:23 +02:00
}
2023-10-01 18:27:58 +02:00
else if (command == "stopscroll") {
2023-10-01 15:48:23 +02:00
_isShow = true;
2023-10-01 18:27:58 +02:00
// display->backlight();
// else if (command == "noDisplay") {
// display->noDisplay();
// _isShow = false;
} else if (command == "display") {
// display.display();
2023-10-01 15:48:23 +02:00
_isShow = true;
} else if (command == "toggle") {
if (_isShow) {
2023-10-01 18:27:58 +02:00
// display->noDisplay();
2023-10-01 15:48:23 +02:00
_isShow = false;
2023-10-01 18:27:58 +02:00
} else {
// display.display();
2023-10-01 15:48:23 +02:00
_isShow = true;
}
} else if (command == "x") {
if (param.size()) {
_x = param[0].valD;
}
} else if (command == "y") {
if (param.size()) {
_y = param[0].valD;
}
} else if (command == "descr") {
if (param.size()) {
_descr = param[0].valS;
}
} else if (command == "descr1") {
if (param.size()) {
_descr1 = param[0].valS;
2023-10-01 18:27:58 +02:00
}
2023-10-01 15:48:23 +02:00
} else if (command == "id2show") {
if (param.size()) {
_id2show = param[0].valS;
}
}
doByInterval();
return {};
}
2023-10-01 18:27:58 +02:00
// печать пустой строки нужной длинны для затирания предыдущего значения на экране
2023-10-01 15:48:23 +02:00
void printBlankStr(int strSize) {
String tmpStr = "";
for (int i = 0; i < strSize; i++) tmpStr += " ";
2023-10-01 18:27:58 +02:00
// oled.setScale(2);
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
oled.setScale(_shrift);
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
oled.setCursorXY(_x, _y);
2023-10-01 15:48:23 +02:00
2023-10-01 18:27:58 +02:00
oled.print(tmpStr);
2023-10-01 15:48:23 +02:00
}
~Oled128(){};
};
void *getAPI_Oled128(String subtype, String param) {
if (subtype == F("Oled128")) {
return new Oled128(param);
} else {
return nullptr;
}
}