From 6340186e153c2220080bbd3513738d564491af0c Mon Sep 17 00:00:00 2001 From: Cole Deck Date: Thu, 14 Mar 2019 19:18:31 -0500 Subject: [PATCH] create faster version of the console text method --- Greenhouse.ino | 128 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 88 insertions(+), 40 deletions(-) diff --git a/Greenhouse.ino b/Greenhouse.ino index a6c88a4..f9f9bca 100644 --- a/Greenhouse.ino +++ b/Greenhouse.ino @@ -121,6 +121,8 @@ boolean debug = true; boolean ps3 = false; boolean upd; boolean s1, s2, s3, s4; +String outtext2 = ""; +int linecount = 0; void setup(void) { Serial.begin(9600); @@ -143,49 +145,49 @@ void setup(void) { //tft.fillRect(0, 0, 320, 23, ILI9341_BLACK); } - printConsoleText("Booting GreenhouseOS...||"); + printFastCText("Booting GreenhouseOS...||"); delay(250); if(!didDraw) { - printConsoleText("[FAILED] SD Card not detected!"); + printFastCText("[FAILED] SD Card not detected!"); } - printConsoleText("[ OK ] Enabling powersaving features... "); // 53 characters wide + printFastCText("[ OK ] Enabling powersaving features... "); // 53 characters wide example enablePS(3); upd = true; if (!soil1.begin(0x36)) { - printConsoleText("[ INFO ] Soil sensor 1 unplugged."); + printFastCText("[ INFO ] Soil sensor 1 unplugged."); s1 = false; } else { String out = "[ OK ] Soil sensor 1 connected. Version: "; out += (soil1.getVersion(), HEX); - printConsoleText(out); + printFastCText(out); s1 = true; } if (!soil2.begin(0x37)) { - printConsoleText("[ INFO ] Soil sensor 2 unplugged."); + printFastCText("[ INFO ] Soil sensor 2 unplugged."); s2 = false; } else { String out = "[ OK ] Soil sensor 2 connected. Version: "; out += (soil2.getVersion(), HEX); - printConsoleText(out); + printFastCText(out); s2 = true; } if (!soil3.begin(0x38)) { - printConsoleText("[ INFO ] Soil sensor 3 unplugged."); + printFastCText("[ INFO ] Soil sensor 3 unplugged."); s3 = false; } else { String out = "[ OK ] Soil sensor 3 connected. Version: "; out += (soil3.getVersion(), HEX); - printConsoleText(out); + printFastCText(out); s3 = true; } if (!soil4.begin(0x39)) { - printConsoleText("[ INFO ] Soil sensor 4 unplugged."); + printFastCText("[ INFO ] Soil sensor 4 unplugged."); s4 = false; } else { String out = "[ OK ] Soil sensor 4 connected. Version: "; out += (soil4.getVersion(), HEX); - printConsoleText(out); + printFastCText(out); s4 = true; } getMoisture(); @@ -197,7 +199,13 @@ void loop(void) { } if(Serial.available() > 0) { String txtin = "Serial: " + Serial.readString(); - printConsoleText(txtin.substring(0, txtin.length() - 1)); + int x = 0; + while(txtin.length() > 53) { + printFastCText(txtin.substring(0, 53); + txtin = txtin.substring(53); + } + printFastCText(txtin.substring(0, txtin.length() - 1)); + } unsigned long mil = millis(); /*String tmp = "["; @@ -411,7 +419,7 @@ void getMoisture() { int sm1 = map(soil1.touchRead(0), 0, 1023, 0, 100); if(sm1 > 6000 && t1 < 1) { s1 = false; - printConsoleText("[ INFO ] Soil sensor 1 unplugged."); + printFastCText("[ INFO ] Soil sensor 1 unplugged."); } else { printS1(t1, sm1); } @@ -419,7 +427,7 @@ void getMoisture() { if (soil1.begin(0x36)) { clearLog(); s1 = true; - printConsoleText("[ INFO ] Soil sensor 1 connected."); + printFastCText("[ INFO ] Soil sensor 1 connected."); float t1 = soil1.getTemp(); int sm1 = map(soil1.touchRead(0), 0, 1023, 0, 100); printS1(t1, sm1); @@ -431,7 +439,7 @@ void getMoisture() { int sm2 = map(soil2.touchRead(0), 0, 1023, 0, 100); if(sm2 > 6000 && t2 < 1) { s2 = false; - printConsoleText("[ INFO ] Soil sensor 2 unplugged."); + printFastCText("[ INFO ] Soil sensor 2 unplugged."); } else { printS2(t2, sm2); } @@ -439,7 +447,7 @@ void getMoisture() { if (soil2.begin(0x37)) { clearLog(); s2 = true; - printConsoleText("[ INFO ] Soil sensor 2 connected."); + printFastCText("[ INFO ] Soil sensor 2 connected."); float t2 = soil2.getTemp(); int sm2 = map(soil2.touchRead(0), 0, 1023, 0, 100); printS2(t2, sm2); @@ -451,7 +459,7 @@ void getMoisture() { int sm3 = map(soil3.touchRead(0), 0, 1023, 0, 100); if(sm3 > 6000 && t3 < 1) { s3 = false; - printConsoleText("[ INFO ] Soil sensor 3 unplugged."); + printFastCText("[ INFO ] Soil sensor 3 unplugged."); } else { printS3(t3, sm3); } @@ -459,7 +467,7 @@ void getMoisture() { if (soil3.begin(0x38)) { clearLog(); s3 = true; - printConsoleText("[ INFO ] Soil sensor 3 connected."); + printFastCText("[ INFO ] Soil sensor 3 connected."); float t3 = soil3.getTemp(); int sm3 = map(soil3.touchRead(0), 0, 1023, 0, 100); printS3(t3, sm3); @@ -471,7 +479,7 @@ void getMoisture() { int sm4 = map(soil4.touchRead(0), 0, 1023, 0, 100); if(sm4 > 6000 && t4 < 1) { s4 = false; - printConsoleText("[ INFO ] Soil sensor 4 unplugged."); + printFastCText("[ INFO ] Soil sensor 4 unplugged."); } else { printS4(t4, sm4); } @@ -479,7 +487,7 @@ void getMoisture() { if (soil4.begin(0x39)) { clearLog(); s4 = true; - printConsoleText("[ INFO ] Soil sensor 4 connected."); + printFastCText("[ INFO ] Soil sensor 4 connected."); float t4 = soil4.getTemp(); int sm4 = map(soil4.touchRead(0), 0, 1023, 0, 100); printS4(t4, sm4); @@ -492,11 +500,13 @@ void printS1(float t, int sm) { out += t; out += " C, "; out += (t * 9.0 / 5.0 + 32); - out += " F|"; + out += " F"; + printFastCText(out); + out = ""; out += "[ OK ] Soil sensor 1 moisture: "; out += sm; out += "%"; - printConsoleText(out); + printFastCText(out); } void printS2(float t, int sm) { @@ -504,11 +514,13 @@ void printS2(float t, int sm) { out += t; out += " C, "; out += (t * 9.0 / 5.0 + 32); - out += " F|"; + out += " F"; + printFastCText(out); + out = ""; out += "[ OK ] Soil sensor 2 moisture: "; out += sm; out += "%"; - printConsoleText(out); + printFastCText(out); } void printS3(float t, int sm) { @@ -516,11 +528,13 @@ void printS3(float t, int sm) { out += t; out += " C, "; out += (t * 9.0 / 5.0 + 32); - out += " F|"; + out += " F"; + printFastCText(out); + out = ""; out += "[ OK ] Soil sensor 3 moisture: "; out += sm; out += "%"; - printConsoleText(out); + printFastCText(out); } void printS4(float t, int sm) { @@ -528,11 +542,13 @@ void printS4(float t, int sm) { out += t; out += " C, "; out += (t * 9.0 / 5.0 + 32); - out += " F|"; + out += " F"; + printFastCText(out); + out = ""; out += "[ OK ] Soil sensor 4 moisture: "; out += sm; out += "%"; - printConsoleText(out); + printFastCText(out); } @@ -546,9 +562,9 @@ void enablePS(int level) { pinMode(x, OUTPUT); digitalWrite(x, LOW); } - printConsoleText("[ OK ] Enabled Level 1 powersaving."); + printFastCText("[ OK ] Enabled Level 1 powersaving."); } else { - printConsoleText("[FAILED] Powersaving: Argument must be > 0."); + printFastCText("[FAILED] Powersaving: Argument must be > 0."); } if(level > 1) { Serial.end(); @@ -563,7 +579,7 @@ void enablePS(int level) { power_timer4_disable(); power_timer5_disable(); //power_twi_disable(); // twi needed for soil sensors / i2c - printConsoleText("[ OK ] Enabled Level 2 powersaving."); + printFastCText("[ OK ] Enabled Level 2 powersaving."); } if(level > 2) { // disable ADC @@ -571,12 +587,15 @@ void enablePS(int level) { //power_all_disable(); ps3 = true; - printConsoleText("[ OK ] Enabled Level 3 powersaving.|[ INFO ] All powersaving features enabled."); + printFastCText("[ OK ] Enabled Level 3 powersaving."); + printFastCText("[ INFO ] All powersaving features enabled."); } } void clearLog() { outtext = ""; + outtext2 = ""; + linecount = 0; } void printConsoleText(String text) { @@ -602,7 +621,7 @@ void printConsoleText(String text) { outtext += text.substring(x, x + 53); } } - if(text.length() % 53 != 0) { + if (text.length() % 53 != 0) { outtext += text.substring(text.length() - text.length() % 53, text.length()) + "|"; } } @@ -611,16 +630,16 @@ void printConsoleText(String text) { outtext.remove(0, outtext.indexOf("|") + 1); count--; } - if(debug) { + if (debug) { //tft.setCursor(0, 0); //tft.fillScreen(BLACK); tft.setCursor(0, (count) * 8); tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1); - for(int x = count - 1; x >= 0; x--) { + for (int x = count - 1; x >= 0; x--) { String tmp = getString(outtext, x); tft.setCursor(0, tft.getCursorY() - 8); - if(!tmp.equals(getString(oldtext, x))) { + if (!tmp.equals(getString(oldtext, x))) { tft.fillRect(0, tft.getCursorY(), 320, 8, BLACK); tft.print(tmp); } @@ -630,8 +649,8 @@ void printConsoleText(String text) { int countSemicolons(String s) { int newlines = 0; int l = s.length(); - for(int x = 0; x < l; x++) { - if(s.substring(x, x + 1).equals("|")) { + for (int x = 0; x < l; x++) { + if (s.substring(x, x + 1).equals("|")) { newlines ++; } } @@ -641,9 +660,9 @@ String getString(String s, int index) { int count = 0; int lastsemi = 0; for (int x = 0; x < s.length(); x++) { - if(s.substring(x, x + 1).equals("|")) { + if (s.substring(x, x + 1).equals("|")) { count ++; - if(count - 1 == index) { + if (count - 1 == index) { return s.substring(lastsemi, x); } lastsemi = x + 1; @@ -652,3 +671,32 @@ String getString(String s, int index) { } return ""; } + +void printFastCText(String text) { // NOTE: text MUST be under 53 characters long! (this is how the code runs faster) + linecount ++; + if (linecount > 30) { + outtext2 = outtext2.substring(30); + } + if (text.length() < 53) { + outtext2 += text; + for (int x = text.length(); x < 53; x++) { + outtext2 += " "; + } + } else { + outtext2 += text; + } + if (debug) { + //tft.setCursor(0, 0); + //tft.fillScreen(BLACK); + int lc2 = linecount; + tft.setCursor(0, lc2 * 8); + tft.setTextColor(ILI9341_WHITE); + tft.setTextSize(1); + for (int x = count - 1; x >= 0; x--) { + String tmp = outtext2.substring(x * 53, x*53 + 53); + tft.setCursor(0, tft.getCursorY() - 8); + tft.fillRect(0, tft.getCursorY(), 320, 8, BLACK); + tft.print(tmp); + } + } +} \ No newline at end of file