mirror of
https://github.com/lumapu/ahoy.git
synced 2025-05-29 08:46:11 +02:00
added ePaper (for ESP32 only!), thx @dAjaY85 #735
improved `/live` margins #732 renamed `var` to `VAr` #732
This commit is contained in:
parent
501daf04bc
commit
6dbb88e27e
19 changed files with 2685 additions and 3009 deletions
|
@ -8,72 +8,54 @@
|
|||
#include "../../utils/helper.h"
|
||||
#include "Display_Mono.h"
|
||||
#include "Display_ePaper.h"
|
||||
#include "imagedata.h"
|
||||
|
||||
template <class HMSYSTEM>
|
||||
class Display {
|
||||
public:
|
||||
Display() {}
|
||||
Display() {}
|
||||
|
||||
void setup(display_t *cfg, HMSYSTEM *sys, uint32_t *utcTs, uint8_t disp_reset, const char *version) {
|
||||
mCfg = cfg;
|
||||
mSys = sys;
|
||||
mUtcTs = utcTs;
|
||||
mNewPayload = false;
|
||||
mLoopCnt = 0;
|
||||
mVersion = version;
|
||||
|
||||
if (mCfg->type == 0) {
|
||||
return;
|
||||
} else if (1 < mCfg->type < 11) {
|
||||
switch (mCfg->rot) {
|
||||
case 0:
|
||||
DisplayMono.disp_rotation = U8G2_R0;
|
||||
break;
|
||||
case 1:
|
||||
DisplayMono.disp_rotation = U8G2_R1;
|
||||
break;
|
||||
case 2:
|
||||
DisplayMono.disp_rotation = U8G2_R2;
|
||||
break;
|
||||
case 3:
|
||||
DisplayMono.disp_rotation = U8G2_R3;
|
||||
break;
|
||||
}
|
||||
|
||||
DisplayMono.enablePowerSafe = mCfg->pwrSaveAtIvOffline;
|
||||
DisplayMono.enableScreensaver = mCfg->pxShift;
|
||||
DisplayMono.contrast = mCfg->contrast;
|
||||
|
||||
DisplayMono.init(mCfg->type, mCfg->disp_cs, mCfg->disp_dc, mCfg->disp_reset, mCfg->disp_busy, mCfg->disp_clk, mCfg->disp_data, mVersion);
|
||||
} else if (mCfg->type > 10) {
|
||||
DisplayEPaper.displayRotation = mCfg->rot;
|
||||
counterEPaper = 0;
|
||||
|
||||
DisplayEPaper.init(mCfg->type, mCfg->disp_cs, mCfg->disp_dc, mCfg->disp_reset, mCfg->disp_busy, mCfg->disp_clk, mCfg->disp_data, mVersion);
|
||||
}
|
||||
}
|
||||
|
||||
void payloadEventListener(uint8_t cmd) {
|
||||
mNewPayload = true;
|
||||
}
|
||||
|
||||
void tickerSecond() {
|
||||
if (mNewPayload || ((++mLoopCnt % 10) == 0)) {
|
||||
void setup(display_t *cfg, HMSYSTEM *sys, uint32_t *utcTs, uint8_t disp_reset, const char *version) {
|
||||
mCfg = cfg;
|
||||
mSys = sys;
|
||||
mUtcTs = utcTs;
|
||||
mNewPayload = false;
|
||||
mLoopCnt = 0;
|
||||
DataScreen();
|
||||
mVersion = version;
|
||||
|
||||
if (mCfg->type == 0)
|
||||
return;
|
||||
|
||||
if ((1 < mCfg->type) && (mCfg->type < 10)) {
|
||||
mMono.config(mCfg->pwrSaveAtIvOffline, mCfg->pxShift, mCfg->contrast);
|
||||
mMono.init(mCfg->type, mCfg->rot, mCfg->disp_cs, mCfg->disp_dc, mCfg->disp_reset, mCfg->disp_clk, mCfg->disp_data, mUtcTs, mVersion);
|
||||
} else if (mCfg->type >= 10) {
|
||||
#if defined(ESP32)
|
||||
mRefreshCycle = 0;
|
||||
mEpaper.config(mCfg->rot);
|
||||
mEpaper.init(mCfg->type, mCfg->disp_cs, mCfg->disp_dc, mCfg->disp_reset, mCfg->disp_busy, mCfg->disp_clk, mCfg->disp_data, mVersion);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
void DataScreen() {
|
||||
if (mCfg->type == 0)
|
||||
return;
|
||||
if (*mUtcTs == 0)
|
||||
return;
|
||||
void payloadEventListener(uint8_t cmd) {
|
||||
mNewPayload = true;
|
||||
}
|
||||
|
||||
void tickerSecond() {
|
||||
if (mNewPayload || ((++mLoopCnt % 10) == 0)) {
|
||||
mNewPayload = false;
|
||||
mLoopCnt = 0;
|
||||
DataScreen();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
void DataScreen() {
|
||||
if (mCfg->type == 0)
|
||||
return;
|
||||
if (*mUtcTs == 0)
|
||||
return;
|
||||
|
||||
if ((millis() - _lastDisplayUpdate) > mCfg->period) {
|
||||
float totalPower = 0;
|
||||
float totalYieldDay = 0;
|
||||
float totalYieldTotal = 0;
|
||||
|
@ -89,37 +71,43 @@ class Display {
|
|||
continue;
|
||||
|
||||
if (iv->isProducing(*mUtcTs))
|
||||
uint8_t isprod = 0;
|
||||
isprod++;
|
||||
|
||||
totalPower += iv->getChannelFieldValue(CH0, FLD_PAC, rec);
|
||||
totalYieldDay += iv->getChannelFieldValue(CH0, FLD_YD, rec);
|
||||
totalYieldTotal += iv->getChannelFieldValue(CH0, FLD_YT, rec);
|
||||
}
|
||||
|
||||
if (1 < mCfg->type < 11) {
|
||||
DisplayMono.loop(totalPower, totalYieldDay, totalYieldTotal, isprod);
|
||||
} else if (mCfg->type > 10) {
|
||||
DisplayEPaper.loop(totalPower, totalYieldDay, totalYieldTotal, isprod);
|
||||
counterEPaper++;
|
||||
if ((1 < mCfg->type) && (mCfg->type < 10)) {
|
||||
mMono.loop(totalPower, totalYieldDay, totalYieldTotal, isprod);
|
||||
} else if (mCfg->type >= 10) {
|
||||
#if defined(ESP32)
|
||||
mEpaper.loop(totalPower, totalYieldDay, totalYieldTotal, isprod);
|
||||
mRefreshCycle++;
|
||||
#endif
|
||||
}
|
||||
_lastDisplayUpdate = millis();
|
||||
|
||||
#if defined(ESP32)
|
||||
if (mRefreshCycle > 480) {
|
||||
mEpaper.fullRefresh();
|
||||
mRefreshCycle = 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (counterEPaper > 480) {
|
||||
DisplayEPaper.fullRefresh();
|
||||
counterEPaper = 0;
|
||||
}
|
||||
}
|
||||
// private member variables
|
||||
bool mNewPayload;
|
||||
uint8_t mLoopCnt;
|
||||
uint32_t *mUtcTs;
|
||||
const char *mVersion;
|
||||
display_t *mCfg;
|
||||
HMSYSTEM *mSys;
|
||||
uint16_t mRefreshCycle;
|
||||
|
||||
// private member variables
|
||||
bool mNewPayload;
|
||||
uint8_t mLoopCnt;
|
||||
uint32_t *mUtcTs;
|
||||
const char *mVersion;
|
||||
display_t *mCfg;
|
||||
HMSYSTEM *mSys;
|
||||
uint16_t counterEPaper;
|
||||
uint32_t _lastDisplayUpdate = 0;
|
||||
#if defined(ESP32)
|
||||
DisplayEPaper mEpaper;
|
||||
#endif
|
||||
DisplayMono mMono;
|
||||
};
|
||||
|
||||
#endif /*__DISPLAY__*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue