Explorar o código

3.7inch arduino example added a partial refresh example

SSYYL %!s(int64=3) %!d(string=hai) anos
pai
achega
1a3a24a978
Modificáronse 3 ficheiros con 22 adicións e 10 borrados
  1. 11 6
      Arduino/epd3in7/epd3in7.cpp
  2. 2 1
      Arduino/epd3in7/epd3in7.h
  3. 9 3
      Arduino/epd3in7/epd3in7.ino

+ 11 - 6
Arduino/epd3in7/epd3in7.cpp

@@ -223,7 +223,7 @@ void Epd::Reset(void) {
 /******************************************************************************
 function :  Display
 ******************************************************************************/
-void Epd::DisplayFrame(const UBYTE *Image) {
+void Epd::DisplayFrame(const UBYTE *Image, bool isBase) {
     UWORD i;
     UWORD IMAGE_COUNTER = width * height / 8;
 
@@ -238,9 +238,11 @@ void Epd::DisplayFrame(const UBYTE *Image) {
     for (i = 0; i < IMAGE_COUNTER; i++) {
         SendData(pgm_read_byte(&Image[i]));
     }
-    SendCommand(0x26);
-    for (i = 0; i < IMAGE_COUNTER; i++) {
-        SendData(pgm_read_byte(&Image[i]));
+    if(isBase) {
+        SendCommand(0x26);
+        for (i = 0; i < IMAGE_COUNTER; i++) {
+            SendData(pgm_read_byte(&Image[i]));
+        }
     }
 
     Load_LUT(1);
@@ -320,8 +322,11 @@ void Epd::DisplayFrame_Part(const UBYTE *Image, UWORD Xstart, UWORD Ystart, UWOR
         Load_LUT(1);
     else
         Load_LUT(0);
-	SendCommand(0x20);
-	WaitUntilIdle();    
+}
+
+void Epd::TurnOnDisplay(void) {
+    SendCommand(0x20);
+	WaitUntilIdle(); 
 }
 
 /******************************************************************************

+ 2 - 1
Arduino/epd3in7/epd3in7.h

@@ -44,10 +44,11 @@ public:
     int  Init(void);
     void WaitUntilIdle(void);
     void Reset(void);
-    void DisplayFrame(const UBYTE *Image);
+    void DisplayFrame(const UBYTE *Image, bool isBase);
     void SendCommand(unsigned char command);
     void DisplayFrame_Partial(const UBYTE *Image, UWORD Xstart, UWORD Ystart, UWORD iwidth, UWORD iheight);
     void DisplayFrame_Part(const UBYTE *Image, UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, bool isGC);
+    void TurnOnDisplay(void);
     void SendData(unsigned char data);
     void Sleep(void);
     void Clear(UBYTE mode);

+ 9 - 3
Arduino/epd3in7/epd3in7.ino

@@ -49,7 +49,7 @@ void setup() {
     Serial.print("e-Paper Clear\r\n ");
     epd.Clear(1);  
     Serial.print("draw image\r\n ");
-    epd.DisplayFrame(IMAGE_DATA);   // Set base image
+    epd.DisplayFrame(IMAGE_DATA, true);   // Set base image
     delay(3000);
     
     paint.SetWidth(40);
@@ -59,7 +59,7 @@ void setup() {
 
     UBYTE i;
     time_start_ms = millis();
-    for(i=0; i<10; i++) {
+    for(i=0; i<5; i++) {
         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';
@@ -71,7 +71,13 @@ void setup() {
         paint.DrawStringAt(20, 10, time_string, &Font16, COLORED);
         Serial.print("refresh------\r\n ");
         // epd.DisplayFrame_Partial(paint.GetImage(), 20, 100, 40, 120); // Width must be a multiple of 8
-        epd.DisplayFrame_Part(paint.GetImage(), 40, 30, 80, 140, false);   // Xstart must be a multiple of 8
+        /* Writes new data to RAM */
+        epd.DisplayFrame_Part(paint.GetImage(), 40+i*40, 30, 80+i*40, 140, false);   // Xstart must be a multiple of 8
+        /* Displays and toggles the RAM currently in use */
+        epd.TurnOnDisplay();
+        /* Writes the last data to another RAM */
+        epd.DisplayFrame_Part(paint.GetImage(), 40+i*40, 30, 80+i*40, 140, false);   // Xstart must be a multiple of 8
+        delay(500);
     }
     
     Serial.print("clear and sleep......\r\n ");