Go Down

Topic: 5x7 dot matrix (Read 546 times) previous topic - next topic

arduinohabib

Hi all! I was trying to get a 5x7 dot matrix to work. I started with this:
Code: [Select]
int columns[]={13, 12, 11, 10, 9};
int rows[]={8, 7, 6, 5, 4, 3, 2};
void setup(){
  for(int i=0; i<=4; i++){
    pinMode(columns[i], OUTPUT);
  }
  for(int i=0; i<=6; i++){
    pinMode(rows[i], OUTPUT);
  }
}
void loop(){
  dot(2, 1);
}
void dot(int col, int row){
  for(int i=0; i<4; i++){
    digitalWrite(rows[i], LOW);
  }
  for(int i=0; i<6; i++){
    digitalWrite(columns[i], HIGH);
  }
  digitalWrite(rows[row], LOW);
  digitalWrite(columns[col], HIGH);
}

and what I get is a whole row lighting up. Why is this?
What is man's best friend? The breadboard!

UKHeliBob

Code: [Select]
void dot(int col, int row)
{
  for(int i=0; i<4; i++)
  {
    digitalWrite(rows[i], LOW);
  }
  for(int i=0; i<6; i++)
  {
    digitalWrite(columns[i], HIGH);
  }
  digitalWrite(rows[row], LOW);
  digitalWrite(columns[col], HIGH);
}

It looks to me as though your rows and columns are mixed up in this function.  Also
Code: [Select]
  for(int i=0; i<6; i++)loops 6 times and
Code: [Select]
  for(int i=0; i<4; i++) loops 4 times but you say that your matrix is 5x7

How are the LEDs wired ?
Please do not send me PMs asking for help.  Post in the forum then everyone will benefit from seeing the questions and answers.

PeterH

Delete all the hardcoded literal values for the number of rows and columns, and replace them with defined constants. For example:

Code: [Select]

const byte COLUMN_COUNT = 5;
const byte ROW_COUNT = 7;


When looping through rows and columns always use these values, like this:

Code: [Select]

for(int r = 0; r < ROW_COUNT; r++)
{
  digitalWrite(rows[r], LOW);
}
for(int c = 0; c < COLUMN_COUNT; c++)
{
  digitalWrite(columns[c], HIGH);
}
I only provide help via the forum - please do not contact me for private consultancy.

arduinohabib

Thanks a lot. I modified the code, here it is.
Code: [Select]
int columns[]={13, 12, 11, 10, 9};
int rows[]={8, 7, 6, 5, 4, 3, 2};
const byte COLUMN_COUNT=5;
const byte ROW_COUNT=7;
void setup(){
  for(int i=0; i<=4; i++){
    pinMode(columns[i], OUTPUT);
  }
  for(int i=0; i<=6; i++){
    pinMode(rows[i], OUTPUT);
  }
}
void loop(){
  dot(2, 1);
}
void dot(int col, int row){
  for(int i=0; i<=4; i++){
    digitalWrite(rows[i], HIGH);
  }
  for(int i=0; i<=6; i++){
    digitalWrite(columns[i], LOW);
  }
  digitalWrite(rows[row], LOW);
  digitalWrite(columns[col], HIGH);
}

My dot matrix is a generic 12 pin 5x7, I don't have a schematic. After modifing the code, the first, second, sixth and seventh rows of the first column light up.
What is man's best friend? The breadboard!

PeterH


Thanks a lot. I modified the code, here it is.


You have added the constant definitions but you have completely ignored all the other suggestions I made.
I only provide help via the forum - please do not contact me for private consultancy.

arduinohabib

What is man's best friend? The breadboard!

GoForSmoke

Why use ints to count from 0 to less than 10?
Was that a conscious choice or just following a grooved-in habit to save actual thinking?
Nick Gammon on multitasking Arduinos:
1) http://gammon.com.au/blink
2) http://gammon.com.au/serial
3) http://gammon.com.au/interrupts

Go Up