Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:c0e0a185358d, 2019-04-30 (annotated)
- Committer:
- kenjiArai
- Date:
- Tue Apr 30 02:13:16 2019 +0000
- Revision:
- 0:c0e0a185358d
- Child:
- 1:271991ff8004
test program for 2.13inch e-Paper HAT (C)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 0:c0e0a185358d | 1 | /* |
kenjiArai | 0:c0e0a185358d | 2 | * e-Paper control program |
kenjiArai | 0:c0e0a185358d | 3 | * |
kenjiArai | 0:c0e0a185358d | 4 | * Copyright (c) 2019 Kenji Arai / JH1PJL |
kenjiArai | 0:c0e0a185358d | 5 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 0:c0e0a185358d | 6 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 0:c0e0a185358d | 7 | * Created: April 27th, 2019 |
kenjiArai | 0:c0e0a185358d | 8 | * Revised: April 30th, 2019 |
kenjiArai | 0:c0e0a185358d | 9 | * |
kenjiArai | 0:c0e0a185358d | 10 | * Tested on Nucleo-F446RE with mbed-os5.12.2 |
kenjiArai | 0:c0e0a185358d | 11 | * |
kenjiArai | 0:c0e0a185358d | 12 | * Refrence software |
kenjiArai | 0:c0e0a185358d | 13 | * https://github.com/waveshare/e-Paper |
kenjiArai | 0:c0e0a185358d | 14 | * https://os.mbed.com/users/imachooon/code/epd1in54/ |
kenjiArai | 0:c0e0a185358d | 15 | * Thanks imamura-san |
kenjiArai | 0:c0e0a185358d | 16 | * |
kenjiArai | 0:c0e0a185358d | 17 | * Technical documents |
kenjiArai | 0:c0e0a185358d | 18 | * https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT_(B) |
kenjiArai | 0:c0e0a185358d | 19 | * |
kenjiArai | 0:c0e0a185358d | 20 | * Product |
kenjiArai | 0:c0e0a185358d | 21 | * http://akizukidenshi.com/catalog/g/gP-13757/ |
kenjiArai | 0:c0e0a185358d | 22 | * https://www.waveshare.com/2.13inch-e-paper-hat-b.htm |
kenjiArai | 0:c0e0a185358d | 23 | */ |
kenjiArai | 0:c0e0a185358d | 24 | |
kenjiArai | 0:c0e0a185358d | 25 | // Include -------------------------------------------------------------------- |
kenjiArai | 0:c0e0a185358d | 26 | #include "mbed.h" |
kenjiArai | 0:c0e0a185358d | 27 | #include "epd2in13c.h" |
kenjiArai | 0:c0e0a185358d | 28 | #include "epdpaint.h" |
kenjiArai | 0:c0e0a185358d | 29 | |
kenjiArai | 0:c0e0a185358d | 30 | // Definition ----------------------------------------------------------------- |
kenjiArai | 0:c0e0a185358d | 31 | #define COLORED 0 |
kenjiArai | 0:c0e0a185358d | 32 | #define UNCOLORED 1 |
kenjiArai | 0:c0e0a185358d | 33 | |
kenjiArai | 0:c0e0a185358d | 34 | // Constructor ---------------------------------------------------------------- |
kenjiArai | 0:c0e0a185358d | 35 | // mosi, miso, sclk, cs, dc, rst, busy, pwr |
kenjiArai | 0:c0e0a185358d | 36 | Epd epd = Epd( D4, NC, D3,D10, D9, D8, D7, NC); |
kenjiArai | 0:c0e0a185358d | 37 | DigitalOut myled(LED1); |
kenjiArai | 0:c0e0a185358d | 38 | DigitalIn sw(USER_BUTTON); |
kenjiArai | 0:c0e0a185358d | 39 | Serial pc(USBTX, USBRX); |
kenjiArai | 0:c0e0a185358d | 40 | Timer t; |
kenjiArai | 0:c0e0a185358d | 41 | |
kenjiArai | 0:c0e0a185358d | 42 | // RAM ------------------------------------------------------------------------ |
kenjiArai | 0:c0e0a185358d | 43 | uint8_t image[EPD_HEIGHT*(EPD_WIDTH/8 + 1)]; |
kenjiArai | 0:c0e0a185358d | 44 | |
kenjiArai | 0:c0e0a185358d | 45 | // ROM / Constant data -------------------------------------------------------- |
kenjiArai | 0:c0e0a185358d | 46 | |
kenjiArai | 0:c0e0a185358d | 47 | // Function prototypes -------------------------------------------------------- |
kenjiArai | 0:c0e0a185358d | 48 | extern void time_enter_mode(void); |
kenjiArai | 0:c0e0a185358d | 49 | |
kenjiArai | 0:c0e0a185358d | 50 | //------------------------------------------------------------------------------ |
kenjiArai | 0:c0e0a185358d | 51 | // Control Program |
kenjiArai | 0:c0e0a185358d | 52 | //------------------------------------------------------------------------------ |
kenjiArai | 0:c0e0a185358d | 53 | int main() |
kenjiArai | 0:c0e0a185358d | 54 | { |
kenjiArai | 0:c0e0a185358d | 55 | time_t seconds; |
kenjiArai | 0:c0e0a185358d | 56 | char buf[32]; |
kenjiArai | 0:c0e0a185358d | 57 | |
kenjiArai | 0:c0e0a185358d | 58 | t.reset(); |
kenjiArai | 0:c0e0a185358d | 59 | t.start(); |
kenjiArai | 0:c0e0a185358d | 60 | if (sw == 0) { // USER BUTTON is on then go to time enter mode |
kenjiArai | 0:c0e0a185358d | 61 | time_enter_mode(); |
kenjiArai | 0:c0e0a185358d | 62 | } |
kenjiArai | 0:c0e0a185358d | 63 | seconds = time(NULL); // read current time |
kenjiArai | 0:c0e0a185358d | 64 | if (epd.Init() != 0) { // initialize e-Paper control program |
kenjiArai | 0:c0e0a185358d | 65 | printf("e-Paper init failed"); |
kenjiArai | 0:c0e0a185358d | 66 | return -1; |
kenjiArai | 0:c0e0a185358d | 67 | } |
kenjiArai | 0:c0e0a185358d | 68 | epd.ClearFrame(); |
kenjiArai | 0:c0e0a185358d | 69 | ThisThread::sleep_for(200); |
kenjiArai | 0:c0e0a185358d | 70 | Paint paint(image, EPD_WIDTH, EPD_HEIGHT); |
kenjiArai | 0:c0e0a185358d | 71 | paint.Clear(UNCOLORED); |
kenjiArai | 0:c0e0a185358d | 72 | paint.SetRotate(ROTATE_90); |
kenjiArai | 0:c0e0a185358d | 73 | paint.DrawStringAt(0, 4, "12345678901234567890123456789", |
kenjiArai | 0:c0e0a185358d | 74 | &Font12, COLORED); |
kenjiArai | 0:c0e0a185358d | 75 | paint.DrawStringAt(0, 16, "Waveshare 2.13 e-Paper WBY", |
kenjiArai | 0:c0e0a185358d | 76 | &Font12, COLORED); |
kenjiArai | 0:c0e0a185358d | 77 | paint.DrawStringAt(0, 30, "Run on mbed-os5.12", |
kenjiArai | 0:c0e0a185358d | 78 | &Font16, COLORED); |
kenjiArai | 0:c0e0a185358d | 79 | paint.DrawStringAt(0, 42, " tested on Nucleo-F446RE", |
kenjiArai | 0:c0e0a185358d | 80 | &Font12, COLORED); |
kenjiArai | 0:c0e0a185358d | 81 | paint.DrawStringAt(0, 54, " by JH1PJL ", |
kenjiArai | 0:c0e0a185358d | 82 | &Font12, COLORED); |
kenjiArai | 0:c0e0a185358d | 83 | strftime(buf, 30, "'%y-%m-%d %H:%M", localtime(&seconds)); |
kenjiArai | 0:c0e0a185358d | 84 | paint.DrawStringAt(0, 90, buf, &Font16, COLORED); |
kenjiArai | 0:c0e0a185358d | 85 | strftime(buf, 30, " %B %d,'%y, %H:%M:%S", localtime(&seconds)); |
kenjiArai | 0:c0e0a185358d | 86 | pc.puts(buf); |
kenjiArai | 0:c0e0a185358d | 87 | epd.SetPartialWindowBlack(paint.GetImage(), 0, 8, |
kenjiArai | 0:c0e0a185358d | 88 | paint.GetWidth(), paint.GetHeight()); |
kenjiArai | 0:c0e0a185358d | 89 | paint.Clear(UNCOLORED); |
kenjiArai | 0:c0e0a185358d | 90 | paint.SetRotate(ROTATE_90); |
kenjiArai | 0:c0e0a185358d | 91 | paint.DrawFilledRectangle(0, 74, 180, 80, COLORED); |
kenjiArai | 0:c0e0a185358d | 92 | paint.DrawFilledCircle(180, 76, 18, COLORED); |
kenjiArai | 0:c0e0a185358d | 93 | epd.SetPartialWindowYellow(paint.GetImage(), 0, 8, |
kenjiArai | 0:c0e0a185358d | 94 | paint.GetWidth(), paint.GetHeight()); |
kenjiArai | 0:c0e0a185358d | 95 | epd.DisplayFrame(); |
kenjiArai | 0:c0e0a185358d | 96 | epd.Sleep(); |
kenjiArai | 0:c0e0a185358d | 97 | pc.printf(" Display + Refresh time = %5.1f Sec\r\n", t.read()); |
kenjiArai | 0:c0e0a185358d | 98 | ThisThread::sleep_for((1000 * 60 * 5) - t.read_ms()); // sleep 5 minutes |
kenjiArai | 0:c0e0a185358d | 99 | system_reset(); // restart |
kenjiArai | 0:c0e0a185358d | 100 | } |