19269浏览
楼主: 驴友花雕

[项目] 【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏

[复制链接]

驴友花雕  中级技神
 楼主|

发表于 2021-11-16 11:15:51

   实验场景动态图

【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-16 12:44:49

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十七:EPD Eink 电子墨水显示器 SUNY 2.9 英寸 EPD 屏幕无线数字电子纸显示器模块  DEPG0290RWS800F6黑白红三色墨水屏(珠海三一科技)
  实验说明:使用傲雪驱动库e-Paper
  项目之二:傲雪黑白色电子计时器(测试2.9寸彩色屏)

   实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十七:EPD Eink 电子墨水显示器 SUNY 2.9 英寸 EPD 屏幕无线数字电子纸显示器模块  DEPG0290RWS800F6黑白红三色墨水屏(珠海三一科技)
  4.   实验说明:使用傲雪驱动库e-Paper
  5.   项目之二:傲雪黑白色电子计时器(测试2.9寸彩色屏)
  6. */
  7. #include <SPI.h>
  8. #include "epd2in9_V2.h"
  9. #include "epdpaint.h"
  10. #include "imagedata.h"
  11. #define COLORED     0
  12. #define UNCOLORED   1
  13. unsigned char image[1024];
  14. Paint paint(image, 0, 0);
  15. Epd epd;
  16. unsigned long time_start_ms;
  17. unsigned long time_now_s;
  18. void setup() {
  19.   Serial.begin(115200);
  20.   if (epd.Init() != 0) {
  21.     Serial.print("e-Paper init failed");
  22.     return;
  23.   }
  24.   epd.ClearFrameMemory(0xFF);
  25.   epd.DisplayFrame();
  26.   paint.SetRotate(ROTATE_0);
  27.   paint.SetWidth(128);
  28.   paint.SetHeight(24);
  29.   paint.Clear(COLORED);
  30.   paint.DrawStringAt(0, 4, "Hello world!", &Font12, UNCOLORED);
  31.   epd.SetFrameMemory(paint.GetImage(), 0, 10, paint.GetWidth(), paint.GetHeight());
  32.   paint.Clear(UNCOLORED);
  33.   paint.DrawStringAt(0, 4, "e-Paper Demo", &Font12, COLORED);
  34.   epd.SetFrameMemory(paint.GetImage(), 0, 30, paint.GetWidth(), paint.GetHeight());
  35.   paint.SetWidth(64);
  36.   paint.SetHeight(64);
  37.   paint.Clear(UNCOLORED);
  38.   paint.DrawRectangle(0, 0, 40, 50, COLORED);
  39.   paint.DrawLine(0, 0, 40, 50, COLORED);
  40.   paint.DrawLine(40, 0, 0, 50, COLORED);
  41.   epd.SetFrameMemory(paint.GetImage(), 8, 60, paint.GetWidth(), paint.GetHeight());
  42.   paint.Clear(UNCOLORED);
  43.   paint.DrawCircle(32, 32, 30, COLORED);
  44.   epd.SetFrameMemory(paint.GetImage(), 56, 60, paint.GetWidth(), paint.GetHeight());
  45.   paint.Clear(UNCOLORED);
  46.   paint.DrawFilledRectangle(0, 0, 40, 50, COLORED);
  47.   epd.SetFrameMemory(paint.GetImage(), 8, 130, paint.GetWidth(), paint.GetHeight());
  48.   paint.Clear(UNCOLORED);
  49.   paint.DrawFilledCircle(32, 32, 30, COLORED);
  50.   epd.SetFrameMemory(paint.GetImage(), 56, 130, paint.GetWidth(), paint.GetHeight());
  51.   epd.DisplayFrame();
  52.   delay(2000);
  53.   if (epd.Init() != 0) {
  54.     Serial.print("e-Paper init failed ");
  55.     return;
  56.   }
  57.   epd.SetFrameMemory_Base(IMAGE_DATA);
  58.   epd.DisplayFrame();
  59.   time_start_ms = millis();
  60. }
  61. void loop() {
  62.   time_now_s = (millis() - time_start_ms) / 1000;
  63.   char time_string[] = {'0', '0', ':', '0', '0', '\0'};
  64.   time_string[0] = time_now_s / 60 / 10 + '0';
  65.   time_string[1] = time_now_s / 60 % 10 + '0';
  66.   time_string[3] = time_now_s % 60 / 10 + '0';
  67.   time_string[4] = time_now_s % 60 % 10 + '0';
  68.   paint.SetWidth(32);
  69.   paint.SetHeight(96);
  70.   paint.SetRotate(ROTATE_90);
  71.   paint.Clear(UNCOLORED);
  72.   paint.DrawStringAt(0, 4, time_string, &Font24, COLORED);
  73.   epd.SetFrameMemory_Partial(paint.GetImage(), 80, 72, paint.GetWidth(), paint.GetHeight());
  74.   epd.DisplayFrame_Partial();
  75.   // delay(300);
  76. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-16 12:46:41

   实验场景图

【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-16 12:48:10

【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-16 12:49:16

   实验场景动态图

【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-16 19:20:50

【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-17 06:24:24

程序说明
以Arduino UNO控制2.9寸墨水屏为例,打开epd2in9_V2目录:

【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏图1

其中:
epd2in9_V2.ino:使用Arduino IDE打开即可;
epd2in9_V2.cpp(.h): 是2.9寸墨水屏的驱动程序;
epdif.cpp(.h): 是硬件接口定义,里面封装了读写管脚电平,SPI传输数据,以及管脚初始化;
font8.cpp、font12.cpp、font16.cpp、font20.cpp、font24.cpp、fonts.h:为不同大小字符的模;
imagedata.cpp(.h):是图片数据,这个可以通过Img2Lcd软件把2位深度的BMP图片转换成数组。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-17 06:35:47

程序分为底层硬件接口、中间层墨水屏驱动、上层应用三部分。

1、底层硬件接口
在epdif.cpp(.h)两个文件中定义了硬件接口,并封装好读写管脚电平、延时、SPI传输等函数。

(1)写管脚电平
  1. void DigitalWrite(int pin, int value)
复制代码
第一个参数为管脚、第二个为高低电平。


(2)读管脚电平
  1. int DigitalRead(int pin)
复制代码
参数为管脚,返回值为读取管脚的电平。


(3)延时
  1. DelayMs(unsigned int delaytime)
复制代码
毫秒级别延时。


(4)SPI输出数据
  1. SpiTransfer(unsigned char data)
复制代码
参数为char型,占8位。


(5)硬件初始化
  1. int IfInit(void)
复制代码
里面已经封装好了各管脚的输入输出,以及SPI的初始化。



回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-17 06:40:46

2、中间层墨水屏驱动

(1)实例化墨水屏
由于Arduino是C++开发,需要把墨水屏实例化:
  1. Epd epd;
复制代码



(2)墨水屏初始化,再屏幕开始工作时和退出睡眠模式之后调用
主要型号
  1. epd.Init(lut_full_update); //全刷初始化
  2. epd.Init(lut_partial_update); //局刷初始化
复制代码
其他型号
  1. epd.Init();
复制代码


(3)清屏,把墨水屏刷成白色
  1. epd.clear();
复制代码
可能某些程序里面会被拆分成两句,但是他们最终的效果都是一样的:
  1. epd.ClearFrameMemory(0xFF);
  2. epd.DisplayFrame();//打开显示
复制代码


(4)传输一帧的图片数据并显示
  1. void Display(const unsigned char* frame_buffer);
  2. void DisplayFrame(const unsigned char* frame_buffer_black, const unsigned char* frame_buffer_red); //三色屏幕
复制代码


(5)睡眠
  1. epd.Sleep();
复制代码
进入睡眠模式,墨水屏讲进入超低耗电,如果长时间不用需要刷白保存,否则长时间会有残影。


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-17 06:50:39

3、上层应用
上层应用也就是我们的需要用墨水屏实现的功能,一般就是画图、字符等功能,也就是epdpaint.cpp里面定义的功能
首先需要讲解一下缓存的坐标系,为了传输方便通常吧坐上定位原点,往右X轴增加,往下Y轴增加:

【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏图1

打开epdpaint.h可以看到如下:

【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏图2


只需要看public下函数即可:
(1)初始化图片缓存
  1. Paint(unsigned char* image, int width, int height);
复制代码
第一个参数是图片缓存,第二个参数是定义图片长度,第三个参数定义图片高度,你可能会在程序中看到如下
  1. Paint paint(image, 0, 0);    // width should be the multiple of 8
复制代码
第二、三个参数这里设置成0,是因为下面还可以设置。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-17 06:56:35

(2)设置高宽、获取高宽、设置翻转角度、获取翻转角度
  1. int  GetWidth(void); //得到宽度
  2. void SetWidth(int width);//设置宽度
  3. int  GetHeight(void);//得到高度
  4. void SetHeight(int height);//设置高度
  5. int  GetRotate(void);//得到翻转角度
  6. void SetRotate(int rotate);//设置翻转角度
复制代码


(3)获取图像缓存
  1. unsigned char* GetImage(void);
复制代码


(4)画点
  1. void DrawPixel(int x, int y, int colored);
复制代码
在坐标(x,y)


(5)写字符
  1. void DrawCharAt(int x, int y, char ascii_char, sFONT* font, int colored);
复制代码
在(x,y)这一点为左顶点写字符ascii_char,字体大小为font,颜色为colored


(6)写字符串
  1. void DrawStringAt(int x, int y, const char* text, sFONT* font, int colored);
复制代码
在(x,y)这一点为左顶点写字符串text,字体大小为font,颜色为colored


(7)画线
  1. void DrawLine(int x0, int y0, int x1, int y1, int colored);
复制代码
以(x0,y0)为起点,(x1,y1)为终点画一条线,斜率任意;


(8)画横线
  1. void DrawHorizontalLine(int x, int y, int width, int colored);
复制代码
以(x0,y0)为起点,(x1,y1)为终点画一条横线,速度比DrawLine()快


(9)画竖线
  1. void DrawVerticalLine(int x, int y, int height, int colored);
复制代码
以(x0,y0)为起点,(x1,y1)为终点画一条竖线,速度比DrawLine()快


(10)矩形,画空心框
  1. void DrawRectangle(int x0, int y0, int x1, int y1, int colored);
复制代码
以(x0,y0)为起点,(x1,y1)为终点画一个框,边的颜色为colored


(11)填充矩形,画实心框
  1. void DrawFilledRectangle(int x0, int y0, int x1, int y1, int colored);
复制代码
以(x0,y0)为起点,(x1,y1)为终点画一个框,并且内部填充,颜色为colored


(12)画空心圆
  1. void DrawCircle(int x, int y, int radius, int colored);
复制代码
以(x,y)为圆心,radius为半斤画一个空心圆,颜色为colored


(13)画实心圆
  1. void DrawFilledCircle(int x, int y, int radius, int colored);
复制代码
以(x,y)为圆心,radius为半斤画一个实心心圆,颜色为colored


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-17 14:03:28

本帖最后由 驴友花雕 于 2021-11-17 14:49 编辑

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十七:EPD Eink 电子墨水显示器 SUNY 2.9 英寸 EPD 屏幕无线数字电子纸显示器模块  DEPG0290RWS800F6黑白红三色墨水屏(珠海三一科技)
  实验说明:使用傲雪驱动库e-Paper
  项目之三:简单的清屏程序

   实验开源代码
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十七:EPD Eink 电子墨水显示器 SUNY 2.9 英寸 EPD 屏幕无线数字电子纸显示器模块  DEPG0290RWS800F6黑白红三色墨水屏(珠海三一科技)
  4.   实验说明:使用傲雪驱动库e-Paper
  5.   项目之三:简单的清屏程序
  6. */
  7. #include <SPI.h>
  8. #include "epd2in9_V2.h"
  9. #include "epdpaint.h"
  10. #include "imagedata.h"
  11. #define COLORED     0
  12. #define UNCOLORED   1
  13. unsigned char image[1024];
  14. Paint paint(image, 0, 0);
  15. Epd epd;
  16. void setup() {
  17.   Serial.begin(115200);
  18.   if (epd.Init() != 0) {
  19.     Serial.print("e-Paper init failed");
  20.     return;
  21.   }
  22.   epd.ClearFrameMemory(0xFF);
  23.   epd.DisplayFrame();
  24.   epd.ClearFrameMemory(0xFF);
  25.   epd.DisplayFrame();
  26. }
  27. void loop() {
  28. }
复制代码




回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-17 14:25:23

本帖最后由 驴友花雕 于 2021-11-17 14:52 编辑

   实验场景图

【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏图1

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-17 14:58:21

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十七:EPD Eink 电子墨水显示器 SUNY 2.9 英寸 EPD 屏幕无线数字电子纸显示器模块  DEPG0290RWS800F6黑白红三色墨水屏(珠海三一科技)
  实验说明:使用傲雪驱动库e-Paper
  项目之四:清屏并显示傲雪电子的LOGO(测试最简程序)

   实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十七:EPD Eink 电子墨水显示器 SUNY 2.9 英寸 EPD 屏幕无线数字电子纸显示器模块  DEPG0290RWS800F6黑白红三色墨水屏(珠海三一科技)
  4.   实验说明:使用傲雪驱动库e-Paper
  5.   项目之四:清屏并显示傲雪电子的LOGO(测试最简程序)
  6. */
  7. #include <SPI.h>
  8. #include "epd2in9_V2.h"
  9. #include "epdpaint.h"
  10. #include "imagedata.h"
  11. #define COLORED     0
  12. #define UNCOLORED   1
  13. unsigned char image[1024];
  14. Paint paint(image, 0, 0);
  15. Epd epd;
  16. void setup() {
  17.   Serial.begin(115200);
  18.   if (epd.Init() != 0) {
  19.     Serial.print("e-Paper init failed");
  20.     return;
  21.   }
  22.   epd.ClearFrameMemory(0xFF);
  23.   epd.DisplayFrame();
  24.   epd.SetFrameMemory_Base(IMAGE_DATA);
  25.   epd.DisplayFrame();
  26. }
  27. void loop() {
  28. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-17 14:59:50

   实验场景动态图

【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-17 19:11:06

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十七:EPD Eink 电子墨水显示器 SUNY 2.9 英寸 EPD 屏幕无线数字电子纸显示器模块  DEPG0290RWS800F6黑白红三色墨水屏(珠海三一科技)
  实验说明:使用傲雪驱动库e-Paper
  项目之五:画八个空心与实心圆

   实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十七:EPD Eink 电子墨水显示器 SUNY 2.9 英寸 EPD 屏幕无线数字电子纸显示器模块  DEPG0290RWS800F6黑白红三色墨水屏(珠海三一科技)
  4.   实验说明:使用傲雪驱动库e-Paper
  5.   项目之五:画八个空心与实心圆
  6. */
  7. #include <SPI.h>
  8. #include "epd2in9_V2.h"
  9. #include "epdpaint.h"
  10. #include "imagedata.h"
  11. #define COLORED     0
  12. #define UNCOLORED   1
  13. unsigned char image[1024];
  14. Paint paint(image, 0, 0);
  15. Epd epd;
  16. void setup() {
  17.   Serial.begin(115200);
  18.   if (epd.Init() != 0) {
  19.     Serial.print("e-Paper init failed");
  20.     return;
  21.   }
  22.   epd.ClearFrameMemory(0xFF);
  23.   epd.DisplayFrame();
  24.   epd.ClearFrameMemory(0xFF);
  25.   epd.DisplayFrame();
  26.   paint.SetWidth(64);
  27.   paint.SetHeight(64);
  28.   paint.Clear(UNCOLORED);
  29.   paint.DrawCircle(32, 32, 30, COLORED);
  30.   epd.SetFrameMemory(paint.GetImage(), 5, 220, paint.GetWidth(), paint.GetHeight());
  31.   paint.Clear(UNCOLORED);
  32.   paint.DrawCircle(32, 32, 30, COLORED);
  33.   epd.SetFrameMemory(paint.GetImage(), 65, 10, paint.GetWidth(), paint.GetHeight());
  34.   paint.Clear(UNCOLORED);
  35.   paint.DrawFilledCircle(32, 32, 30, COLORED);
  36.   epd.SetFrameMemory(paint.GetImage(), 65, 80, paint.GetWidth(), paint.GetHeight());
  37.   epd.DisplayFrame();
  38.   paint.Clear(UNCOLORED);
  39.   paint.DrawCircle(32, 32, 30, COLORED);
  40.   epd.SetFrameMemory(paint.GetImage(), 65, 150, paint.GetWidth(), paint.GetHeight());
  41.   paint.Clear(UNCOLORED);
  42.   paint.DrawFilledCircle(32, 32, 30, COLORED);
  43.   epd.SetFrameMemory(paint.GetImage(), 65, 220, paint.GetWidth(), paint.GetHeight());
  44.   epd.DisplayFrame();
  45.   paint.Clear(UNCOLORED);
  46.   paint.DrawFilledCircle(32, 32, 30, COLORED);
  47.   epd.SetFrameMemory(paint.GetImage(), 5, 10, paint.GetWidth(), paint.GetHeight());
  48.   epd.DisplayFrame();
  49.   paint.Clear(UNCOLORED);
  50.   paint.DrawCircle(32, 32, 30, COLORED);
  51.   epd.SetFrameMemory(paint.GetImage(), 5, 80, paint.GetWidth(), paint.GetHeight());
  52.   paint.Clear(UNCOLORED);
  53.   paint.DrawFilledCircle(32, 32, 30, COLORED);
  54.   epd.SetFrameMemory(paint.GetImage(), 5, 150, paint.GetWidth(), paint.GetHeight());
  55.   epd.DisplayFrame();
  56.   //delay(2000);
  57.   if (epd.Init() != 0) {
  58.     Serial.print("e-Paper init failed ");
  59.     return;
  60.   }
  61. }
  62. void loop() {
  63. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-17 19:13:58

   实验场景图

【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-18 09:06:46

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十七:EPD Eink 电子墨水显示器 SUNY 2.9 英寸 EPD 屏幕无线数字  电子纸显示器模块  DEPG0290RWS800F6黑白红三色墨水屏(珠海三一科技)
  实验说明:使用傲雪驱动库e-Paper
  项目之六:不同字号,写字符"Hello world!"

   实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十七:EPD Eink 电子墨水显示器 SUNY 2.9 英寸 EPD 屏幕无线数字电子纸显示器模块  DEPG0290RWS800F6黑白红三色墨水屏(珠海三一科技)
  4.   实验说明:使用傲雪驱动库e-Paper
  5.   项目之六:不同字号,写字符"Hello world!"
  6. */
  7. #include <SPI.h>
  8. #include "epd2in9_V2.h"
  9. #include "epdpaint.h"
  10. #include "imagedata.h"
  11. #define COLORED     0
  12. #define UNCOLORED   1
  13. unsigned char image[1024];
  14. Paint paint(image, 0, 0);
  15. Epd epd;
  16. unsigned long time_start_ms;
  17. unsigned long time_now_s;
  18. void setup() {
  19.   Serial.begin(115200);
  20.   if (epd.Init() != 0) {
  21.     Serial.print("e-Paper init failed");
  22.     return;
  23.   }
  24.   epd.ClearFrameMemory(0xFF);
  25.   epd.DisplayFrame();
  26.   epd.ClearFrameMemory(0xFF);
  27.   epd.DisplayFrame();
  28.   paint.SetRotate(ROTATE_90);
  29.   paint.SetWidth(30);
  30.   paint.SetHeight(200);
  31.   paint.Clear(COLORED);
  32.   paint.DrawStringAt(0, 8, "Hello world!", &Font24, UNCOLORED);
  33.   epd.SetFrameMemory(paint.GetImage(),8, 50, paint.GetWidth(), paint.GetHeight());
  34.   paint.Clear(UNCOLORED);
  35.   paint.DrawStringAt(0, 7, "e-Paper Demo", &Font20, COLORED);
  36.   epd.SetFrameMemory(paint.GetImage(), 40, 65, paint.GetWidth(), paint.GetHeight());
  37.   epd.DisplayFrame();
  38.   paint.Clear(UNCOLORED);
  39.   paint.DrawStringAt(0, 8, "Hello world!", &Font16, COLORED);
  40.   epd.SetFrameMemory(paint.GetImage(), 65, 85, paint.GetWidth(), paint.GetHeight());
  41.   paint.Clear(UNCOLORED);
  42.   paint.DrawStringAt(0, 6, "e-Paper Demo", &Font12, COLORED);
  43.   epd.SetFrameMemory(paint.GetImage(), 95, 100, paint.GetWidth(), paint.GetHeight());
  44.   epd.DisplayFrame();
  45.   paint.Clear(COLORED);
  46.   paint.DrawStringAt(0, 4, "Hello world!", &Font8, UNCOLORED);
  47.   epd.SetFrameMemory(paint.GetImage(), 100, 110, paint.GetWidth(), paint.GetHeight());
  48. }
  49. void loop() {
  50. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-18 09:19:08

   实验场景图

【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-18 11:04:45

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百一十七:EPD Eink 电子墨水显示器 SUNY 2.9 英寸 EPD 屏幕无线数字电子纸显示器模块  DEPG0290RWS800F6黑白红三色墨水屏(珠海三一科技)
  实验说明:使用傲雪驱动库e-Paper
  项目之七:秒动电子计时器

   实验开源代码

  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百一十七:EPD Eink 电子墨水显示器 SUNY 2.9 英寸 EPD 屏幕无线数字电子纸显示器模块  DEPG0290RWS800F6黑白红三色墨水屏(珠海三一科技)
  4.   实验说明:使用傲雪驱动库e-Paper
  5.   项目之七:秒动电子计时器
  6. */
  7. #include <SPI.h>
  8. #include "epd2in9_V2.h"
  9. #include "epdpaint.h"
  10. #include "imagedata.h"
  11. #define COLORED     0
  12. #define UNCOLORED   1
  13. unsigned char image[1024];
  14. Paint paint(image, 0, 0);
  15. Epd epd;
  16. unsigned long time_start_ms;
  17. unsigned long time_now_s;
  18. void setup() {
  19.   Serial.begin(115200);
  20.   if (epd.Init() != 0) {
  21.     Serial.print("e-Paper init failed");
  22.     return;
  23.   }
  24.   epd.ClearFrameMemory(0xFF);
  25.   epd.DisplayFrame();
  26.   epd.ClearFrameMemory(0xFF);
  27.   epd.DisplayFrame();
  28.   paint.SetRotate(ROTATE_90);
  29.   paint.SetWidth(30);
  30.   paint.SetHeight(200);
  31.   paint.Clear(COLORED);
  32.   paint.DrawStringAt(0, 8, "Hello world!", &Font24, UNCOLORED);
  33.   epd.SetFrameMemory(paint.GetImage(), 20, 50, paint.GetWidth(), paint.GetHeight());
  34.   time_start_ms = millis();
  35. }
  36. void loop() {
  37.   time_now_s = (millis() - time_start_ms) / 1000;
  38.   char time_string[] = {'0', '0', ':', '0', '0', '\0'};
  39.   time_string[0] = time_now_s / 60 / 10 + '0';
  40.   time_string[1] = time_now_s / 60 % 10 + '0';
  41.   time_string[3] = time_now_s % 60 / 10 + '0';
  42.   time_string[4] = time_now_s % 60 % 10 + '0';
  43.   paint.SetWidth(30);
  44.   paint.SetHeight(90);
  45.   paint.SetRotate(ROTATE_90);
  46.   paint.Clear(UNCOLORED);
  47.   paint.DrawStringAt(0, 6, time_string, &Font24, COLORED);
  48.   epd.SetFrameMemory_Partial(paint.GetImage(), 70, 105, paint.GetWidth(), paint.GetHeight());
  49.   epd.DisplayFrame_Partial();
  50.   //delay(300);
  51. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2021-11-18 11:17:25

   实验场景动态图

【Arduino】168种传感器系列实验(217)---2.9寸红黑三色墨水屏图1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail