test program for 4.2inch e-Paper

Dependencies:   EPD_4R2

/media/uploads/kenjiArai/epaper4r2.jpg

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?

UserRevisionLine numberNew 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 }