| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | /** *  @filename   :   epd2in13-demo.ino *  @brief      :   2.13inch e-paper display demo *  @author     :   Yehui from Waveshare * *  Copyright (C) Waveshare     September 9 2017 * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documnetation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to  whom the Software is * furished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */#include <SPI.h>#include "epd2in13.h"#include "epdpaint.h"#include "imagedata.h"#define COLORED     0#define UNCOLORED   1/**  * 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   * 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);Epd epd;unsigned long time_start_ms;unsigned long time_now_s;void setup() {  // put your setup code here, to run once:  Serial.begin(9600);  if (epd.Init(lut_full_update) != 0) {      Serial.print("e-Paper init failed");      return;  }  epd.ClearFrameMemory(0xFF);   // bit set = white, bit reset = black    paint.SetRotate(ROTATE_0);  paint.SetWidth(128);    // width should be the multiple of 8   paint.SetHeight(24);  /* For simplicity, the arguments are explicit numerical coordinates */  paint.Clear(COLORED);  paint.DrawStringAt(30, 4, "Hello world!", &Font12, UNCOLORED);  epd.SetFrameMemory(paint.GetImage(), 0, 10, paint.GetWidth(), paint.GetHeight());  paint.Clear(UNCOLORED);  paint.DrawStringAt(30, 4, "e-Paper Demo", &Font12, COLORED);  epd.SetFrameMemory(paint.GetImage(), 0, 30, paint.GetWidth(), paint.GetHeight());  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());  paint.Clear(UNCOLORED);  paint.DrawCircle(32, 32, 30, COLORED);  epd.SetFrameMemory(paint.GetImage(), 72, 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());  paint.Clear(UNCOLORED);  paint.DrawFilledCircle(32, 32, 30, COLORED);  epd.SetFrameMemory(paint.GetImage(), 72, 130, paint.GetWidth(), paint.GetHeight());  epd.DisplayFrame();  delay(2000);  if (epd.Init(lut_partial_update) != 0) {      Serial.print("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();  time_start_ms = millis();}void loop() {  // put your main code here, to run repeatedly:  time_now_s = (millis() - time_start_ms) / 1000;  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_90);  paint.Clear(UNCOLORED);  paint.DrawStringAt(0, 4, time_string, &Font24, COLORED);  epd.SetFrameMemory(paint.GetImage(), 80, 72, paint.GetWidth(), paint.GetHeight());  epd.DisplayFrame();  delay(500);}
 |