1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#include "badge/display.h"
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
// #include <GxEPD2_3C.h>
#include <GxEPD2_BW.h>
#include "badge/config.h"
#if UVOK_EPAP_DISPLAY == DISPLAY_WAVESHARE_219_YBW
// HINT: Update the library code, set budy timeout to 30 or 60 seconds!
// Small color
GxEPD2_3C<GxEPD2_213_Z19c, GxEPD2_213_Z19c::HEIGHT> display(GxEPD2_213_Z19c(22, 21, 17, 16));
#elif UVOK_EPAP_DISPLAY == DISPLAY_WAVESHARE_290_BW
// larger b/w
// or T5
// GxEPD2_BW<GxEPD2_290_T5D, GxEPD2_290_T5D::HEIGHT> display(GxEPD2_290_T5D(22, 21, 17, 16));
GxEPD2_BW<GxEPD2_290_M06, GxEPD2_290_M06::HEIGHT> display(GxEPD2_290_M06(22, 21, 17, 16));
#elif UVOK_EPAP_DISPLAY == DISPLAY_ELECROW_290_BW
/*
#define SCK 12
#define MOSI 11
#define RES 47
#define DC 46
#define CS 45
#define BUSY 48
*/
GxEPD2_BW<GxEPD2_290_T94, GxEPD2_290_T94::HEIGHT> display(GxEPD2_290_T94(45, 46, 47, 48));
#else
#error "define display"
#endif
void de::uvok::badge::display_init(void)
{
Serial.println("Init display...");
#if UVOK_EPAP_DISPLAY == DISPLAY_ELECROW_290_BW
// Turn on once, let controller handle the rest, lest I want to do re-init...
pinMode(7, OUTPUT); // Set pin 7 as output mode
digitalWrite(7, HIGH); // Set pin 7 to high level to turn on the screen power
display.init(115200, true);
#else
display.init(115200, true, 2, false); // USE THIS for Waveshare boards with "clever" reset circuit, 2ms reset pulse
#endif
display.hibernate();
Serial.println("Display done.");
}
#include "chee.c"
void de::uvok::badge::display_demo(void)
{
#define TEXT_BORDER 10
// display.clearScreen();
static const char s_hungry[] = "hungry";
display.setRotation(1);
display.setTextColor(GxEPD_BLACK);
int16_t tbx, tby;
uint16_t tbw, tbh;
display.setFont(&FreeMonoBold9pt7b);
display.getTextBounds(s_hungry, 0, 0, &tbx, &tby, &tbw, &tbh);
// center the bounding box by transposition of the origin:
uint16_t x = display.width() - tbw - TEXT_BORDER - tbx;
uint16_t y = ((display.height() - tbh) / 2) - tby;
display.setFullWindow();
display.firstPage();
do
{
display.drawXBitmap(0, 0, chee_bits, chee_width, chee_height, GxEPD_BLACK);
display.getTextBounds(s_hungry, x, y, &tbx, &tby, &tbw, &tbh);
display.fillRect(tbx - TEXT_BORDER, tby - TEXT_BORDER, tbw + 2 * TEXT_BORDER, tbh + 2 * TEXT_BORDER,
GxEPD_WHITE);
display.setCursor(x, y);
display.print(s_hungry);
} while (display.nextPage());
display.hibernate();
#undef TEXT_BORDER
}
|