From 762ed256690227c13a8c222ae8bec76dc41343ff Mon Sep 17 00:00:00 2001 From: Jaro Date: Tue, 30 Nov 2021 21:23:33 +0100 Subject: [PATCH] Cleaned added max loops esc, clear esc --- src/Scroller.cpp | 25 +++++++++++++++++-------- src/Scroller.h | 8 ++++---- src/main.cpp | 8 +++----- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/Scroller.cpp b/src/Scroller.cpp index 5df0729..90d40ed 100644 --- a/src/Scroller.cpp +++ b/src/Scroller.cpp @@ -24,17 +24,17 @@ eDict_t Escapes[] = { {"\u001b[1m","bold",eDict_t::CONTROL, BOLD}, {"\u001b[4m","underline",eDict_t::CONTROL, UNDERLINE}, {"\u001b[7m","reversed",eDict_t::CONTROL, REVERSED}, + {"\u001b[2J","clear",eDict_t::CONTROL, CLEAR_ALL}, + {"\u001b[97;%dm","loops",eDict_t::CONTOL_WITH_PARAM, LOOPS}, {"\u001b[98;%dm","speed",eDict_t::CONTOL_WITH_PARAM, SPEED}, {"\u001b[99;%dm","timeout",eDict_t::CONTOL_WITH_PARAM, TIMEOUT}, }; SimpleMap* escMap; -Scroller::Scroller(int max_loops) +Scroller::Scroller() { - _max_loops = max_loops; - _act_setting = _setting; - + _act_setting = _setting; } void Scroller::init() @@ -81,6 +81,8 @@ bool Scroller::decodeEscape2Setting(String es) if (e->tt == eDict_t::CONTROL) { switch (e->control) { + case CLEAR_ALL: + DeleteLines(); case RESET_ALL: _act_setting = _setting; break; @@ -93,7 +95,6 @@ bool Scroller::decodeEscape2Setting(String es) case REVERSED: _act_setting.reversed = true; break; - } } if (e->tt == eDict_t::CONTOL_WITH_PARAM) @@ -107,6 +108,9 @@ bool Scroller::decodeEscape2Setting(String es) case TIMEOUT: _act_setting.timeout = param; break; + case LOOPS: + _act_setting.loops = param; + break; } } if (e->tt == eDict_t::COLOR) _act_setting.color = e->color; @@ -157,6 +161,7 @@ bool Scroller::ReplaceLine(int number,String line) void Scroller::DeleteLines() { _nlines = 0; + _lp = 0; } void Scroller::Show(int _x,int _y,String line) @@ -166,7 +171,9 @@ void Scroller::Show(int _x,int _y,String line) for (int l=0;l < line.length();l++) { if (line.charAt(l) == '\u001b') { - int ee = line.indexOf('m',l); + int ee; + for (ee = l+2; (line.charAt(ee) >= '0' && line.charAt(ee) <= '9') || line.charAt(ee) == ';'; ee++ ) + ; decodeEscape2Setting(line.substring(l,ee+1)); l = ee; continue; @@ -192,7 +199,9 @@ String Scroller::LineUnescaped(String line) String rawLine = ""; for (int l=0;l < line.length();l++) { if (line.charAt(l) == '\u001b') { - int ee = line.indexOf('m',l); + int ee; + for (ee = l+2; (line.charAt(ee) >= '0' && line.charAt(ee) <= '9') || line.charAt(ee) == ';'; ee++ ) + ; l = ee; continue; } @@ -276,7 +285,7 @@ void Scroller::loop(ulong tick) _delayTicks = 50; } - if (TimesScrolled() == _max_loops) { + if (TimesScrolled() == _act_setting.loops) { Serial.println("MAX LOOP"); TurnOff(); return; diff --git a/src/Scroller.h b/src/Scroller.h index 5918077..29df8c8 100644 --- a/src/Scroller.h +++ b/src/Scroller.h @@ -20,10 +20,11 @@ typedef struct { } ; } eDict_t; -enum {RESET_ALL,BOLD, UNDERLINE=4,REVERSED=7, SPEED, TIMEOUT}; +enum {RESET_ALL,CLEAR_ALL, BOLD, UNDERLINE=4,REVERSED=7, SPEED, TIMEOUT, LOOPS}; struct Setting { + uint8_t loops; uint32_t color; uint32_t bcolor; uint8_t brightness; @@ -40,7 +41,7 @@ private: /* data */ const static int MAX_LINES = 100; String _Lines[MAX_LINES]; - Setting _setting = { CRGB::Red, CRGB::Black, 10, 3000, 100, false, false, false}; // default setting + Setting _setting = {1, CRGB::Red, CRGB::Black, 10, 3000, 100, false, false, false}; // default setting Setting _act_setting; // actual setting int _nlines = 0; int _lp = 0; @@ -49,12 +50,11 @@ private: int _nscrolled = 0; int _x = 0, _y = 0; FastLED_NeoMatrix *_matrix; - int _max_loops; bool _off = true; public: - Scroller(int max_loops); + Scroller(); bool TurnOn(); void init(); diff --git a/src/main.cpp b/src/main.cpp index 69a7abe..343b7ed 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -31,9 +31,7 @@ Adafruit_BME280 bme; // I2C -#define COMMAND_PARAMETER_LENGTH 30 -#define MAX_TIMES_SCROLLED 5 -#define PIN 13 +#define MATRIX_PIN 13 WiFiClient espClient; PubSubClient client(espClient); @@ -72,7 +70,7 @@ NTP ntp(ntpUDP); TimeZone DateTime; -Scroller scroller(MAX_TIMES_SCROLLED); +Scroller scroller; unsigned long last_millis; bool showTextMqtt = false; @@ -105,7 +103,7 @@ void setup_matrix() matrix = new FastLED_NeoMatrix(matrixleds, lcdw, lcdh, 1, 1, NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG ); - FastLED.addLeds(matrixleds, NUMMATRIX); + FastLED.addLeds(matrixleds, NUMMATRIX); matrix->begin(); matrix->setTextWrap(false); matrix->setBrightness(20);