Migrate Display_Graphic to TaskScheduler

This commit is contained in:
Thomas Basler 2023-11-20 22:02:44 +01:00
parent ad1f1b690c
commit ab8679e7b9
3 changed files with 62 additions and 57 deletions

View File

@ -2,6 +2,7 @@
#pragma once #pragma once
#include "defaults.h" #include "defaults.h"
#include <TaskSchedulerDeclarations.h>
#include <U8g2lib.h> #include <U8g2lib.h>
enum DisplayType_t { enum DisplayType_t {
@ -16,8 +17,7 @@ public:
DisplayGraphicClass(); DisplayGraphicClass();
~DisplayGraphicClass(); ~DisplayGraphicClass();
void init(DisplayType_t type, uint8_t data, uint8_t clk, uint8_t cs, uint8_t reset); void init(Scheduler* scheduler, DisplayType_t type, uint8_t data, uint8_t clk, uint8_t cs, uint8_t reset);
void loop();
void setContrast(uint8_t contrast); void setContrast(uint8_t contrast);
void setStatus(bool turnOn); void setStatus(bool turnOn);
void setOrientation(uint8_t rotation = DISPLAY_ROTATION); void setOrientation(uint8_t rotation = DISPLAY_ROTATION);
@ -28,10 +28,13 @@ public:
bool enableScreensaver = true; bool enableScreensaver = true;
private: private:
void loop();
void printText(const char* text, uint8_t line); void printText(const char* text, uint8_t line);
void calcLineHeights(); void calcLineHeights();
void setFont(uint8_t line); void setFont(uint8_t line);
Task _loopTask;
U8G2* _display; U8G2* _display;
bool _displayTurnedOn; bool _displayTurnedOn;
@ -41,7 +44,6 @@ private:
uint8_t _mExtra; uint8_t _mExtra;
uint16_t _period = 1000; uint16_t _period = 1000;
uint16_t _interval = 60000; // interval at which to power save (milliseconds) uint16_t _interval = 60000; // interval at which to power save (milliseconds)
uint32_t _lastDisplayUpdate = 0;
uint32_t _previousMillis = 0; uint32_t _previousMillis = 0;
char _fmtText[32]; char _fmtText[32];
bool _isLarge = false; bool _isLarge = false;

View File

@ -39,7 +39,7 @@ DisplayGraphicClass::~DisplayGraphicClass()
delete _display; delete _display;
} }
void DisplayGraphicClass::init(DisplayType_t type, uint8_t data, uint8_t clk, uint8_t cs, uint8_t reset) void DisplayGraphicClass::init(Scheduler* scheduler, DisplayType_t type, uint8_t data, uint8_t clk, uint8_t cs, uint8_t reset)
{ {
_display_type = type; _display_type = type;
if (_display_type > DisplayType_t::None) { if (_display_type > DisplayType_t::None) {
@ -49,6 +49,12 @@ void DisplayGraphicClass::init(DisplayType_t type, uint8_t data, uint8_t clk, ui
setContrast(DISPLAY_CONTRAST); setContrast(DISPLAY_CONTRAST);
setStatus(true); setStatus(true);
} }
scheduler->addTask(_loopTask);
_loopTask.setCallback(std::bind(&DisplayGraphicClass::loop, this));
_loopTask.setIterations(TASK_FOREVER);
_loopTask.setInterval(_period);
_loopTask.enable();
} }
void DisplayGraphicClass::calcLineHeights() void DisplayGraphicClass::calcLineHeights()
@ -137,7 +143,7 @@ void DisplayGraphicClass::loop()
return; return;
} }
if ((millis() - _lastDisplayUpdate) > _period) { _loopTask.setInterval(_period);
_display->clearBuffer(); _display->clearBuffer();
bool displayPowerSave = false; bool displayPowerSave = false;
@ -185,7 +191,6 @@ void DisplayGraphicClass::loop()
_display->sendBuffer(); _display->sendBuffer();
_mExtra++; _mExtra++;
_lastDisplayUpdate = millis();
if (!_displayTurnedOn) { if (!_displayTurnedOn) {
displayPowerSave = true; displayPowerSave = true;
@ -193,7 +198,6 @@ void DisplayGraphicClass::loop()
_display->setPowerSave(displayPowerSave); _display->setPowerSave(displayPowerSave);
} }
}
void DisplayGraphicClass::setContrast(uint8_t contrast) void DisplayGraphicClass::setContrast(uint8_t contrast)
{ {

View File

@ -114,6 +114,7 @@ void setup()
// Initialize Display // Initialize Display
MessageOutput.print("Initialize Display... "); MessageOutput.print("Initialize Display... ");
Display.init( Display.init(
&scheduler,
static_cast<DisplayType_t>(pin.display_type), static_cast<DisplayType_t>(pin.display_type),
pin.display_data, pin.display_data,
pin.display_clk, pin.display_clk,
@ -156,6 +157,4 @@ void loop()
WebApi.loop(); WebApi.loop();
yield(); yield();
Display.loop();
yield();
} }