Closed maxmurugan closed 1 year ago
/*-------------------------------------------------------------------------------------- Demo for RGB panels
DMD_STM32a example code for STM32F103xxx board ------------------------------------------------------------------------------------- */
//###########################################################################################
template
}; //#######################################################
//Number of panels in x and y axis
// ==== DMD_RGB pins ==== // mux pins - A, B, C... all mux pins must be selected from same port!
// put all mux pins at list uint8_t mux_list[] = { DMD_PIN_A , DMD_PIN_B , DMD_PIN_C , DMD_PIN_D , DMD_PIN_E };
// pin OE must be one of PB0 PB1 PA6 PA7
uint8_t custom_rgbpins[] = { 11,16,17,18,19,20,21 }; // CLK, R0, G0, B0, R1, G1, B1
DMD_RGB <RGB32x32plainS8, COLOR_4BITS> dmd(mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins, DISPLAYS_ACROSS, DISPLAYS_DOWN, ENABLE_DUAL_BUFFER);
// --- Define fonts ---- // DMD.h old style font DMD_Standard_Font Arial_black(Arial_Black_16); DMD_Standard_Font UkrRusArial_F(UkrRusArial_14); // GFX font with sepatate parts for Latin and Cyrillic charsFreeMonoBold12pt7b // 32 pixel DMD_GFX_Font GlametrixL((uint8_t)&FreeMono24pt7b,24 ); DMD_GFX_Font GlametrixL((uint8_t)&FreeSerif9pt7b,12 );
/*-------------------------------------------------------------------------------------- UTF8 char recoding
--------------------------------------------------------------------------------------/ int utf8_rus(char dest, const unsigned char* src) {
uint16_t i, j; for ( i =0, j =0; src[i]; i++) { if ((src[i] == 0xD0 )&& src[i+1]) { dest[j++] = src[++i] - 0x10;} else if ((src[i] == 0xD1 )&& src[i+1]) {dest[j++] = src[++i] + 0x30; } else dest[j++] = src[i]; } dest[j] ='\0'; return j; }
/-------------------------------------------------------------------------------------- setup Called by the Arduino architecture before the main loop begins --------------------------------------------------------------------------------------/
void setup(void) {
// initialize DMD objects dmd.init(); Serial.begin(9600);
}
/-------------------------------------------------------------------------------------- loop Arduino architecture main loop --------------------------------------------------------------------------------------/ void loop(void) {
// create foreground colors uint16_t col[] = { dmd.Color888(255,0, 0), // red dmd.Color888(0, 255, 0), // green dmd.Color888(0, 0, 255) // blue
}; uint16_t bg = 0; // background - black
// text char s[] = "WELCOME TO KAMAL & CO..."; // transcode message to UTF for use with GFX fonts char k[100]; utf8_rus(k, (const unsigned char)s); char m = s; dmd.selectFont(&Arial_black); uint16_t interval = 35; long prev_step = millis(); dmd.setBrightness(128); uint8_t col_ptr = 0;
while (1) { //########################## if ((millis() - prev_step) > interval)
{ dmd.setTextColor(col[0], bg); // --red color
if (dmd.stepMarquee(-1, 0) & 1) { // if text is reached screen bounds
dmd.clearScreen(true);
dmd.drawMarquee(m, strlen(m), dmd.width() - 10, (dmd.height() > 0) ? 16 : 0, 0);
}
// output mem buffer to matrix
//####################### add string get flicker
dmd.setTextColor(col[2], bg); //-- blue color
dmd.drawStringX(0, 0, "TEST 12345", col[2]); //- fixed messAGE USED FOR CLOCK OR DATE USING DS3231
dmd.swapBuffers(true);
prev_step = millis();
}
} }
please solve the issue
Hi again First please update the library to last version v1.0.0.
Than go to the example dmd_rgb_pattern_test and replace the line 74:
DMD_RGB <RGB32x16plainS4, COLOR_4BITS> dmd(mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins, DISPLAYS_ACROSS, DISPLAYS_DOWN, ENABLE_DUAL_BUFFER);
with two lines below:
#define RGB32x32_S8_maxmurugan 3,32,32,8,1 // 32x32 1/8 matrix from @maxmurugan
DMD_RGB <RGB32x32_S8_maxmurugan, COLOR_4BITS> dmd(mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins, DISPLAYS_ACROSS, DISPLAYS_DOWN, ENABLE_DUAL_BUFFER);
Run this example with a single panel and show the video as it works. Sorry for the inconvenience. Dmitry
Attention, I just edited the code in the previous post, please copy it again
After update new library
Test two 32x32 p6 panel
one panel scrolling text fully , second module show blank
https://user-images.githubusercontent.com/4962604/219700951-ac1d10e3-ca7f-4c55-b76f-f4472b2449e3.mov
/*-------------------------------------------------------------------------------------- Demo for RGB panels
DMD_STM32a example code for STM32F103xxx board ------------------------------------------------------------------------------------- */
//###########################################################################################
template
}; //#######################################################
//Number of panels in x and y axis
// ==== DMD_RGB pins ==== // mux pins - A, B, C... all mux pins must be selected from same port!
// put all mux pins at list uint8_t mux_list[] = { DMD_PIN_A , DMD_PIN_B , DMD_PIN_C , DMD_PIN_D , DMD_PIN_E };
// pin OE must be one of PB0 PB1 PA6 PA7
uint8_t custom_rgbpins[] = { 11,16,17,18,19,20,21 }; // CLK, R0, G0, B0, R1, G1, B1
//DMD_RGB <RGB32x32plainS8, COLOR_4BITS> dmd(mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins, DISPLAYS_ACROSS, DISPLAYS_DOWN, ENABLE_DUAL_BUFFER); DMD_RGB <RGB32x32_S8_maxmurugan, COLOR_4BITS> dmd(mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins, DISPLAYS_ACROSS, DISPLAYS_DOWN, ENABLE_DUAL_BUFFER); // --- Define fonts ---- // DMD.h old style font DMD_Standard_Font Arial_black(Arial_Black_16); DMD_Standard_Font UkrRusArial_F(UkrRusArial_14); // GFX font with sepatate parts for Latin and Cyrillic charsFreeMonoBold12pt7b // 32 pixel DMD_GFX_Font GlametrixL((uint8_t*)&FreeMono24pt7b,24 );
/*-------------------------------------------------------------------------------------- UTF8 char recoding
--------------------------------------------------------------------------------------/ int utf8_rus(char dest, const unsigned char* src) {
uint16_t i, j; for ( i =0, j =0; src[i]; i++) { if ((src[i] == 0xD0 )&& src[i+1]) { dest[j++] = src[++i] - 0x10;} else if ((src[i] == 0xD1 )&& src[i+1]) {dest[j++] = src[++i] + 0x30; } else dest[j++] = src[i]; } dest[j] ='\0'; return j; } /-------------------------------------------------------------------------------------- setup Called by the Arduino architecture before the main loop begins --------------------------------------------------------------------------------------/
void setup(void) {
// initialize DMD objects dmd.init(); Serial.begin(9600);
}
/-------------------------------------------------------------------------------------- loop Arduino architecture main loop --------------------------------------------------------------------------------------/ void loop(void) {
// create foreground colors uint16_t col[] = { dmd.Color888(255,0, 0), // red dmd.Color888(0, 255, 0), // green dmd.Color888(0, 0, 255) // blue
}; uint16_t bg = 0; // background - black
// text char s[] = "WELCOME TO KAMAL & CO..."; // transcode message to UTF for use with GFX fonts char k[100]; utf8_rus(k, (const unsigned char)s); char m = s; dmd.selectFont(&Arial_black); uint16_t interval = 35; long prev_step = millis(); dmd.setBrightness(128); uint8_t col_ptr = 0;
while (1) { //########################## if ((millis() - prev_step) > interval)
{ dmd.setTextColor(col[0], bg); // --red color if (dmd.stepMarquee(-1, 0) & 1) { // if text is reached screen bounds dmd.clearScreen(true);
dmd.drawMarquee(m, strlen(m), dmd.width() - 10, (dmd.height() > 0) ? 16 : 0, 0);
} // output mem buffer to matrix
//####################### add string get flicker dmd.setTextColor(col[2], bg); //-- blue color dmd.drawStringX(0, 0, "TEST 12345", col[2]); //- fixed messAGE USED FOR CLOCK OR DATE USING DS3231 dmd.swapBuffers(true);
prev_step = millis(); } } }
Please check
Sorry, but this is not what I asking for... I ask you that you repeat panel tests as you done it one month ago - but now with a new library version.
Please get the example dmd_rgb_pattern_test and replace ONLY TWO LINES, as stated in the post above Do not add your template and your scrolling there.
what is next step sir?
/*-------------------------------------------------------------------------------------- Demo for RGB panels
DMD_STM32a example code for STM32 and RP2040 boards
Pattern test for 32x16 1/2 1/4 RGB panels ------------------------------------------------------------------------------------- */
//Number of panels in x and y axis
// Output buffering - false
/ ===================
// ==== DMD_RGB pins ==== // mux pins - A, B, C... all mux pins must be selected from same port!
// put all mux pins at list uint8_t mux_list[] = { DMD_PIN_A , DMD_PIN_B , DMD_PIN_C , DMD_PIN_D , DMD_PIN_E };
// pin OE must be one of PB0 PB1 PA6 PA7
// Pins for R0, G0, B0, R1, G1, B1 channels and for clock. // By default the library uses RGB color order. // If you need to change this - reorder the R0, G0, B0, R1, G1, B1 pins. // All this pins also must be selected from same port! uint8_t custom_rgbpins[] = {PA6, PA0,PA1,PA2,PA3,PA4,PA5 }; // CLK, R0, G0, B0, R1, G1, B1
/ ===================
// ==== DMD_RGB pins ==== // mux pins - A, B, C... mux pins must be consecutive in ascending order
// put all mux pins at list uint8_t mux_list[] = { DMD_PIN_A , DMD_PIN_B , DMD_PIN_C , DMD_PIN_D , DMD_PIN_E };
// pin OE must be one of PB0 PB1 PA6 PA7
// Pins for R0, G0, B0, R1, G1, B1 channels and for clock. // By default the library uses RGB color order.2 // If you need to change this - reorder the R0, G0, B0, R1, G1, B1 pins. // All this pins also must be consecutive in ascending order uint8_t custom_rgbpins[] = { 11,16,17,18,19,20,21 }; // CLK, R0, G0, B0, R1, G1, B1
// Fire up the DMD object as dmd<MATRIX_TYPE, COLOR_DEPTH>
// For pattern testing use one of matrix below: // RGB32x16plainS4 - 32x16 1/4 Binary mux // RGB32x16plainS4_DIRECT - 32x16 1/4 Direct mux // RGB32x16plainS2 - 32x16 1/2 Binary mux // RGB32x16plainS2_DIRECT - 32x16 1/2 Direct mux
//DMD_RGB <RGB32x16plainS4, COLOR_4BITS> dmd(mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins, DISPLAYS_ACROSS, DISPLAYS_DOWN, ENABLE_DUAL_BUFFER);
DMD_RGB <RGB32x32_S8_maxmurugan, COLOR_4BITS> dmd(mux_list, DMD_PIN_nOE, DMD_PIN_SCLK, custom_rgbpins, DISPLAYS_ACROSS, DISPLAYS_DOWN, ENABLE_DUAL_BUFFER); uint16_t bg = 0; // background - black uint16_t fg = 0; // foreground
void setup(void) { dmd.init(); fg = dmd.Color888(0, 0, 255); dmd.setBrightness(50); }
void loop(void) { // fill the matrix with points row by row for (int i = 0; i < dmd.height(); i++) { for (int j = 0; j < dmd.width(); j++) { dmd.drawPixel(j,i, fg); delay(40); } } // clear the screen dmd.fillScreen(bg); }
Thank you
Please test this template. You should add it to your code(not to example!) instead of previous template, situated between two long lines with many-many "##########" chars
#define RGB32x32_S8_maxmurugan 3,32,32,8,35 // 32x32 1/8 matrix from @maxmurugan
template<int COL_DEPTH>
class DMD_RGB<RGB32x32_S8_maxmurugan, COL_DEPTH> : public DMD_RGB_BASE2<COL_DEPTH>
{
public:
DMD_RGB(uint8_t* mux_list, byte _pin_nOE, byte _pin_SCLK, uint8_t* pinlist,
byte panelsWide, byte panelsHigh, bool d_buf = false) :
DMD_RGB_BASE2<COL_DEPTH>(3, mux_list, _pin_nOE, _pin_SCLK, pinlist,
panelsWide, panelsHigh, d_buf, COL_DEPTH, 8, 32, 32)
{
this->fast_Hbyte = false;
this->use_shift = false;
}
// Fast text shift is disabled for complex patterns, so we don't need the method
void disableFastTextShift(bool shift) override {}
protected:
uint16_t get_base_addr(int16_t x, int16_t y) override {
this->transform_XY(x, y);
uint8_t pol_y = y % this->pol_displ;
x += (y / this->DMD_PIXELS_DOWN) * this->WIDTH;
static const uint8_t A_tbl[16] = { 0,1,2,3,4,5,6,7,
0,1,2,3,4,5,6,7 };
static const uint8_t B_tbl[16] = { 1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0 };
static const uint8_t C_tbl[8] = { 0,1,2,3,4,5,6,7 };
static const uint8_t Pan_Okt_cnt = this->DMD_PIXELS_ACROSS / 8;
uint8_t Oktet_m = B_tbl[pol_y] * Pan_Okt_cnt + (x / 8) % Pan_Okt_cnt;
uint16_t base_addr = this->x_len * A_tbl[pol_y] + (x / this->DMD_PIXELS_ACROSS) * this->DMD_PIXELS_ACROSS * this->multiplex + C_tbl[Oktet_m] * 8;
base_addr += x % 8;
return base_addr;
}
};
wow! working two panel
Thank you very much
one more dought how many scrolling message support?
how many line scrolling will support?
wow! working two panel
What about three panels as in the video at start of the issue?
how many scrolling message support?
only one :( I'm working on it
Tomorrow I will test 10 panel
3 panel working with 250 characters scrolling working fine Thanks
only support 255 char
more then 255 char not support scrolling
char* m = "Ashwin and Ravindra Jadeja to take an unassailable 2-0 lead in the series. The victory in New Delhi also earned India a big boost as far as their World Test Championship final qualification hopes are concerned. With the win India strengthened their spot at the second position in the World Test Championship points table.";
only scrolling - Ashwin and Ravindra Jadeja to take an unass
hi sir please help ? more then 255 char
Hi Sorry for delay with answers. I am not in home and can't edit github now.
About the more than 255 chars scrolling - try to edit parameters of this functions:
void DMD::stringBounds(const char* bChars, uint8_t length,
int16_t* w, int16_t* min_y, int16_t* max_y, byte orientation);
uint16_t DMD::stringWidth(const char* bChars, uint8_t length, byte orientation);
changing type of uint8_t length to uint16_t. The functions should be edited in DMD_STM32a.cpp file and its prototypes in DMD_STM32a.h
ok i will try and inform you
thanks
change to unit16_t same issue will happened
256 byte only working
Hi
I edited the two functions as mentioned two messages above and scrolling works for me up to string 300 chars long.
If you need a string more longer - you have to edit define at line 80 of the DMD_STM32a.h
file:
//Max length of scrolling text
#define MAX_STRING_LEN 300
I will add this changes in the next release.
Fixed in v1.0.1
hi sir, I am using 3 modules p6 32x32 one module working good add more than one module scrolling only working one module
https://user-images.githubusercontent.com/4962604/219630733-30f57236-2991-417e-b4da-501456d74b26.mp4