Ich möchte für ein Handmessgerät evaluieren, ob ein E-Paper-Display von
Waveshare 1.54' (V2) geeignet ist. Ich habe damit an einem ESP32
herumprobiert. Prinzipiell scheint es zu funktionieren, aber das
Geflacker übers ganze Display nervt, obwohl es angeblich auch partial
refresh können soll.
Außerdem habe ich zwar eine grundsätzliche Ahnung - nein eher nur Gefühl
- wie das mit der Begerenzung der Displayfläche für parziellen Refresh
funktionieren könnte, aber meine Versuche zeigen irgendwie das
Gegenteil. Ich konnte auch keine verständliche Doku finden. Im Web
gefundener Democode läuft oft nicht. :-(
Folgender Code soll einfach nur eine Zahl hochzählen und in der linken
oberen Ecke anzeigen, nur mit parziellem Refresh. Doch was passiert bei
JEDEM Loop?
- das gesamte Display wird schwarz
- in dem schwarzen Display wird links oben ein 32x32 Feld weiß
- das gesamt Display wird Weiß
- in dem weißen Display wird links oben ein 32x32 Feld schwarz
- es erscheint die Zahl in Weiß
- das 32x32 Feld wird Weiß, die Zahl steht nun endlich da in Schwarz
Dass dies maximal ineffizient ist und scheisse aussieht kann sicher
jeder nachvollziehen. Kann mir jemand bitte kurz erklären, wo in dem
Code sich der Denkfehler verbirgt? Danke.
1 | #include <SPI.h>
|
2 | #include "epd1in54_V2.h" //von AZ delivery
|
3 | #include "epdpaint.h"
|
4 | #define COLORED 0
|
5 | #define UNCOLORED 1
|
6 |
|
7 | int cnt = 0;
|
8 | String tstr = "";
|
9 | unsigned char image[1000];
|
10 | Paint paint(image, 32, 32);
|
11 | Epd epd(33, 25, 26, 27); //pins festlegen
|
12 |
|
13 | void setup()
|
14 | {
|
15 | epd.LDirInit();
|
16 | epd.Clear();
|
17 | }
|
18 |
|
19 | void loop()
|
20 | {
|
21 | cnt++;
|
22 | tstr = String(cnt);
|
23 | paint.SetWidth(32);
|
24 | paint.SetHeight(32);
|
25 | paint.Clear(UNCOLORED);
|
26 | paint.DrawStringAt(0,0, tstr.c_str(), &Font24, COLORED);
|
27 | epd.SetFrameMemory(paint.GetImage(), 0, 0, 32, 32);
|
28 | epd.DisplayFrame();
|
29 | }
|