324 lines
No EOL
8.9 KiB
C++
324 lines
No EOL
8.9 KiB
C++
|
|
#include "epd.hpp"
|
|
|
|
int row1 = 0;
|
|
int row2 = 36;
|
|
int row3 = 36 + 54;
|
|
|
|
String currentRow1 = "";
|
|
String currentRow2 = "";
|
|
String currentRow3 = "";
|
|
|
|
char currentIcon1;
|
|
char currentIcon2;
|
|
char currentIcon3;
|
|
|
|
void setupDisplay()
|
|
{
|
|
display.init(0, true);
|
|
display.setRotation(1);
|
|
display.clearScreen();
|
|
|
|
display.setRotation(1);
|
|
display.setFont(&Antonio_SemiBold20pt7b);
|
|
display.setTextColor(GxEPD_WHITE);
|
|
int16_t tbx, tby;
|
|
uint16_t tbw, tbh;
|
|
display.getTextBounds("OrangeBTClock", 0, 0, &tbx, &tby, &tbw, &tbh);
|
|
// center the bounding box by transposition of the origin:
|
|
uint16_t x = ((display.width() - tbw) / 2) - tbx;
|
|
uint16_t y = ((display.height() - tbh) / 2) - tby;
|
|
display.fillScreen(GxEPD_BLACK);
|
|
display.setCursor(x, y);
|
|
display.print("OrangeBTClock");
|
|
display.display(false);
|
|
|
|
// display.fillScreen(GxEPD_WHITE);
|
|
// display.drawLine(0, 10, display.width(), 10, GxEPD_BLACK);
|
|
// display.drawLine(0, row2, display.width(), row2, GxEPD_BLACK);
|
|
// display.drawLine(0, row3, display.width(), row3, GxEPD_BLACK);
|
|
// display.display(false);
|
|
|
|
// display.fillScreen(GxEPD_BLACK);
|
|
// display.display(false);
|
|
|
|
// display.fillRect(0, 0, display.width(), 8, GxEPD_BLACK);
|
|
// display.displayWindow(0, 0, display.width(), 8);
|
|
|
|
// display.display(true);
|
|
|
|
display.setRotation(1);
|
|
// display.fillRect(0, row1, display.width(), 54, GxEPD_BLACK);
|
|
display.displayWindow(0, row1, display.width(), row2);
|
|
|
|
display.display(true);
|
|
|
|
// display.fillRect(0, row2, display.width(), 54, GxEPD_BLACK);
|
|
// display.displayWindow(0, row2, display.width(), 54);
|
|
|
|
// display.display(true);
|
|
|
|
// display.fillRect(0, row3, display.width(), display.height(), GxEPD_BLACK);
|
|
// display.displayWindow(0, row3, display.width(), display.height());
|
|
|
|
// display.display(true);
|
|
}
|
|
|
|
void updateRow2(String c, char icon)
|
|
{
|
|
if (c.equals(currentRow2) && icon == currentIcon2)
|
|
return;
|
|
|
|
display.setRotation(1);
|
|
display.setFont(&ROW2_FONT);
|
|
display.setTextColor(GxEPD_BLACK);
|
|
int16_t tbx, tby;
|
|
uint16_t tbw, tbh;
|
|
display.getTextBounds(c, 0, 0, &tbx, &tby, &tbw, &tbh);
|
|
// center the bounding box by transposition of the origin:
|
|
uint16_t x = ((display.width() - (tbw + ROW2_ICONWIDTH)) / 2) - tbx;
|
|
uint16_t y = ((display.height() - tbh) / 2) - tby;
|
|
|
|
display.setPartialWindow(0, row2, display.width(), 48);
|
|
display.fillRect(0, row2, display.width(), 48, GxEPD_WHITE);
|
|
|
|
display.firstPage();
|
|
do
|
|
{
|
|
display.setTextColor(GxEPD_BLACK);
|
|
|
|
display.setFont(&ROW2_ICONFONT);
|
|
display.setCursor(x, y);
|
|
display.print(icon);
|
|
|
|
display.setFont(&ROW2_FONT);
|
|
display.setCursor(x + ROW2_ICONWIDTH, y);
|
|
display.print(c);
|
|
} while (display.nextPage());
|
|
// display.display(true);
|
|
|
|
currentRow2 = c;
|
|
currentIcon2 = icon;
|
|
}
|
|
|
|
void updateRow3(String c, char icon)
|
|
{
|
|
if (c.equals(currentRow3) && icon == currentIcon3)
|
|
return;
|
|
|
|
display.setRotation(1);
|
|
display.setFont(&LibreFranklin_SemiBold15pt7b);
|
|
display.setTextColor(GxEPD_WHITE);
|
|
int16_t tbx, tby;
|
|
uint16_t tbw, tbh;
|
|
display.getTextBounds(c, 0, 0, &tbx, &tby, &tbw, &tbh);
|
|
// center the bounding box by transposition of the origin:
|
|
uint16_t x = ((display.width() - (tbw + ROW3_ICONWIDTH)) / 2) - tbx;
|
|
uint16_t y = row3 + (((display.height() - row3) - tbh) / 2) - tby;
|
|
|
|
display.setPartialWindow(0, row3, display.width(), 36);
|
|
// display.setFullWindow();
|
|
display.fillRect(0, row3, display.width(), 36, GxEPD_WHITE);
|
|
|
|
display.firstPage();
|
|
do
|
|
{
|
|
display.setTextColor(GxEPD_BLACK);
|
|
|
|
display.setFont(&orangeclock_icons15pt7b);
|
|
display.setCursor(x, y);
|
|
display.print(icon);
|
|
|
|
display.setFont(&LibreFranklin_SemiBold15pt7b);
|
|
|
|
display.setCursor(x + ROW3_ICONWIDTH, y);
|
|
display.print(c);
|
|
} while (display.nextPage());
|
|
|
|
currentRow3 = c;
|
|
currentIcon3 = icon;
|
|
}
|
|
|
|
void showSetupText(String t)
|
|
{
|
|
display.setRotation(1);
|
|
display.setFont(&SETUPFONT);
|
|
int16_t tbx, tby;
|
|
uint16_t tbw, tbh;
|
|
display.getTextBounds(t, 0, 0, &tbx, &tby, &tbw, &tbh);
|
|
// center the bounding box by transposition of the origin:
|
|
uint16_t x = ((display.width() - (tbw)) / 2) - tbx;
|
|
uint16_t y = ((display.height() - tbh) / 2) - tby;
|
|
display.setFullWindow();
|
|
display.firstPage();
|
|
do
|
|
{
|
|
display.setTextColor(GxEPD_BLACK);
|
|
display.setFont(&ROW2_ICONFONT);
|
|
display.setCursor(0, 40);
|
|
display.println(ICON_WIFI);
|
|
|
|
display.setFont(&SETUPFONT);
|
|
display.println(t);
|
|
} while (display.nextPage());
|
|
}
|
|
|
|
void updateRow1(String c, char icon)
|
|
{
|
|
if (c.equals(currentRow1) && icon == currentIcon1)
|
|
return;
|
|
|
|
// struct tm timeinfo;
|
|
// if (!getLocalTime(&timeinfo))
|
|
// {
|
|
// if (Serial.available())
|
|
// Serial.println("Failed to obtain time");
|
|
// return;
|
|
// }
|
|
|
|
// char dateString[10];
|
|
// strftime(dateString, 10, "%H:%M:%S", &timeinfo);
|
|
|
|
display.setRotation(1);
|
|
display.setFont(&ROW1_FONT);
|
|
display.setTextColor(GxEPD_WHITE);
|
|
int16_t tbx, tby;
|
|
uint16_t tbw, tbh;
|
|
display.getTextBounds(c, 0, 0, &tbx, &tby, &tbw, &tbh);
|
|
// center the bounding box by transposition of the origin:
|
|
uint16_t x = ((display.width() - (tbw + ROW1_ICONWIDTH)) / 2) - tbx;
|
|
uint16_t y = (((row2)-tbh) / 2) - tby;
|
|
|
|
display.setPartialWindow(0, 0, display.width(), 36);
|
|
display.fillRect(0, 0, display.width(), 36, GxEPD_WHITE);
|
|
|
|
display.firstPage();
|
|
do
|
|
{
|
|
display.setTextColor(GxEPD_BLACK);
|
|
|
|
display.setFont(&ROW1_ICONFONT);
|
|
display.setCursor(x, y);
|
|
display.print(icon);
|
|
|
|
display.setFont(&ROW1_FONT);
|
|
|
|
display.setCursor(x + ROW1_ICONWIDTH, y);
|
|
display.print(c);
|
|
} while (display.nextPage());
|
|
|
|
currentRow1 = c;
|
|
currentIcon1 = icon;
|
|
}
|
|
|
|
void updateRows(String row1Content, String row2Content, String row3Content)
|
|
{
|
|
display.setRotation(1);
|
|
display.setFont(&ROW1_FONT);
|
|
display.setTextColor(GxEPD_BLACK);
|
|
int16_t tbx, tby;
|
|
uint16_t tbw, tbh;
|
|
display.getTextBounds(row1Content, 0, 0, &tbx, &tby, &tbw, &tbh);
|
|
// center the bounding box by transposition of the origin:
|
|
uint16_t row1_x = ((display.width() - (tbw + ROW1_ICONWIDTH)) / 2) - tbx;
|
|
uint16_t row1_y = (((row2)-tbh) / 2) - tby;
|
|
|
|
display.setFont(&ROW2_FONT);
|
|
display.getTextBounds(row2Content, 0, 0, &tbx, &tby, &tbw, &tbh);
|
|
// center the bounding box by transposition of the origin:
|
|
uint16_t row2_x = ((display.width() - (tbw + ROW2_ICONWIDTH)) / 2) - tbx;
|
|
uint16_t row2_y = ((display.height() - tbh) / 2) - tby;
|
|
|
|
display.setFont(&ROW3_FONT);
|
|
display.getTextBounds(row3Content, 0, 0, &tbx, &tby, &tbw, &tbh);
|
|
// center the bounding box by transposition of the origin:
|
|
uint16_t row3_x = ((display.width() - (tbw + ROW3_ICONWIDTH)) / 2) - tbx;
|
|
uint16_t row3_y = row3 + (((display.height() - row3) - tbh) / 2) - tby;
|
|
|
|
// if (!currentRow1.equals(row1Content) && !currentRow2.equals(row2Content) && !currentRow3.equals(row3Content))
|
|
// {
|
|
display.setFullWindow();
|
|
// }
|
|
// else
|
|
if (currentRow1.equals(row1Content) && currentRow2.equals(row2Content) && currentRow3.equals(row3Content))
|
|
{
|
|
Serial.println(F("Nothing to update"));
|
|
return;
|
|
}
|
|
|
|
// display.setPartialWindow(0, display.width(), 0, display.height());
|
|
// else {
|
|
// if (!currentRow1.equals(row1Content))
|
|
// {
|
|
// display.setPartialWindow(0, 0, display.width(), 36);
|
|
// Serial.print(F("Row 1 to: "));
|
|
// Serial.println(row1Content);
|
|
// }
|
|
|
|
// if (!currentRow2.equals(row2Content))
|
|
// {
|
|
// display.setPartialWindow(0, row2, display.width(), 56);
|
|
// Serial.print(F("Row 2 to: "));
|
|
// Serial.println(row2Content);
|
|
// }
|
|
|
|
// if (!currentRow3.equals(row3Content))
|
|
// {
|
|
// display.setPartialWindow(0, row3, display.width(), 36);
|
|
// Serial.print(F("Row 3 to: "));
|
|
// Serial.println(row3Content);
|
|
// }
|
|
// }
|
|
|
|
display.firstPage();
|
|
do
|
|
{
|
|
display.setTextColor(GxEPD_BLACK);
|
|
|
|
if (!currentRow1.equals(row1Content))
|
|
{
|
|
|
|
display.fillRect(0, 0, display.width(), 36, GxEPD_WHITE);
|
|
|
|
display.setFont(&ROW1_ICONFONT);
|
|
display.setCursor(row1_x, row1_y);
|
|
display.print(ICON_PIE);
|
|
|
|
display.setFont(&ROW1_FONT);
|
|
display.setCursor(row1_x + ROW1_ICONWIDTH, row1_y);
|
|
display.print(row1Content);
|
|
|
|
currentRow1 = row1Content;
|
|
}
|
|
|
|
if (!currentRow2.equals(row2Content))
|
|
{
|
|
display.fillRect(0, row2, display.width(), 54, GxEPD_WHITE);
|
|
display.setTextColor(GxEPD_BLACK);
|
|
|
|
display.setFont(&ROW2_ICONFONT);
|
|
display.setCursor(row2_x, row2_y);
|
|
display.print(ICON_BLOCK);
|
|
|
|
display.setFont(&ROW2_FONT);
|
|
display.setCursor(row2_x + ROW2_ICONWIDTH, row2_y);
|
|
display.print(row2Content);
|
|
|
|
currentRow2 = row2Content;
|
|
}
|
|
|
|
if (!currentRow3.equals(row3Content))
|
|
{
|
|
display.fillRect(0, row3, display.width(), 36, GxEPD_WHITE);
|
|
display.setFont(&orangeclock_icons15pt7b);
|
|
display.setCursor(row3_x, row3_y);
|
|
display.print(ICON_DOLLAR);
|
|
|
|
display.setFont(&LibreFranklin_SemiBold15pt7b);
|
|
display.setCursor(row3_x + ROW3_ICONWIDTH, row3_y);
|
|
display.print(row3Content);
|
|
|
|
currentRow3 = row3Content;
|
|
}
|
|
} while (display.nextPage());
|
|
} |