Problem with the 1088BS 8x8 led matrix

Hi,
I am currently coding a simple program to display a symbol on a the 1088BS 8x8 led matrix.
To do this, I use a shift registor connected with three ports : “adder”, “voidAdd” and “outer”.
The shift registor is used to scroll vertically leds of the matrice.
I use pins 2 to 9 to proceed horizontally leds. I put on HIGH to block the current and LOW to let the current flow.

My problem is that some little red dots appears where they shouldn’t (see the image).
How can I fix that ?

Concerning my arduino, I use a Arduino nano with oldBootLoader

The code of my program

const int adder = 10;
const int voidAdd = 12;
const int outer = 11;
const int pin[8] = {2,3,4,5,6,7,8,9};

void setup() 
{
  pinMode(adder, OUTPUT);
  pinMode(voidAdd, OUTPUT);
  pinMode(outer, OUTPUT);
  pinMode(pin[0], OUTPUT);
  pinMode(pin[1], OUTPUT);
  pinMode(pin[2], OUTPUT);
  pinMode(pin[3], OUTPUT);
  pinMode(pin[4], OUTPUT);
  pinMode(pin[5], OUTPUT);
  pinMode(pin[6], OUTPUT);
  pinMode(pin[7], OUTPUT);
}

char tab[8][8]={{HIGH,HIGH,HIGH,HIGH,HIGH,HIGH,HIGH,HIGH},
                {HIGH,LOW,LOW,LOW,LOW,LOW,LOW,HIGH},
                {HIGH,LOW,HIGH,HIGH,HIGH,HIGH,LOW,HIGH},
                {HIGH,LOW,HIGH,HIGH,HIGH,HIGH,LOW,HIGH},
                {HIGH,LOW,LOW,LOW,LOW,LOW,LOW,HIGH},
                {HIGH,LOW,HIGH,HIGH,HIGH,HIGH,LOW,HIGH},
                {HIGH,LOW,HIGH,HIGH,HIGH,HIGH,LOW,HIGH},
                {HIGH,LOW,HIGH,HIGH,HIGH,HIGH,LOW,HIGH}};
void loop()
{
	digitalWrite(adder, HIGH);
	digitalWrite(voidAdd, HIGH);
	digitalWrite(voidAdd, LOW);
	delay(1);
	digitalWrite(adder, LOW);
	digitalWrite(outer, HIGH);
	digitalWrite(outer, LOW);
	for(int a=0;a<8;a++)
	{
		digitalWrite(pin[0], tab[a][0]);
		digitalWrite(pin[1], tab[a][1]);
		digitalWrite(pin[2], tab[a][2]);
		digitalWrite(pin[3], tab[a][3]);
		digitalWrite(pin[4], tab[a][4]);
		digitalWrite(pin[5], tab[a][5]);
		digitalWrite(pin[6], tab[a][6]);
		digitalWrite(pin[7], tab[a][7]);
		digitalWrite(voidAdd, HIGH);
		delay(1);
		digitalWrite(voidAdd, LOW);
		digitalWrite(outer, HIGH);
		digitalWrite(outer, LOW);
	}
}

Matrice2.jpg

Wow!

Just wow!

You are seriously into some "creative head-banging" here!

OK, now your unhelpful names for the shift register pins have me baffled but I think you are walking a single bit through the shift register and setting up the individual outputs before latching the shift register. The problem with this is that setting up those bits separately takes some time and so you are altering the pattern in the horizontal row for some short time before you move to the next row so the transition is not clean.

You could improve this by clearing all the row bits, moving to the next row, setting that row up and then delaying to avoid the ghosting.

But when you have finished playing, just buy two or three of these kits:

Or these ones

which used to be more expensive but are now actually cheaper and more useful if you wish to stack matrix arrays.

Considering the cost, it makes no sense to just buy one!

Hi,
I know that's special components exist but I don't want to use them, I wanna create my own system.

So thanks you very much, I fixed

The code :

const int adder = 10;
const int voidAdd = 12;
const int outer = 11;
const int pin[8] = {2,3,4,5,6,7,8,9};

void setup() 
{
  pinMode(adder, OUTPUT);
  pinMode(voidAdd, OUTPUT);
  pinMode(outer, OUTPUT);
  pinMode(pin[0], OUTPUT);
  pinMode(pin[1], OUTPUT);
  pinMode(pin[2], OUTPUT);
  pinMode(pin[3], OUTPUT);
  pinMode(pin[4], OUTPUT);
  pinMode(pin[5], OUTPUT);
  pinMode(pin[6], OUTPUT);
  pinMode(pin[7], OUTPUT);
}

char tab[8][8]={{HIGH,HIGH,HIGH,HIGH,HIGH,HIGH,HIGH,HIGH},
                {HIGH,LOW,LOW,LOW,LOW,LOW,LOW,HIGH},
                {HIGH,LOW,HIGH,HIGH,HIGH,HIGH,LOW,HIGH},
                {HIGH,LOW,HIGH,HIGH,HIGH,HIGH,LOW,HIGH},
                {HIGH,LOW,LOW,LOW,LOW,LOW,LOW,HIGH},
                {HIGH,LOW,HIGH,HIGH,HIGH,HIGH,LOW,HIGH},
                {HIGH,LOW,HIGH,HIGH,HIGH,HIGH,LOW,HIGH},
                {HIGH,LOW,HIGH,HIGH,HIGH,HIGH,LOW,HIGH}};
void loop()
{
 digitalWrite(adder, HIGH);
 digitalWrite(voidAdd, HIGH);
 digitalWrite(voidAdd, LOW);
 delayMicroseconds(100);
 digitalWrite(adder, LOW);
 digitalWrite(outer, HIGH);
 digitalWrite(outer, LOW);
 for(int a=0;a<8;a++)
 {
 digitalWrite(pin[0], tab[a][0]);
 digitalWrite(pin[1], tab[a][1]);
 digitalWrite(pin[2], tab[a][2]);
 digitalWrite(pin[3], tab[a][3]);
 digitalWrite(pin[4], tab[a][4]);
 digitalWrite(pin[5], tab[a][5]);
 digitalWrite(pin[6], tab[a][6]);
 digitalWrite(pin[7], tab[a][7]);
 delay(2);
 digitalWrite(pin[0], HIGH);
 digitalWrite(pin[1], HIGH);
 digitalWrite(pin[2], HIGH);
 digitalWrite(pin[3], HIGH);
 digitalWrite(pin[4], HIGH);
 digitalWrite(pin[5], HIGH);
 digitalWrite(pin[6], HIGH);
 digitalWrite(pin[7], HIGH);
 digitalWrite(voidAdd, HIGH);
 delayMicroseconds(100);
 digitalWrite(voidAdd, LOW);
 digitalWrite(outer, HIGH);
 digitalWrite(outer, LOW);
 }
}