add redraw function
This commit is contained in:
parent
bea5c8691c
commit
ba3ccece6f
|
@ -29,6 +29,7 @@ private:
|
||||||
uint16_t backBuffer[COLUMNS];
|
uint16_t backBuffer[COLUMNS];
|
||||||
|
|
||||||
bool flag_updating; //when true, display flip is in progress. frontBuffer does not match backBuffer
|
bool flag_updating; //when true, display flip is in progress. frontBuffer does not match backBuffer
|
||||||
|
bool flag_redraw; //when set true, settings for updating are overwritten such that all dots are cleared and set
|
||||||
|
|
||||||
uint8_t update_counter; //used for keeping track of progress for updating
|
uint8_t update_counter; //used for keeping track of progress for updating
|
||||||
|
|
||||||
|
@ -75,6 +76,8 @@ public:
|
||||||
void loop_testDots();
|
void loop_testDots();
|
||||||
void loop_drawClearTest();
|
void loop_drawClearTest();
|
||||||
|
|
||||||
|
void redraw();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
unsigned long updateDuration; //for statistics and debugging. time it took for one update (max)
|
unsigned long updateDuration; //for statistics and debugging. time it took for one update (max)
|
||||||
|
|
|
@ -830,11 +830,17 @@ void Image::shuffleOrder(uint8_t iterations) {
|
||||||
UpdateReturn Image::updateByColumn(bool clearFirst, bool optimizeClear, bool optimizeSet)
|
UpdateReturn Image::updateByColumn(bool clearFirst, bool optimizeClear, bool optimizeSet)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
clearFirst : if True, go through all columns and clear them (by set order). Then go through same order and set dots.
|
clearFirst : if True, go through all columns and clear them (by set order). Then go through same order and set dots. If False, clear one column then set it immediately afterwards.
|
||||||
optimizeClear : if True, do not clear columns where dots need to be set or no change is happening. if False, clear every column
|
optimizeClear : if True, do not clear columns where dots need to be set or no change is happening. if False, clear every column
|
||||||
optimizeSet : if True, do not set already set dots again.
|
optimizeSet : if True, do not set already set dots again.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if (flag_redraw) {
|
||||||
|
clearFirst=false;
|
||||||
|
optimizeClear=false;
|
||||||
|
optimizeSet=false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!flag_updating) {
|
if (!flag_updating) {
|
||||||
return nochange; //finished
|
return nochange; //finished
|
||||||
}
|
}
|
||||||
|
@ -898,6 +904,7 @@ UpdateReturn Image::updateByColumn(bool clearFirst, bool optimizeClear, bool opt
|
||||||
if (update_counter/2>=getW()) { //reached last column
|
if (update_counter/2>=getW()) { //reached last column
|
||||||
flag_updating=false;
|
flag_updating=false;
|
||||||
update_counter=0;
|
update_counter=0;
|
||||||
|
flag_redraw=false;
|
||||||
return finished; //finished
|
return finished; //finished
|
||||||
}
|
}
|
||||||
return updating; //not finished
|
return updating; //not finished
|
||||||
|
@ -1038,4 +1045,7 @@ void Image::loop_drawClearTest() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Image::redraw() {
|
||||||
|
flag_redraw=true;
|
||||||
|
flag_updating=true;
|
||||||
|
}
|
|
@ -26,6 +26,7 @@ uint8_t stringToBool(String s);
|
||||||
bool presetHandler(const HomieRange& range, const String& value);
|
bool presetHandler(const HomieRange& range, const String& value);
|
||||||
bool orderHandler(const HomieRange& range, const String& value);
|
bool orderHandler(const HomieRange& range, const String& value);
|
||||||
bool dataHandler(const HomieRange& range, const String& value);
|
bool dataHandler(const HomieRange& range, const String& value);
|
||||||
|
bool controlHandler(const HomieRange& range, const String& value);
|
||||||
|
|
||||||
bool clearFirstHandler(const HomieRange& range, const String& value);
|
bool clearFirstHandler(const HomieRange& range, const String& value);
|
||||||
bool optimizeClearHandler(const HomieRange& range, const String& value);
|
bool optimizeClearHandler(const HomieRange& range, const String& value);
|
||||||
|
@ -49,6 +50,7 @@ void setup() {
|
||||||
flipdotNode.advertise("preset").settable(presetHandler);
|
flipdotNode.advertise("preset").settable(presetHandler);
|
||||||
flipdotNode.advertise("data").settable(dataHandler);
|
flipdotNode.advertise("data").settable(dataHandler);
|
||||||
flipdotNode.advertise("order").settable(orderHandler);
|
flipdotNode.advertise("order").settable(orderHandler);
|
||||||
|
flipdotNode.advertise("control").settable(controlHandler);
|
||||||
settingsNode.advertise("clearfirst").settable(clearFirstHandler);
|
settingsNode.advertise("clearfirst").settable(clearFirstHandler);
|
||||||
settingsNode.advertise("optimizeclear").settable(optimizeClearHandler);
|
settingsNode.advertise("optimizeclear").settable(optimizeClearHandler);
|
||||||
settingsNode.advertise("optimizeset").settable(optimizeSetHandler);
|
settingsNode.advertise("optimizeset").settable(optimizeSetHandler);
|
||||||
|
@ -140,13 +142,11 @@ void loop() {
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
UpdateReturn result=flip.updateByColumn(clearFirst,optimizeClear,optimizeSet); //0=not finished, 1=finished
|
UpdateReturn result=flip.updateByColumn(clearFirst,optimizeClear,optimizeSet); //0=not finished, 1=finished
|
||||||
//UpdateReturn result=flip.updateByColumn(true,false,false); //0=not finished, 1=finished <- most simple
|
//UpdateReturn result=flip.updateByColumn(true,false,false); //0=not finished, 1=finished <- most simple
|
||||||
static UpdateReturn last_result=finished;
|
static UpdateReturn last_result=finished;
|
||||||
if (last_result==nochange && result!=last_result) { //was finished but has just started updating again
|
if (last_result==nochange && result!=last_result) { //was finished but has just started updating again
|
||||||
last_change=loopmillis; //display started changing dots. set starting time.
|
last_change=loopmillis; //display started changing dots. set starting time.
|
||||||
Serial.print("Reset Time to "); Serial.println(last_change);
|
|
||||||
}
|
}
|
||||||
last_result=result;
|
last_result=result;
|
||||||
if (result == finished) //just finished
|
if (result == finished) //just finished
|
||||||
|
@ -158,6 +158,7 @@ void loop() {
|
||||||
resultNode.setProperty("updateduration").send((String)flip.updateDuration);
|
resultNode.setProperty("updateduration").send((String)flip.updateDuration);
|
||||||
flip.updateDuration=0; //reset
|
flip.updateDuration=0; //reset
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error.length()>0) { //is there an error to send?
|
if (error.length()>0) { //is there an error to send?
|
||||||
|
@ -313,3 +314,22 @@ uint8_t stringToBool(String s) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool controlHandler(const HomieRange& range, const String& value) {
|
||||||
|
Serial.print("Control payload="); Serial.println(value);
|
||||||
|
if (value == "redraw"){
|
||||||
|
flip.redraw();
|
||||||
|
}else if(value == "black"){
|
||||||
|
flip.setBuffer_solid(0);
|
||||||
|
flip.redraw();
|
||||||
|
}else{
|
||||||
|
error="preset \""+value+"\" not found";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
flipdotNode.setProperty("control").send(value);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
Loading…
Reference in New Issue