mirror of
https://github.com/lumapu/ahoy.git
synced 2025-08-06 09:58:23 +02:00
add motion sensor function for screensaver and remove redundant display code
This commit is contained in:
parent
120522582e
commit
9647044e49
11 changed files with 191 additions and 182 deletions
|
@ -53,9 +53,20 @@ class Display {
|
|||
default: mMono = NULL; break;
|
||||
}
|
||||
if(mMono) {
|
||||
mMono->config(mCfg->pwrSaveAtIvOffline, mCfg->pxShift, mCfg->contrast);
|
||||
mMono->config(mCfg->pwrSaveAtIvOffline, mCfg->screenSaver, mCfg->contrast);
|
||||
mMono->init(mCfg->type, mCfg->rot, mCfg->disp_cs, mCfg->disp_dc, 0xff, mCfg->disp_clk, mCfg->disp_data, &mDisplayData);
|
||||
}
|
||||
|
||||
// setup PIR pin for motion sensor
|
||||
#ifdef ESP32
|
||||
if ((mCfg->screenSaver == 2) && (mCfg->pirPin != DEF_PIN_OFF))
|
||||
pinMode(mCfg->pirPin, INPUT);
|
||||
#endif
|
||||
#ifdef ESP8266
|
||||
if ((mCfg->screenSaver == 2) && (mCfg->pirPin != DEF_PIN_OFF) && (mCfg->pirPin != A0))
|
||||
pinMode(mCfg->pirPin, INPUT);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
void payloadEventListener(uint8_t cmd) {
|
||||
|
@ -64,19 +75,19 @@ class Display {
|
|||
|
||||
void tickerSecond() {
|
||||
if (mMono != NULL)
|
||||
mMono->loop(mCfg->contrast);
|
||||
mMono->loop(mCfg->contrast, motionSensorActive());
|
||||
|
||||
if (mNewPayload || (((++mLoopCnt) % 5) == 0)) {
|
||||
DataScreen();
|
||||
mNewPayload = false;
|
||||
mLoopCnt = 0;
|
||||
DataScreen();
|
||||
}
|
||||
#if defined(ESP32)
|
||||
mEpaper.tickerSecond();
|
||||
#endif
|
||||
}
|
||||
|
||||
private:
|
||||
private:
|
||||
void DataScreen() {
|
||||
if (mCfg->type == 0)
|
||||
return;
|
||||
|
@ -158,6 +169,21 @@ class Display {
|
|||
#endif
|
||||
}
|
||||
|
||||
bool motionSensorActive() {
|
||||
if ((mCfg->screenSaver == 2) && (mCfg->pirPin != DEF_PIN_OFF)) {
|
||||
#if defined(ESP8266)
|
||||
if (mCfg->pirPin == A0)
|
||||
return((analogRead(A0) >= 512));
|
||||
else
|
||||
return(digitalRead(mCfg->pirPin));
|
||||
#elif defined(ESP32)
|
||||
return(digitalRead(mCfg->pirPin));
|
||||
#endif
|
||||
}
|
||||
else
|
||||
return(false);
|
||||
}
|
||||
|
||||
// approximate RSSI in dB by invQuality levels from heuristic function (very unscientific but better than nothing :-) )
|
||||
int8_t ivQuality2RadioRSSI(int8_t invQuality) {
|
||||
int8_t pseudoRSSIdB;
|
||||
|
|
|
@ -18,16 +18,49 @@
|
|||
#endif
|
||||
#include "../../utils/helper.h"
|
||||
#include "Display_data.h"
|
||||
#include "../../utils/dbg.h"
|
||||
|
||||
class DisplayMono {
|
||||
public:
|
||||
DisplayMono() {};
|
||||
|
||||
virtual void init(uint8_t type, uint8_t rot, uint8_t cs, uint8_t dc, uint8_t reset, uint8_t clock, uint8_t data, DisplayData *displayData) = 0;
|
||||
virtual void config(bool enPowerSave, bool enScreenSaver, uint8_t lum) = 0;
|
||||
virtual void loop(uint8_t lum) = 0;
|
||||
virtual void config(bool enPowerSave, uint8_t screenSaver, uint8_t lum) = 0;
|
||||
virtual void disp(void) = 0;
|
||||
|
||||
// Common loop function, manages display on/off functions for powersave and screensaver with motionsensor
|
||||
// can be overridden by subclasses
|
||||
virtual void loop(uint8_t lum, bool motion) {
|
||||
|
||||
bool dispConditions = (!mEnPowerSave || (mDisplayData->nrProducing > 0)) &&
|
||||
((mScreenSaver != 2) || motion); // screensaver 2 .. motionsensor
|
||||
|
||||
if (mDisplayActive) {
|
||||
if (!dispConditions) {
|
||||
if ((millis() - mStarttime) > DISP_DEFAULT_TIMEOUT * 1000ul) { // switch display off after timeout
|
||||
mDisplayActive = false;
|
||||
mDisplay->setPowerSave(true);
|
||||
DBGPRINTLN("**** Display off ****");
|
||||
}
|
||||
}
|
||||
else
|
||||
mStarttime = millis(); // keep display on
|
||||
}
|
||||
else {
|
||||
if (dispConditions) {
|
||||
mDisplayActive = true; // switch display on
|
||||
mStarttime = millis();
|
||||
mDisplay->setPowerSave(false);
|
||||
DBGPRINTLN("**** Display on ****");
|
||||
}
|
||||
}
|
||||
|
||||
if(mLuminance != lum) {
|
||||
mLuminance = lum;
|
||||
mDisplay->setContrast(mLuminance);
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
U8G2* mDisplay;
|
||||
DisplayData *mDisplayData;
|
||||
|
@ -36,17 +69,17 @@ class DisplayMono {
|
|||
uint16_t mDispWidth;
|
||||
uint16_t mDispHeight;
|
||||
|
||||
bool mEnPowerSave, mEnScreenSaver;
|
||||
bool mEnPowerSave;
|
||||
uint8_t mScreenSaver = 1; // 0 .. off; 1 .. pixelShift; 2 .. motionsensor
|
||||
uint8_t mLuminance;
|
||||
|
||||
uint8_t mLoopCnt;
|
||||
uint8_t mLineXOffsets[5] = {};
|
||||
uint8_t mLineYOffsets[5] = {};
|
||||
|
||||
uint16_t mDispY;
|
||||
|
||||
uint8_t mExtra;
|
||||
uint16_t mTimeout;
|
||||
uint32_t mStarttime = millis();
|
||||
bool mDisplayActive = true; // always start with display on
|
||||
char mFmtText[DISP_FMT_TEXT_LEN];
|
||||
|
||||
// Common initialization function to be called by subclasses
|
||||
|
@ -55,6 +88,7 @@ class DisplayMono {
|
|||
mType = type;
|
||||
mDisplayData = displayData;
|
||||
mDisplay->begin();
|
||||
mDisplay->setPowerSave(false); // always start with display on
|
||||
mDisplay->setContrast(mLuminance);
|
||||
mDisplay->clearBuffer();
|
||||
mDispWidth = mDisplay->getDisplayWidth();
|
||||
|
|
|
@ -9,17 +9,12 @@
|
|||
class DisplayMono128X32 : public DisplayMono {
|
||||
public:
|
||||
DisplayMono128X32() : DisplayMono() {
|
||||
mEnPowerSave = true;
|
||||
mEnScreenSaver = true;
|
||||
mLuminance = 60;
|
||||
mExtra = 0;
|
||||
mDispY = 0;
|
||||
mTimeout = DISP_DEFAULT_TIMEOUT; // interval at which to power save (milliseconds)
|
||||
}
|
||||
|
||||
void config(bool enPowerSave, bool enScreenSaver, uint8_t lum) {
|
||||
void config(bool enPowerSave, uint8_t screenSaver, uint8_t lum) {
|
||||
mEnPowerSave = enPowerSave;
|
||||
mEnScreenSaver = enScreenSaver;
|
||||
mScreenSaver = screenSaver;
|
||||
mLuminance = lum;
|
||||
}
|
||||
|
||||
|
@ -33,18 +28,6 @@ class DisplayMono128X32 : public DisplayMono {
|
|||
mDisplay->sendBuffer();
|
||||
}
|
||||
|
||||
void loop(uint8_t lum) {
|
||||
if (mEnPowerSave) {
|
||||
if (mTimeout != 0)
|
||||
mTimeout--;
|
||||
}
|
||||
|
||||
if(mLuminance != lum) {
|
||||
mLuminance = lum;
|
||||
mDisplay->setContrast(mLuminance);
|
||||
}
|
||||
}
|
||||
|
||||
void disp(void) {
|
||||
mDisplay->clearBuffer();
|
||||
|
||||
|
@ -53,8 +36,6 @@ class DisplayMono128X32 : public DisplayMono {
|
|||
mDisplay->setContrast(mLuminance);
|
||||
|
||||
if ((mDisplayData->totalPower > 0) && (mDisplayData->nrProducing > 0)) {
|
||||
mTimeout = DISP_DEFAULT_TIMEOUT;
|
||||
mDisplay->setPowerSave(false);
|
||||
if (mDisplayData->totalPower > 999)
|
||||
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%2.2f kW", (mDisplayData->totalPower / 1000));
|
||||
else
|
||||
|
@ -63,9 +44,6 @@ class DisplayMono128X32 : public DisplayMono {
|
|||
printText(mFmtText, 0);
|
||||
} else {
|
||||
printText("offline", 0);
|
||||
// check if it's time to enter power saving mode
|
||||
if (mTimeout == 0)
|
||||
mDisplay->setPowerSave(mEnPowerSave);
|
||||
}
|
||||
|
||||
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "today: %4.0f Wh", mDisplayData->totalYieldDay);
|
||||
|
@ -85,7 +63,6 @@ class DisplayMono128X32 : public DisplayMono {
|
|||
|
||||
mDisplay->sendBuffer();
|
||||
|
||||
mDispY = 0;
|
||||
mExtra++;
|
||||
}
|
||||
|
||||
|
@ -131,7 +108,7 @@ class DisplayMono128X32 : public DisplayMono {
|
|||
void printText(const char *text, uint8_t line) {
|
||||
setFont(line);
|
||||
|
||||
uint8_t dispX = mLineXOffsets[line] + ((mEnScreenSaver) ? (mExtra % 7) : 0);
|
||||
uint8_t dispX = mLineXOffsets[line] + ((mScreenSaver==1) ? (mExtra % 7) : 0);
|
||||
|
||||
if (isTwoRowLine(line)) {
|
||||
String stringText = String(text);
|
||||
|
|
|
@ -9,17 +9,12 @@
|
|||
class DisplayMono128X64 : public DisplayMono {
|
||||
public:
|
||||
DisplayMono128X64() : DisplayMono() {
|
||||
mEnPowerSave = true;
|
||||
mEnScreenSaver = true;
|
||||
mLuminance = 60;
|
||||
mExtra = 0;
|
||||
mDispY = 0;
|
||||
mTimeout = DISP_DEFAULT_TIMEOUT; // interval at which to power save (milliseconds)
|
||||
}
|
||||
|
||||
void config(bool enPowerSave, bool enScreenSaver, uint8_t lum) {
|
||||
void config(bool enPowerSave, uint8_t screenSaver, uint8_t lum) {
|
||||
mEnPowerSave = enPowerSave;
|
||||
mEnScreenSaver = enScreenSaver;
|
||||
mScreenSaver = screenSaver;
|
||||
mLuminance = lum;
|
||||
}
|
||||
|
||||
|
@ -45,41 +40,29 @@ class DisplayMono128X64 : public DisplayMono {
|
|||
mDisplay->sendBuffer();
|
||||
}
|
||||
|
||||
void loop(uint8_t lum) {
|
||||
if (mEnPowerSave) {
|
||||
if (mTimeout != 0)
|
||||
mTimeout--;
|
||||
}
|
||||
|
||||
if(mLuminance != lum) {
|
||||
mLuminance = lum;
|
||||
mDisplay->setContrast(mLuminance);
|
||||
}
|
||||
}
|
||||
|
||||
void disp(void) {
|
||||
uint8_t pos, sun_pos, moon_pos;
|
||||
|
||||
// Test
|
||||
/*
|
||||
mDisplayData->isSleeping = 1;
|
||||
mDisplayData->isProducing = 0;
|
||||
mDisplayData->totalPower = 10000;
|
||||
mDisplayData->totalYieldDay = 4998;
|
||||
mDisplayData->totalYieldTotal = 5321;
|
||||
*/
|
||||
|
||||
mDisplay->clearBuffer();
|
||||
|
||||
|
||||
// Layout-Test
|
||||
/*
|
||||
mDisplayData->nrSleeping = 10;
|
||||
mDisplayData->nrProducing = 10;
|
||||
mDisplayData->totalPower = 99990;
|
||||
mDisplayData->totalYieldDay = 8888;
|
||||
mDisplayData->totalYieldTotal = 9999;
|
||||
mDisplay->drawPixel(0, 0);
|
||||
mDisplay->drawPixel(mDispWidth-1, 0);
|
||||
mDisplay->drawPixel(0, mDispHeight-1);
|
||||
mDisplay->drawPixel(mDispWidth-1, mDispHeight-1);
|
||||
*/
|
||||
|
||||
// set Contrast of the Display to raise the lifetime
|
||||
mDisplay->setContrast(mLuminance);
|
||||
|
||||
// print total power
|
||||
if (mDisplayData->nrProducing > 0) {
|
||||
mTimeout = DISP_DEFAULT_TIMEOUT;
|
||||
mDisplay->setPowerSave(false);
|
||||
|
||||
if (mDisplayData->totalPower > 999)
|
||||
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.2f kW", (mDisplayData->totalPower / 1000));
|
||||
else
|
||||
|
@ -87,9 +70,6 @@ class DisplayMono128X64 : public DisplayMono {
|
|||
printText(mFmtText, l_TotalPower, 0xff);
|
||||
} else {
|
||||
printText("offline", l_TotalPower, 0xff);
|
||||
// check if it's time to enter power saving mode
|
||||
if (mTimeout == 0)
|
||||
mDisplay->setPowerSave(mEnPowerSave);
|
||||
}
|
||||
|
||||
// print Date and time
|
||||
|
@ -119,9 +99,9 @@ class DisplayMono128X64 : public DisplayMono {
|
|||
}
|
||||
else {
|
||||
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%2d", mDisplayData->nrProducing);
|
||||
sun_pos = mDisplay->getStrWidth(mFmtText);
|
||||
sun_pos = mDisplay->getStrWidth(mFmtText) + 1;
|
||||
snprintf(mFmtText+2, DISP_FMT_TEXT_LEN, " %2d", mDisplayData->nrSleeping);
|
||||
moon_pos = mDisplay->getStrWidth(mFmtText);
|
||||
moon_pos = mDisplay->getStrWidth(mFmtText) + 1;
|
||||
snprintf(mFmtText+7, DISP_FMT_TEXT_LEN, " ");
|
||||
}
|
||||
printText(mFmtText, l_Status, 0xff);
|
||||
|
@ -129,57 +109,48 @@ class DisplayMono128X64 : public DisplayMono {
|
|||
pos = (mDispWidth - mDisplay->getStrWidth(mFmtText)) / 2;
|
||||
mDisplay->setFont(u8g2_font_ncenB08_symbols8_ahoy);
|
||||
if (sun_pos!=-1)
|
||||
mDisplay->drawStr(pos+sun_pos, mLineYOffsets[l_Status], "G"); // sun
|
||||
mDisplay->drawStr(pos + sun_pos + pixelshift(), mLineYOffsets[l_Status], "G"); // sun
|
||||
if (moon_pos!=-1)
|
||||
mDisplay->drawStr(pos+moon_pos, mLineYOffsets[l_Status], "H"); // moon
|
||||
mDisplay->drawStr(pos + moon_pos + pixelshift(), mLineYOffsets[l_Status], "H"); // moon
|
||||
}
|
||||
|
||||
// print yields
|
||||
mDisplay->setFont(u8g2_font_ncenB10_symbols10_ahoy);
|
||||
mDisplay->drawStr(15 + pixelshift(), mLineYOffsets[l_YieldDay], "I"); // day
|
||||
mDisplay->drawStr(15 + pixelshift(), mLineYOffsets[l_YieldTotal], "D"); // total
|
||||
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%7.0f Wh", mDisplayData->totalYieldDay);
|
||||
printText(mFmtText, l_YieldDay, 25);
|
||||
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%7.1f kWh", mDisplayData->totalYieldTotal);
|
||||
printText(mFmtText, l_YieldTotal, 25);
|
||||
mDisplay->setFont(u8g2_font_ncenB10_symbols10_ahoy);
|
||||
mDisplay->drawStr(11, mLineYOffsets[l_YieldDay], "I"); // day
|
||||
mDisplay->drawStr(11, mLineYOffsets[l_YieldTotal], "D"); // total
|
||||
|
||||
// draw dynamic RSSI bars
|
||||
int rssi_bar_height = 9;
|
||||
for (int i=0; i<4;i++) {
|
||||
int radio_rssi_threshold = -60 - i*10;
|
||||
int wifi_rssi_threshold = -60 - i*10;
|
||||
if (mDisplayData->RadioRSSI > radio_rssi_threshold)
|
||||
mDisplay->drawBox(0, 8+(rssi_bar_height+1)*i, 4-i,rssi_bar_height);
|
||||
if (mDisplayData->WifiRSSI > wifi_rssi_threshold)
|
||||
mDisplay->drawBox(mDispWidth-4+i, 8+(rssi_bar_height+1)*i, 4-i,rssi_bar_height);
|
||||
if (mScreenSaver != 1 ) { // not practical for pixel shift screensaver
|
||||
// draw dynamic RSSI bars
|
||||
int rssi_bar_height = 9;
|
||||
for (int i=0; i<4;i++) {
|
||||
int radio_rssi_threshold = -60 - i*10;
|
||||
int wifi_rssi_threshold = -60 - i*10;
|
||||
if (mDisplayData->RadioRSSI > radio_rssi_threshold)
|
||||
mDisplay->drawBox(0, 8+(rssi_bar_height+1)*i, 4-i,rssi_bar_height);
|
||||
if (mDisplayData->WifiRSSI > wifi_rssi_threshold)
|
||||
mDisplay->drawBox(mDispWidth-4+i, 8+(rssi_bar_height+1)*i, 4-i,rssi_bar_height);
|
||||
}
|
||||
// draw dynamic antenna and WiFi symbols
|
||||
mDisplay->setFont(u8g2_font_ncenB10_symbols10_ahoy);
|
||||
char sym[]=" ";
|
||||
sym[0] = mDisplayData->RadioSymbol?'A':'E'; // NRF
|
||||
mDisplay->drawStr(0, mLineYOffsets[l_RSSI], sym);
|
||||
|
||||
if (mDisplayData->MQTTSymbol)
|
||||
sym[0] = 'J'; // MQTT
|
||||
else
|
||||
sym[0] = mDisplayData->WifiSymbol?'B':'F'; // Wifi
|
||||
mDisplay->drawStr(mDispWidth - mDisplay->getStrWidth(sym), mLineYOffsets[l_RSSI], sym);
|
||||
mDisplay->sendBuffer();
|
||||
}
|
||||
|
||||
// draw dynamic antenna and WiFi symbols
|
||||
mDisplay->setFont(u8g2_font_ncenB10_symbols10_ahoy);
|
||||
char sym[]=" ";
|
||||
sym[0] = mDisplayData->RadioSymbol?'A':'E'; // NRF
|
||||
mDisplay->drawStr(0, mLineYOffsets[l_RSSI], sym);
|
||||
|
||||
if (mDisplayData->MQTTSymbol)
|
||||
sym[0] = 'J'; // MQTT
|
||||
else
|
||||
sym[0] = mDisplayData->WifiSymbol?'B':'F'; // Wifi
|
||||
mDisplay->drawStr(mDispWidth - mDisplay->getStrWidth(sym), mLineYOffsets[l_RSSI], sym);
|
||||
mDisplay->sendBuffer();
|
||||
|
||||
mExtra++;
|
||||
|
||||
/* // just for test
|
||||
mDisplay->drawPixel(0, 0);
|
||||
mDisplay->drawPixel(mDispWidth-1, 0);
|
||||
mDisplay->drawPixel(0, mDispHeight-1);
|
||||
mDisplay->drawPixel(mDispWidth-1, mDispHeight-1);
|
||||
*/
|
||||
|
||||
mDisplay->sendBuffer();
|
||||
|
||||
mDispY = 0;
|
||||
mExtra++;
|
||||
}
|
||||
|
||||
private:
|
||||
|
@ -218,6 +189,11 @@ class DisplayMono128X64 : public DisplayMono {
|
|||
} while(l_MAX_LINES>i);
|
||||
}
|
||||
|
||||
inline int8_t pixelshift(void) {
|
||||
int8_t range = 11; // number of pixels to shift from left to right (centered)
|
||||
return(mScreenSaver == 1 ? (mExtra % range - range/2) : 0);
|
||||
}
|
||||
|
||||
inline void setLineFont(uint8_t line) {
|
||||
if ((line == l_TotalPower) ||
|
||||
(line == l_Ahoy))
|
||||
|
@ -232,12 +208,12 @@ class DisplayMono128X64 : public DisplayMono {
|
|||
|
||||
void printText(const char *text, uint8_t line, uint8_t col=0) {
|
||||
uint8_t dispX;
|
||||
|
||||
setLineFont(line);
|
||||
if (0xff == col)
|
||||
dispX = (mDispWidth - mDisplay->getStrWidth(text)) / 2; // center text
|
||||
else
|
||||
dispX = col;
|
||||
dispX += pixelshift();
|
||||
mDisplay->drawStr(dispX, mLineYOffsets[line], text);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -9,17 +9,12 @@
|
|||
class DisplayMono64X48 : public DisplayMono {
|
||||
public:
|
||||
DisplayMono64X48() : DisplayMono() {
|
||||
mEnPowerSave = true;
|
||||
mEnScreenSaver = false;
|
||||
mLuminance = 20;
|
||||
mExtra = 0;
|
||||
mDispY = 0;
|
||||
mTimeout = DISP_DEFAULT_TIMEOUT; // interval at which to power save (milliseconds)
|
||||
}
|
||||
|
||||
void config(bool enPowerSave, bool enScreenSaver, uint8_t lum) {
|
||||
void config(bool enPowerSave, uint8_t screenSaver, uint8_t lum) {
|
||||
mEnPowerSave = enPowerSave;
|
||||
mEnScreenSaver = enScreenSaver;
|
||||
mScreenSaver = screenSaver;
|
||||
mLuminance = lum;
|
||||
}
|
||||
|
||||
|
@ -34,18 +29,6 @@ class DisplayMono64X48 : public DisplayMono {
|
|||
mDisplay->sendBuffer();
|
||||
}
|
||||
|
||||
void loop(uint8_t lum) {
|
||||
if (mEnPowerSave) {
|
||||
if (mTimeout != 0)
|
||||
mTimeout--;
|
||||
}
|
||||
|
||||
if(mLuminance != lum) {
|
||||
mLuminance = lum;
|
||||
mDisplay->setContrast(mLuminance);
|
||||
}
|
||||
}
|
||||
|
||||
void disp(void) {
|
||||
mDisplay->clearBuffer();
|
||||
|
||||
|
@ -53,9 +36,6 @@ class DisplayMono64X48 : public DisplayMono {
|
|||
mDisplay->setContrast(mLuminance);
|
||||
|
||||
if ((mDisplayData->totalPower > 0) && (mDisplayData->nrProducing > 0)) {
|
||||
mTimeout = DISP_DEFAULT_TIMEOUT;
|
||||
mDisplay->setPowerSave(false);
|
||||
|
||||
if (mDisplayData->totalPower > 999)
|
||||
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%2.2f kW", (mDisplayData->totalPower / 1000));
|
||||
else
|
||||
|
@ -64,9 +44,6 @@ class DisplayMono64X48 : public DisplayMono {
|
|||
printText(mFmtText, 0);
|
||||
} else {
|
||||
printText("offline", 0);
|
||||
// check if it's time to enter power saving mode
|
||||
if (mTimeout == 0)
|
||||
mDisplay->setPowerSave(mEnPowerSave);
|
||||
}
|
||||
|
||||
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "D: %4.0f Wh", mDisplayData->totalYieldDay);
|
||||
|
@ -119,7 +96,7 @@ class DisplayMono64X48 : public DisplayMono {
|
|||
|
||||
void printText(const char *text, uint8_t line) {
|
||||
uint8_t dispX = 0; //small display, use all we have
|
||||
dispX += (mEnScreenSaver) ? (mExtra % 4) : 0;
|
||||
dispX += (mScreenSaver==1) ? (mExtra % 4) : 0;
|
||||
setFont(line);
|
||||
mDisplay->drawStr(dispX, mLineYOffsets[line], text);
|
||||
}
|
||||
|
|
|
@ -10,17 +10,12 @@
|
|||
class DisplayMono84X48 : public DisplayMono {
|
||||
public:
|
||||
DisplayMono84X48() : DisplayMono() {
|
||||
mEnPowerSave = true;
|
||||
mEnScreenSaver = true;
|
||||
mLuminance = 140;
|
||||
mExtra = 0;
|
||||
mDispY = 0;
|
||||
mTimeout = DISP_DEFAULT_TIMEOUT; // interval at which to power save (milliseconds)
|
||||
}
|
||||
|
||||
void config(bool enPowerSave, bool enScreenSaver, uint8_t lum) {
|
||||
void config(bool enPowerSave, uint8_t screenSaver, uint8_t lum) {
|
||||
mEnPowerSave = enPowerSave;
|
||||
mEnScreenSaver = enScreenSaver;
|
||||
mScreenSaver = screenSaver;
|
||||
mLuminance = lum;
|
||||
}
|
||||
|
||||
|
@ -34,18 +29,6 @@ class DisplayMono84X48 : public DisplayMono {
|
|||
mDisplay->sendBuffer();
|
||||
}
|
||||
|
||||
void loop(uint8_t lum) {
|
||||
if (mEnPowerSave) {
|
||||
if (mTimeout != 0)
|
||||
mTimeout--;
|
||||
}
|
||||
|
||||
if(mLuminance != lum) {
|
||||
mLuminance = lum;
|
||||
mDisplay->setContrast(mLuminance);
|
||||
}
|
||||
}
|
||||
|
||||
void disp(void) {
|
||||
mDisplay->clearBuffer();
|
||||
|
||||
|
@ -65,9 +48,6 @@ class DisplayMono84X48 : public DisplayMono {
|
|||
|
||||
// print total power
|
||||
if (mDisplayData->nrProducing > 0) {
|
||||
mTimeout = DISP_DEFAULT_TIMEOUT;
|
||||
mDisplay->setPowerSave(false);
|
||||
|
||||
if (mDisplayData->totalPower > 9999)
|
||||
snprintf(mFmtText, DISP_FMT_TEXT_LEN, "%.2fkW", (mDisplayData->totalPower / 1000)); // forgo spacing between value and SI unit in favor of second position after decimal point
|
||||
else if (mDisplayData->totalPower > 999)
|
||||
|
@ -78,9 +58,6 @@ class DisplayMono84X48 : public DisplayMono {
|
|||
printText(mFmtText, l_TotalPower, 0xff);
|
||||
} else {
|
||||
printText("offline", l_TotalPower, 0xff);
|
||||
// check if it's time to enter power saving mode
|
||||
if (mTimeout == 0)
|
||||
mDisplay->setPowerSave(mEnPowerSave);
|
||||
}
|
||||
|
||||
// print Date and time
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue