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.

Dependencies:   mbed

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);