Kenji Arai
/
ePD_4R2inch_test_program_on_nRF52
test program for 4.2inch e-Paper
main.cpp@0:2b41523348df, 2019-08-28 (annotated)
- Committer:
- kenjiArai
- Date:
- Wed Aug 28 23:37:43 2019 +0000
- Revision:
- 0:2b41523348df
Test program for 4.2inch e-Paper HAT (C) made by WAVESHARE
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:2b41523348df | 1 | /* |
kenjiArai | 0:2b41523348df | 2 | * e-Paper control program |
kenjiArai | 0:2b41523348df | 3 | * |
kenjiArai | 0:2b41523348df | 4 | * Copyright (c) 2019 Kenji Arai / JH1PJL |
kenjiArai | 0:2b41523348df | 5 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 0:2b41523348df | 6 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 0:2b41523348df | 7 | * Created: April 27th, 2019 |
kenjiArai | 0:2b41523348df | 8 | * Revised: August 29th, 2019 |
kenjiArai | 0:2b41523348df | 9 | * |
kenjiArai | 0:2b41523348df | 10 | * Tested on nRF52-DK with mbed-os5.13.3 |
kenjiArai | 0:2b41523348df | 11 | * |
kenjiArai | 0:2b41523348df | 12 | * Refrence software |
kenjiArai | 0:2b41523348df | 13 | * https://github.com/waveshare/e-Paper |
kenjiArai | 0:2b41523348df | 14 | * https://os.mbed.com/users/imachooon/code/epd1in54/ |
kenjiArai | 0:2b41523348df | 15 | * Thanks imamura-san |
kenjiArai | 0:2b41523348df | 16 | * |
kenjiArai | 0:2b41523348df | 17 | * Technical documents |
kenjiArai | 0:2b41523348df | 18 | * https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_(B) |
kenjiArai | 0:2b41523348df | 19 | * |
kenjiArai | 0:2b41523348df | 20 | * Product |
kenjiArai | 0:2b41523348df | 21 | * http://akizukidenshi.com/catalog/g/gP-13757/ |
kenjiArai | 0:2b41523348df | 22 | * https://www.waveshare.com/2.13inch-e-paper-hat-b.htm |
kenjiArai | 0:2b41523348df | 23 | */ |
kenjiArai | 0:2b41523348df | 24 | |
kenjiArai | 0:2b41523348df | 25 | // Include -------------------------------------------------------------------- |
kenjiArai | 0:2b41523348df | 26 | #include "mbed.h" |
kenjiArai | 0:2b41523348df | 27 | #include "epd4in2b.h" |
kenjiArai | 0:2b41523348df | 28 | #include "epdpaint.h" |
kenjiArai | 0:2b41523348df | 29 | |
kenjiArai | 0:2b41523348df | 30 | // Definition ----------------------------------------------------------------- |
kenjiArai | 0:2b41523348df | 31 | #define COLORED 0 |
kenjiArai | 0:2b41523348df | 32 | #define UNCOLORED 1 |
kenjiArai | 0:2b41523348df | 33 | |
kenjiArai | 0:2b41523348df | 34 | #define DEBUG 0 |
kenjiArai | 0:2b41523348df | 35 | |
kenjiArai | 0:2b41523348df | 36 | #if DEBUG |
kenjiArai | 0:2b41523348df | 37 | #define DBG(...) pc.printf(__VA_ARGS__) |
kenjiArai | 0:2b41523348df | 38 | #else |
kenjiArai | 0:2b41523348df | 39 | #define DBG(...) {;} |
kenjiArai | 0:2b41523348df | 40 | #endif |
kenjiArai | 0:2b41523348df | 41 | |
kenjiArai | 0:2b41523348df | 42 | // Constructor ---------------------------------------------------------------- |
kenjiArai | 0:2b41523348df | 43 | #if defined(TARGET_NRF52832) |
kenjiArai | 0:2b41523348df | 44 | // mosi,miso, sclk, cs, dc, rst, busy, pwr |
kenjiArai | 0:2b41523348df | 45 | Epd epd = Epd(P0_23, NC, P0_25, P0_22, P0_19, P0_20, P0_2, P0_11); |
kenjiArai | 0:2b41523348df | 46 | DigitalIn button1(P0_13); |
kenjiArai | 0:2b41523348df | 47 | #elif defined(TARGET_NRF52840) |
kenjiArai | 0:2b41523348df | 48 | // mosi,miso, sclk, cs, dc, rst, busy, pwr |
kenjiArai | 0:2b41523348df | 49 | Epd epd = Epd(P1_13, NC, P1_15, P1_12, P1_10, P1_11, P0_2, P1_1); |
kenjiArai | 0:2b41523348df | 50 | DigitalIn button1(P0_11); |
kenjiArai | 0:2b41523348df | 51 | #else |
kenjiArai | 0:2b41523348df | 52 | #error "Only for nRF52840 & nRF52832 CPU" |
kenjiArai | 0:2b41523348df | 53 | #endif |
kenjiArai | 0:2b41523348df | 54 | Serial pc(USBTX, USBRX); |
kenjiArai | 0:2b41523348df | 55 | Timer t; |
kenjiArai | 0:2b41523348df | 56 | |
kenjiArai | 0:2b41523348df | 57 | // RAM ------------------------------------------------------------------------ |
kenjiArai | 0:2b41523348df | 58 | uint8_t image[EPD_HEIGHT*(EPD_WIDTH/8 + 1)]; |
kenjiArai | 0:2b41523348df | 59 | |
kenjiArai | 0:2b41523348df | 60 | // ROM / Constant data -------------------------------------------------------- |
kenjiArai | 0:2b41523348df | 61 | |
kenjiArai | 0:2b41523348df | 62 | // Function prototypes -------------------------------------------------------- |
kenjiArai | 0:2b41523348df | 63 | extern void time_enter_mode(void); |
kenjiArai | 0:2b41523348df | 64 | |
kenjiArai | 0:2b41523348df | 65 | //------------------------------------------------------------------------------ |
kenjiArai | 0:2b41523348df | 66 | // Control Program |
kenjiArai | 0:2b41523348df | 67 | //------------------------------------------------------------------------------ |
kenjiArai | 0:2b41523348df | 68 | void set_p14_for_detect() |
kenjiArai | 0:2b41523348df | 69 | { |
kenjiArai | 0:2b41523348df | 70 | NRF_GPIO->PIN_CNF[14] = 3UL << 16; // BTN2 |
kenjiArai | 0:2b41523348df | 71 | } |
kenjiArai | 0:2b41523348df | 72 | |
kenjiArai | 0:2b41523348df | 73 | int main() |
kenjiArai | 0:2b41523348df | 74 | { |
kenjiArai | 0:2b41523348df | 75 | time_t seconds; |
kenjiArai | 0:2b41523348df | 76 | char buf[32]; |
kenjiArai | 0:2b41523348df | 77 | |
kenjiArai | 0:2b41523348df | 78 | DBG("line:%d\r\n", __LINE__); |
kenjiArai | 0:2b41523348df | 79 | t.reset(); |
kenjiArai | 0:2b41523348df | 80 | t.start(); |
kenjiArai | 0:2b41523348df | 81 | if (button1 == 0) { // USER BUTTON1 is on then go to time enter mode |
kenjiArai | 0:2b41523348df | 82 | time_enter_mode(); |
kenjiArai | 0:2b41523348df | 83 | } |
kenjiArai | 0:2b41523348df | 84 | epd.PwrOn(); |
kenjiArai | 0:2b41523348df | 85 | ThisThread::sleep_for(10); |
kenjiArai | 0:2b41523348df | 86 | DBG("line:%d\r\n", __LINE__); |
kenjiArai | 0:2b41523348df | 87 | seconds = time(NULL); // read current time |
kenjiArai | 0:2b41523348df | 88 | if (epd.Init() != 0) { // initialize e-Paper control program |
kenjiArai | 0:2b41523348df | 89 | printf("e-Paper init failed"); |
kenjiArai | 0:2b41523348df | 90 | return -1; |
kenjiArai | 0:2b41523348df | 91 | } |
kenjiArai | 0:2b41523348df | 92 | DBG("line:%d\r\n", __LINE__); |
kenjiArai | 0:2b41523348df | 93 | epd.ClearFrame(); |
kenjiArai | 0:2b41523348df | 94 | ThisThread::sleep_for(200); |
kenjiArai | 0:2b41523348df | 95 | Paint paint(image, EPD_WIDTH, EPD_HEIGHT); |
kenjiArai | 0:2b41523348df | 96 | paint.Clear(UNCOLORED); |
kenjiArai | 0:2b41523348df | 97 | //paint.SetRotate(ROTATE_90); |
kenjiArai | 0:2b41523348df | 98 | DBG("line:%d\r\n", __LINE__); |
kenjiArai | 0:2b41523348df | 99 | paint.DrawStringAt(0, 4, "123456789012345678901234567890123456789012345678901234567890", |
kenjiArai | 0:2b41523348df | 100 | &Font12, COLORED); |
kenjiArai | 0:2b41523348df | 101 | paint.DrawStringAt(0, 16, " Waveshare 4.2 e-Paper WBY", |
kenjiArai | 0:2b41523348df | 102 | &Font12, COLORED); |
kenjiArai | 0:2b41523348df | 103 | paint.DrawStringAt(0, 30, "Run on mbed-os5.13.4 Latest Revision", |
kenjiArai | 0:2b41523348df | 104 | &Font16, COLORED); |
kenjiArai | 0:2b41523348df | 105 | paint.DrawStringAt(0, 45, " tested on Nordic nRF52-DK & nRF52840-DK", |
kenjiArai | 0:2b41523348df | 106 | &Font12, COLORED); |
kenjiArai | 0:2b41523348df | 107 | paint.DrawStringAt(0, 58, " by JH1PJL Kenji Arai", |
kenjiArai | 0:2b41523348df | 108 | &Font12, COLORED); |
kenjiArai | 0:2b41523348df | 109 | DBG("line:%d\r\n", __LINE__); |
kenjiArai | 0:2b41523348df | 110 | strftime(buf, 30, "'%y-%m-%d %H:%M", localtime(&seconds)); |
kenjiArai | 0:2b41523348df | 111 | paint.DrawStringAt(0, 90, buf, &Font16, COLORED); |
kenjiArai | 0:2b41523348df | 112 | strftime(buf, 30, " %B %d,'%y, %H:%M:%S", localtime(&seconds)); |
kenjiArai | 0:2b41523348df | 113 | pc.puts(buf); |
kenjiArai | 0:2b41523348df | 114 | paint.DrawStringAt(0, 110, " e-Paper 4.2inch", |
kenjiArai | 0:2b41523348df | 115 | &Font8, COLORED); |
kenjiArai | 0:2b41523348df | 116 | paint.DrawStringAt(0, 120, " e-Paper 4.2inch", |
kenjiArai | 0:2b41523348df | 117 | &Font12, COLORED); |
kenjiArai | 0:2b41523348df | 118 | paint.DrawStringAt(0, 135, " e-Paper 4.2inch", |
kenjiArai | 0:2b41523348df | 119 | &Font16, COLORED); |
kenjiArai | 0:2b41523348df | 120 | paint.DrawStringAt(0, 150, " e-Paper 4.2inch", |
kenjiArai | 0:2b41523348df | 121 | &Font20, COLORED); |
kenjiArai | 0:2b41523348df | 122 | paint.DrawStringAt(0, 175, " e-Paper 4.2inch", |
kenjiArai | 0:2b41523348df | 123 | &Font24, COLORED); |
kenjiArai | 0:2b41523348df | 124 | paint.DrawStringAt(0, 200, " e-Paper 4.2inch", |
kenjiArai | 0:2b41523348df | 125 | &Font2829, COLORED); |
kenjiArai | 0:2b41523348df | 126 | paint.DrawStringAt(0, 230, " e-Paper 4.2inch", |
kenjiArai | 0:2b41523348df | 127 | &Font4040, COLORED); |
kenjiArai | 0:2b41523348df | 128 | |
kenjiArai | 0:2b41523348df | 129 | epd.SetPartialWindowBlack(paint.GetImage(), 0, 8, |
kenjiArai | 0:2b41523348df | 130 | paint.GetWidth(), paint.GetHeight()); |
kenjiArai | 0:2b41523348df | 131 | paint.Clear(UNCOLORED); |
kenjiArai | 0:2b41523348df | 132 | //paint.SetRotate(ROTATE_90); |
kenjiArai | 0:2b41523348df | 133 | paint.DrawFilledRectangle(0, 28, 400, 29, COLORED); |
kenjiArai | 0:2b41523348df | 134 | paint.DrawFilledRectangle(0, 43, 400, 44, COLORED); |
kenjiArai | 0:2b41523348df | 135 | paint.DrawFilledRectangle(0, 74, 350, 80, COLORED); |
kenjiArai | 0:2b41523348df | 136 | paint.DrawFilledCircle(350, 76, 30, COLORED); |
kenjiArai | 0:2b41523348df | 137 | epd.SetPartialWindowRed(paint.GetImage(), 0, 8, |
kenjiArai | 0:2b41523348df | 138 | paint.GetWidth(), paint.GetHeight()); |
kenjiArai | 0:2b41523348df | 139 | epd.DisplayFrame(); |
kenjiArai | 0:2b41523348df | 140 | epd.Sleep(); |
kenjiArai | 0:2b41523348df | 141 | epd.PwrOff(); |
kenjiArai | 0:2b41523348df | 142 | ThisThread::sleep_for(1000); |
kenjiArai | 0:2b41523348df | 143 | pc.printf(" Display + Refresh time = %5.1f Sec\r\n", t.read()); |
kenjiArai | 0:2b41523348df | 144 | ThisThread::sleep_for(10); |
kenjiArai | 0:2b41523348df | 145 | set_p14_for_detect(); |
kenjiArai | 0:2b41523348df | 146 | NRF_POWER->SYSTEMOFF = 1; |
kenjiArai | 0:2b41523348df | 147 | while(true) { |
kenjiArai | 0:2b41523348df | 148 | ; |
kenjiArai | 0:2b41523348df | 149 | } |
kenjiArai | 0:2b41523348df | 150 | system_reset(); // restart |
kenjiArai | 0:2b41523348df | 151 | } |