Update double buffer example
This commit is contained in:
parent
055ff08fe5
commit
8dd6bf51b8
2 changed files with 65 additions and 83 deletions
|
@ -1,83 +0,0 @@
|
|||
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
|
||||
|
||||
MatrixPanel_I2S_DMA *display = nullptr;
|
||||
|
||||
const byte row0 = 2+0*10;
|
||||
const byte row1 = 2+1*10;
|
||||
const byte row2 = 2+2*10;
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
|
||||
// put your setup code here, to run once:
|
||||
delay(1000); Serial.begin(115200); delay(200);
|
||||
|
||||
Serial.println("...Starting Display");
|
||||
|
||||
HUB75_I2S_CFG mxconfig;
|
||||
mxconfig.double_buff = true; // Turn of double buffer
|
||||
|
||||
// OK, now we can create our matrix object
|
||||
display = new MatrixPanel_I2S_DMA(mxconfig);
|
||||
|
||||
|
||||
display->begin(); // setup display with pins as per defined in the library
|
||||
display->setTextColor(display->color565(255, 255, 255));
|
||||
|
||||
|
||||
// Buffer 0 test
|
||||
display->fillScreen(display->color565(128, 0, 0));
|
||||
display->setCursor(3, row0);
|
||||
display->print(F("Buffer 0"));
|
||||
display->setCursor(3, row1);
|
||||
display->print(F(" Buffer 0"));
|
||||
Serial.println("Wrote to to Buffer 0");
|
||||
display->showDMABuffer();
|
||||
delay(1500);
|
||||
|
||||
// Buffer 1 test
|
||||
display->flipDMABuffer();
|
||||
display->fillScreen(display->color565(0, 128, 0)); // shouldn't see this
|
||||
display->setCursor(3, row0);
|
||||
display->print(F("Buffer 1"));
|
||||
display->setCursor(3, row2);
|
||||
display->print(F(" Buffer 1"));
|
||||
|
||||
Serial.println("Wrote to to Buffer 1");
|
||||
display->showDMABuffer();
|
||||
delay(1500);
|
||||
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
// Flip the back buffer
|
||||
display->flipDMABuffer();
|
||||
|
||||
// Write: Set bottow row to black
|
||||
for (int y=20;y<MATRIX_HEIGHT; y++)
|
||||
for (int x=0;x<MATRIX_WIDTH; x++)
|
||||
{
|
||||
display->drawPixelRGB888( x, y, 0, 0, 0);
|
||||
}
|
||||
|
||||
// Write: Set bottom row to blue (this is what should show)
|
||||
for (int y=20;y<MATRIX_HEIGHT; y++)
|
||||
for (int x=0;x<MATRIX_WIDTH; x++)
|
||||
{
|
||||
display->drawPixelRGB888( x, y, 0, 0, 64);
|
||||
}
|
||||
|
||||
// Now show this back buffer
|
||||
display->showDMABuffer();
|
||||
delay(1000);
|
||||
|
||||
// Flip back buffer
|
||||
display->flipDMABuffer();
|
||||
|
||||
// Show this buffer
|
||||
display->showDMABuffer();
|
||||
delay(1000);
|
||||
|
||||
}
|
65
examples/SmoothDoubleBuffer/SmoothDoubleBuffer.ino
Normal file
65
examples/SmoothDoubleBuffer/SmoothDoubleBuffer.ino
Normal file
|
@ -0,0 +1,65 @@
|
|||
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
|
||||
|
||||
MatrixPanel_I2S_DMA *display = nullptr;
|
||||
|
||||
const byte row0 = 2+0*11;
|
||||
const byte row1 = 2+1*11;
|
||||
const byte row2 = 2+2*11;
|
||||
|
||||
int start_x = 0;
|
||||
int buffer_id = 0;
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
// put your setup code here, to run once:
|
||||
delay(1000);
|
||||
Serial.begin(115200);
|
||||
delay(200);
|
||||
|
||||
Serial.println("...Starting Display");
|
||||
HUB75_I2S_CFG mxconfig;
|
||||
mxconfig.double_buff = true; // Turn of double buffer
|
||||
mxconfig.clkphase = true;
|
||||
|
||||
// OK, now we can create our matrix object
|
||||
display = new MatrixPanel_I2S_DMA(mxconfig);
|
||||
|
||||
display->begin(); // setup display with pins as pre-defined in the library
|
||||
display->setTextColor(display->color565(255, 255, 255));
|
||||
|
||||
start_x = display->width();
|
||||
}
|
||||
|
||||
const int square_size = 16;
|
||||
void loop()
|
||||
{
|
||||
display->flipDMABuffer();
|
||||
//if ( !display->backbuffready() ) return;
|
||||
//display->showDMABuffer();
|
||||
display->clearScreen();
|
||||
|
||||
buffer_id ^= 1;
|
||||
|
||||
// Blue square on the left is printed to BOTH buffers.
|
||||
display->fillRect(0, 0, square_size/2, square_size/2, display->color565(0,0,200));
|
||||
|
||||
start_x--;
|
||||
|
||||
if (buffer_id)
|
||||
{
|
||||
display->setCursor(3, row1);
|
||||
display->fillRect(start_x, 6, square_size, square_size, display->color565(200,0,0));
|
||||
//delay(40); // simulate slow drawing operation
|
||||
}
|
||||
else
|
||||
{
|
||||
display->setCursor(3, row2);
|
||||
display->fillRect(10, start_x, square_size, square_size, display->color565(0,200,0));
|
||||
}
|
||||
|
||||
display->printf("Buffer %d", buffer_id);
|
||||
|
||||
if (start_x < (-1*square_size)) start_x = display->width()+square_size;
|
||||
|
||||
}
|
Loading…
Reference in a new issue