RGB matrix 32x64 with Arduino ZERO

Hello guys,
I am using a Arduino zero to run a 32*64 RGB matrix, also using and analog sensor to measure distance, also using 3 3.3v digital inputs.

I have the display running 24/7 non stop, but couple times a day I have to reset the Arduino because the screen goes black for some reason.
here is the coding since I can not upload files yet.


#include <RGBmatrixPanel.h>

#define CLK  8   
#define OE   9
#define LAT 10
#define A   A0
#define B   A1
#define C   A2
#define D   A3

RGBmatrixPanel matrix(A, B, C, D, CLK, LAT, OE, false, 64);

int buttonState1 = 0;
int lastButtonState1 = 0;

int buttonState2 = 0;
int lastButtonState2 = 0;

int buttonState3 = 0;
int lastButtonState3 = 0;

int i=0;
char val1=0;
char val2=0;
char val3=0;
int lastPor=0;

int str1[6]; 

void setup() {
//read digital inputs 11, 12, 13.  
  pinMode(11, INPUT_PULLDOWN);
  pinMode(12, INPUT_PULLDOWN);
  pinMode(13, INPUT_PULLDOWN);
  

  
  Serial.begin(9600);
  matrix.begin();


  matrix.fillScreen(matrix.Color333(0, 0, 0));

  // draw some text!
  matrix.setTextSize(2);     // size 1 == 8 pixels high
  matrix.setTextWrap(false); // Don't wrap at end of line - will do ourselves

 
}

void loop() {
  
  // read the input on analog pin 5:
  //int a;//max sensor value 100%


  int sensorValue = analogRead(A5);
  //float voltage = ((sensorValue)/(309.9));
  //int rem = (voltage*59651.6363)/1000;
  //int inch = rem%12;
  //int f = (voltage*4970.9696)/1000;
  
  //int Por1= (sensorValue/1023.0)*100;
  //********************************************
  // a1=135.00;  sensor value 100%
  // b1=540.00;  sensor value 0%
  // x1=405.00; full diference between a and b   
  int Por=(1-((sensorValue-300.00)/240.00))*100;
  //********************************************   
  //Serial.println(Por);
  Serial.println(sensorValue);  
  int r;
  int g;
  int b;

  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):


  buttonState1 = digitalRead(11);
  buttonState2 = digitalRead(12);
  buttonState3 = digitalRead(13);
  //print first string 0,0,0,0,0,0
  matrix.setCursor(6, 1);
  matrix.setTextColor(matrix.Color333(0,7,0));
  
  matrix.setTextSize(1);
  matrix.setCursor(0, 1);    
  matrix.print(str1[0]);
  matrix.setTextSize(2);
    
  matrix.print(str1[1]);
  matrix.print(str1[2]);
  matrix.print(str1[3]);
  matrix.print(str1[4]);
  matrix.setTextColor(matrix.Color333(7,0,0));
  matrix.print(str1[5]);
  //matrix.setTextColor(matrix.Color333(0,7,0));
  //matrix.print(str1[6]);
  //matrix.print(str1[7]);
  //matrix.print(str1[8]);
  //matrix.print(str1[9]);
  
  //if pin 11 reads high at least 3.0vdc
  if(buttonState1==1){
    //lastButtonState1==1;
    
    matrix.setTextColor(matrix.Color333(0,0,0));
    
    matrix.setTextSize(1);
    matrix.setCursor(0, 1);    
    matrix.print(str1[0]);
    matrix.setTextSize(2);
    
    matrix.print(str1[1]);
    matrix.print(str1[2]);
    matrix.print(str1[3]);
    matrix.print(str1[4]);    
    matrix.print(str1[5]);
    //matrix.print(str1[6]);
    //matrix.print(str1[7]);
    //matrix.print(str1[8]);
    //matrix.print(str1[9]);

    //str1[9]=str1[8];
    //str1[8]=str1[7];
    //tr1[7]=str1[6];
    //str1[6]=str1[5];
    str1[5]=str1[4];
    str1[4]=str1[3];
    str1[3]=str1[2];
    str1[2]=str1[1];
    str1[1]=str1[0];
    str1[0]=1;

   
    matrix.setTextColor(matrix.Color333(0,7,0));
    
    matrix.setTextSize(1);
    matrix.setCursor(0, 1);    
    matrix.print(str1[0]);
    matrix.setTextSize(2);
    
    matrix.print(str1[1]);
    matrix.print(str1[2]);
    matrix.print(str1[3]);
    matrix.print(str1[4]);
    matrix.setTextColor(matrix.Color333(7,0,0));
    matrix.print(str1[5]);
    //matrix.setTextColor(matrix.Color333(0,7,0));
    //matrix.print(str1[6]);
    //matrix.print(str1[7]);
    //matrix.print(str1[8]);
    //matrix.print(str1[9]);
      if (Por<50)
    {
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(0,0,0));
      matrix.print(lastPor);
      matrix.print("%");
      
      matrix.setTextSize(2);
      g=(1-((49.00-Por)/49.00))*7.00;
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(7-g,g,0));
      matrix.print(Por);
      matrix.setTextColor(matrix.Color333(7-g,g,0));
      matrix.print("%");
      lastPor=Por;
    }
    if (Por>=50)
    {
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(0,0,0));
      matrix.print(lastPor);
      matrix.print("%");
       
      matrix.setTextSize(2);
      b=(1-((100.00-Por)/50.00))*7.00;
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(0,7-b,b));
      matrix.print(Por);
      matrix.setTextColor(matrix.Color333(0,7-b,b));
      matrix.print("%");
      lastPor=Por;      
    }      
    delay(500);
    //i=i+1;
    lastButtonState1==0;
  }
  //if pin12 reads at least 3.0vdc
  if(buttonState2==1){
    //lastButtonState2==1;
 
    matrix.setTextColor(matrix.Color333(0,0,0));
    
    matrix.setTextSize(1);
    matrix.setCursor(0, 1);    
    matrix.print(str1[0]);
    matrix.setTextSize(2);

    matrix.print(str1[1]);
    matrix.print(str1[2]);
    matrix.print(str1[3]);
    matrix.print(str1[4]);    
    matrix.print(str1[5]);
    //matrix.print(str1[6]);
    //matrix.print(str1[7]);
    //matrix.print(str1[8]);
    //matrix.print(str1[9]);
    
    //str1[9]=str1[8];
    //str1[8]=str1[7];
    //str1[7]=str1[6];
    //str1[6]=str1[5];
    str1[5]=str1[4];
    str1[4]=str1[3];
    str1[3]=str1[2];
    str1[2]=str1[1];
    str1[1]=str1[0];
    str1[0]=2;
      
    matrix.setTextColor(matrix.Color333(0,7,0));
      
    matrix.setTextSize(1);
    matrix.setCursor(0, 1);    
    matrix.print(str1[0]);
    matrix.setTextSize(2);
      
    matrix.print(str1[1]);
    matrix.print(str1[2]);
    matrix.print(str1[3]);
    matrix.print(str1[4]);
    matrix.setTextColor(matrix.Color333(7,0,0));
    matrix.print(str1[5]);
    //matrix.setTextColor(matrix.Color333(0,0,7));
    //matrix.print(str1[6]);
    //matrix.print(str1[7]);
    //matrix.print(str1[8]);
    //matrix.print(str1[9]);
      if (Por<50)
    {
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(0,0,0));
      matrix.print(lastPor);
      matrix.print("%");
            
      matrix.setTextSize(2);
      g=(1-((49.00-Por)/49.00))*7.00;
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(7-g,g,0));
      matrix.print(Por);
      matrix.setTextColor(matrix.Color333(7-g,g,0));
      matrix.print("%");
      lastPor=Por;
    }
    if (Por>=50)
    {
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(0,0,0));
      matrix.print(lastPor);
      matrix.print("%");

      matrix.setTextSize(2);
      b=(1-((100.00-Por)/50.00))*7.00;
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(0,7-b,b));
      matrix.print(Por);
      matrix.setTextColor(matrix.Color333(0,7-b,b));
      matrix.print("%");
      lastPor=Por;      
    }    
    delay(500);
    lastButtonState2==0;
    
  }
  //if pin13 reads high at least 3.0vdc
  if(buttonState3==1){
    //lastButtonState3==1;
    
    matrix.setTextColor(matrix.Color333(0,0,0));
    
    matrix.setTextSize(1);    
    matrix.setCursor(0, 1);    
    matrix.print(str1[0]);
    matrix.setTextSize(2);
    
    matrix.print(str1[1]);
    matrix.print(str1[2]);
    matrix.print(str1[3]);
    matrix.print(str1[4]);    
    matrix.print(str1[5]);
    //matrix.print(str1[6]);
    //matrix.print(str1[7]);
    //matrix.print(str1[8]);
    //matrix.print(str1[9]);

    //str1[9]=str1[8];
    //str1[8]=str1[7];
    //str1[7]=str1[6];
    //str1[6]=str1[5];
    str1[5]=str1[4];
    str1[4]=str1[3];
    str1[3]=str1[2];
    str1[2]=str1[1];
    str1[1]=str1[0];
    str1[0]=3;

    matrix.setTextColor(matrix.Color333(0,7,0));
      
    matrix.setTextSize(1);
    matrix.setCursor(0, 1);    
    matrix.print(str1[0]);
    matrix.setTextSize(2);

    matrix.print(str1[1]);
    matrix.print(str1[2]);
    matrix.print(str1[3]);
    matrix.print(str1[4]);
    matrix.setTextColor(matrix.Color333(7,0,0));
    matrix.print(str1[5]);
    //matrix.setTextColor(matrix.Color333(0,0,7));
    //matrix.print(str1[6]);
    //matrix.print(str1[7]);
    //matrix.print(str1[8]);
    //matrix.print(str1[9]);
      if (Por<50)
    {
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(0,0,0));
      matrix.print(lastPor);
      matrix.print("%");
      
      matrix.setTextSize(2);
      g=(1-((49.00-Por)/49.00))*7.00;
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(7-g,g,0));
      matrix.print(Por);
      matrix.setTextColor(matrix.Color333(7-g,g,0));
      matrix.print("%");
      lastPor=Por;
    }
    if (Por>=50)
    {
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(0,0,0));
      matrix.print(lastPor);
      matrix.print("%");
             
      matrix.setTextSize(2);
      b=(1-((100.00-Por)/50.00))*7.00;
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(0,7-b,b));
      matrix.print(Por);
      matrix.setTextColor(matrix.Color333(0,7-b,b));
      matrix.print("%");
      lastPor=Por;  
    }    
    delay(500);
    //i=i+1;
    lastButtonState3==0;
    
  }
  //lastPor=Por;
    //number color if it is higher or lower than 50%  
  if(Por!=lastPor){ 
    matrix.setCursor(10, 17);
    matrix.setTextColor(matrix.Color333(0,0,0));
    matrix.print(lastPor);
    matrix.print("%");
          
    //Serial.println(Por);
    //Serial.println(lastPor);
    if (Por<50)
    {
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(0,0,0));
      matrix.print(lastPor);
      matrix.print("%"); 

      matrix.setTextSize(2);
      g=(1-((49.00-Por)/49.00))*7.00;
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(7-g,g,0));
      matrix.print(Por);
      matrix.setTextColor(matrix.Color333(7-g,g,0));
      matrix.print("%");
      lastPor=Por;
    }
    if (Por>=50)
    { 
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(0,0,0));
      matrix.print(lastPor);
      matrix.print("%");  
          
      matrix.setTextSize(2);
      b=(1-((100.00-Por)/50.00))*7.00;
      matrix.setCursor(10, 17);
      matrix.setTextColor(matrix.Color333(0,7-b,b));
      matrix.print(Por);
      matrix.setTextColor(matrix.Color333(0,7-b,b));
      matrix.print("%");
      lastPor=Por;      
    }
   
  } 
     
  delay(250);
    
  //erase  last % matrix print
  //matrix.setTextSize(2);
}

any ideas is more than welcome, thanks.

What brand and model? The ones that I have are 5v logic.

Are you printing ten empty strings (str1[0] - str1[9])from an array of six.

This line set text color black on black background

it is adafruit, yes I am using 5v for the matrix, but 3.3v for 3 other inputs for the Arduino Zero

no, I am printing only 6....str1[0]-str1[5]

Yes, so in my logic I clear the display for the next cicle, if i dont do this it will printo lets have as an example 7 on top of a 1, if that make sense

What the voltage of all this signals?

#define CLK  8   
#define OE   9
#define LAT 10
#define A   A0
#define B   A1
#define C   A2
#define D   A3

If you use a 3.3v logic from the Zero - the matrix could work unstable.

This is black. Colors start appearing around 63.

[edit] Using one pixel, colors appear down to (3, x, x)... I was using a matrix which might be my issue with small values... so OP's (7,x,x) is probably causing "black."

can you explain this a little more? are you saying that if I use the 3.3 from the arduino for the 3 inputs it will be unstable?
how would a input for the arduino would affect the RGB display?

yes it appears like 4 times at the beguining and then in each IF condition

It appears 87 times with permutations of "near-0", "near-0", "near-0"... that was your problem from post #1.

[edit] see my edit post 9... I see one pixel at "3" working... I was using a matrix that might have an internal load.

1 Like

The RGB matrix expect a 5v logic level, but signals from Arduino are 3.3v, it could not be enough for led drivers.

1 Like

I am taking 5v from the zero to the RGB, the 3 3.3v inputs are for other external switches

You take 5v as power only, but all Zero logic signals are 3.3v

I get it, so what do you recommend?

I recommend you start with your code, because it is a more likely the cause of the issue. Your code is a mess. Your using of Color333 method is incorrect, as mentioned @xfpd

As for 3.3 - 5v logic mismatch, a common solution is a logic level converter

Ok, thanks for the advice.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.