E_paper, E_ink, Screen size 1.54", resolution 200x200, 4 wire spi, Waveshare, Black and White, Kl25Z, 8 wire print connector, supply 3.3 Volt, IL0373 Controller, font size is 8, 12, 16 and 24.
Diff: main.cpp
- Revision:
- 7:25cadf37fd86
- Parent:
- 6:469fb6b0d26d
- Child:
- 8:01db118d1694
--- a/main.cpp Wed Mar 28 09:21:33 2018 +0000 +++ b/main.cpp Wed Mar 28 10:17:33 2018 +0000 @@ -42,123 +42,137 @@ SPI epaper(PTD2,PTD3,PTD1); //MOSI, MISO, CLK DigitalOut myled(LED1); -// See --- epdif.h --- -DigitalOut pins_out[] = {PTC17, PTD5, PTD0}; //reset_pin, dc_pin, cs_pin -DigitalIn pins_in[] = {PTA13}; //busy pin /** * Due to RAM not enough in Arduino UNO, a frame buffer is not allowed. - * In this case, a smaller image buffer is allocated and you have to + * In this case, a smaller image buffer is allocated and you have to * update a partial display several times. * 1 byte = 8 pixels, therefore you have to set 8*N pixels at a time. */ unsigned char image[1024]; -Paint paint(image, 0, 0); // width should be the multiple of 8 +Paint paint(image, 0, 0); // width should be the multiple of 8 Epd epd; unsigned long time_start_ms; unsigned long time_now_s; -void setup() { - // put your setup code here, to run once: - pc.baud(9600); - if (epd.Init(lut_full_update) != 0) { - pc.printf("e-Paper init failed"); - return; - } +void setup() +{ + // put your setup code here, to run once: + if (epd.Init(lut_full_update) != 0) { + pc.printf("e-Paper init failed"); + return; + } + + /** + * there are 2 memory areas embedded in the e-paper display + * and once the display is refreshed, the memory area will be auto-toggled, + * i.e. the next action of SetFrameMemory will set the other memory area + * therefore you have to clear the frame memory twice. + */ - /** - * there are 2 memory areas embedded in the e-paper display - * and once the display is refreshed, the memory area will be auto-toggled, - * i.e. the next action of SetFrameMemory will set the other memory area - * therefore you have to clear the frame memory twice. - */ - epd.ClearFrameMemory(0xFF); // bit set = white, bit reset = black - epd.DisplayFrame(); - epd.ClearFrameMemory(0xFF); // bit set = white, bit reset = black - epd.DisplayFrame(); + pc.printf("Display frame 1\n\r"); + epd.ClearFrameMemory(0xFF); // bit set = white, bit reset = black + pc.printf("Display frame 2\n\r"); + epd.DisplayFrame(); + pc.printf("Display frame 3\n\r"); + epd.ClearFrameMemory(0xFF); // bit set = white, bit reset = black + pc.printf("Display frame 4\n\r"); + epd.DisplayFrame(); + + pc.printf("Rotate 0\n\r"); + paint.SetRotate(ROTATE_0); + paint.SetWidth(200); + paint.SetHeight(24); - paint.SetRotate(ROTATE_0); - paint.SetWidth(200); - paint.SetHeight(24); + /* For simplicity, the arguments are explicit numerical coordinates */ + + pc.printf("ColoRed\n\r"); + paint.Clear(COLORED); + paint.DrawStringAt(30, 4, "Hello world!", &Font16, UNCOLORED); + epd.SetFrameMemory(paint.GetImage(), 0, 10, paint.GetWidth(), paint.GetHeight()); - /* For simplicity, the arguments are explicit numerical coordinates */ - paint.Clear(COLORED); - paint.DrawStringAt(30, 4, "Hello world!", &Font16, UNCOLORED); - epd.SetFrameMemory(paint.GetImage(), 0, 10, paint.GetWidth(), paint.GetHeight()); - - paint.Clear(UNCOLORED); - paint.DrawStringAt(30, 4, "e-Paper Demo", &Font16, COLORED); - epd.SetFrameMemory(paint.GetImage(), 0, 30, paint.GetWidth(), paint.GetHeight()); + paint.Clear(UNCOLORED); + paint.DrawStringAt(30, 4, "e-Paper Demo", &Font16, COLORED); + epd.SetFrameMemory(paint.GetImage(), 0, 30, paint.GetWidth(), paint.GetHeight()); + + paint.SetWidth(64); + paint.SetHeight(64); - paint.SetWidth(64); - paint.SetHeight(64); - - paint.Clear(UNCOLORED); - paint.DrawRectangle(0, 0, 40, 50, COLORED); - paint.DrawLine(0, 0, 40, 50, COLORED); - paint.DrawLine(40, 0, 0, 50, COLORED); - epd.SetFrameMemory(paint.GetImage(), 16, 60, paint.GetWidth(), paint.GetHeight()); + pc.printf("Rectangle \n\r"); + paint.Clear(UNCOLORED); + paint.DrawRectangle(0, 0, 40, 50, COLORED); + paint.DrawLine(0, 0, 40, 50, COLORED); + paint.DrawLine(40, 0, 0, 50, COLORED); + epd.SetFrameMemory(paint.GetImage(), 16, 60, paint.GetWidth(), paint.GetHeight()); - paint.Clear(UNCOLORED); - paint.DrawCircle(32, 32, 30, COLORED); - epd.SetFrameMemory(paint.GetImage(), 120, 60, paint.GetWidth(), paint.GetHeight()); + pc.printf("Circle \n\r"); + paint.Clear(UNCOLORED); + paint.DrawCircle(32, 32, 30, COLORED); + epd.SetFrameMemory(paint.GetImage(), 120, 60, paint.GetWidth(), paint.GetHeight()); - paint.Clear(UNCOLORED); - paint.DrawFilledRectangle(0, 0, 40, 50, COLORED); - epd.SetFrameMemory(paint.GetImage(), 16, 130, paint.GetWidth(), paint.GetHeight()); + pc.printf("Fille Rectangle \n\r"); + paint.Clear(UNCOLORED); + paint.DrawFilledRectangle(0, 0, 40, 50, COLORED); + epd.SetFrameMemory(paint.GetImage(), 16, 130, paint.GetWidth(), paint.GetHeight()); - paint.Clear(UNCOLORED); - paint.DrawFilledCircle(32, 32, 30, COLORED); - epd.SetFrameMemory(paint.GetImage(), 120, 130, paint.GetWidth(), paint.GetHeight()); - epd.DisplayFrame(); + pc.printf("Filled circle \n\r"); + paint.Clear(UNCOLORED); + paint.DrawFilledCircle(32, 32, 30, COLORED); + epd.SetFrameMemory(paint.GetImage(), 120, 130, paint.GetWidth(), paint.GetHeight()); + epd.DisplayFrame(); - wait_ms(2000); + wait_ms(2000); - if (epd.Init(lut_partial_update) != 0) { - pc.printf("e-Paper init failed"); - return; - } + if (epd.Init(lut_partial_update) != 0) { + pc.printf("e-Paper init failed"); + return; + } - /** - * there are 2 memory areas embedded in the e-paper display - * and once the display is refreshed, the memory area will be auto-toggled, - * i.e. the next action of SetFrameMemory will set the other memory area - * therefore you have to set the frame memory and refresh the display twice. - */ - epd.SetFrameMemory(IMAGE_DATA); - epd.DisplayFrame(); - epd.SetFrameMemory(IMAGE_DATA); - epd.DisplayFrame(); + /** + * there are 2 memory areas embedded in the e-paper display + * and once the display is refreshed, the memory area will be auto-toggled, + * i.e. the next action of SetFrameMemory will set the other memory area + * therefore you have to set the frame memory and refresh the display twice. + */ + epd.SetFrameMemory(IMAGE_DATA); + epd.DisplayFrame(); + epd.SetFrameMemory(IMAGE_DATA); + epd.DisplayFrame(); - //time_start_ms = millis(); - time_start_ms = 0; + //time_start_ms = millis(); + time_start_ms = 0; } -void loop() { - // put your main code here, to run repeatedly: - //time_now_s = (millis() - time_start_ms) / 1000; - time_now_s = 999; - char time_string[] = {'0', '0', ':', '0', '0', '\0'}; - time_string[0] = time_now_s / 60 / 10 + '0'; - time_string[1] = time_now_s / 60 % 10 + '0'; - time_string[3] = time_now_s % 60 / 10 + '0'; - time_string[4] = time_now_s % 60 % 10 + '0'; +void loop() +{ + // put your main code here, to run repeatedly: + //time_now_s = (millis() - time_start_ms) / 1000; + time_now_s = 999; + char time_string[] = {'0', '0', ':', '0', '0', '\0'}; + time_string[0] = time_now_s / 60 / 10 + '0'; + time_string[1] = time_now_s / 60 % 10 + '0'; + time_string[3] = time_now_s % 60 / 10 + '0'; + time_string[4] = time_now_s % 60 % 10 + '0'; - paint.SetWidth(32); - paint.SetHeight(96); - paint.SetRotate(ROTATE_270); + paint.SetWidth(32); + paint.SetHeight(96); + paint.SetRotate(ROTATE_270); - paint.Clear(UNCOLORED); - paint.DrawStringAt(0, 4, time_string, &Font24, COLORED); - epd.SetFrameMemory(paint.GetImage(), 80, 72, paint.GetWidth(), paint.GetHeight()); - epd.DisplayFrame(); + paint.Clear(UNCOLORED); + paint.DrawStringAt(0, 4, time_string, &Font24, COLORED); + epd.SetFrameMemory(paint.GetImage(), 80, 72, paint.GetWidth(), paint.GetHeight()); + epd.DisplayFrame(); - wait_ms(500); + wait_ms(500); } -int main() { +int main() +{ + pc.printf("Waveshare 1.54 inch e-Paper start\n\r"); setup(); - + pc.printf("Loop\n\r"); + loop(); + pc.printf("Done\n\r"); while(1) { myled = 1; wait(0.2);