Go Down

### Topic: 5x7 dot matrix (Read 1 time)previous topic - next topic

#### arduinohabib

##### Feb 11, 2013, 01:18 pm
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

#1
##### Feb 11, 2013, 01:47 pm
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

#2
##### Feb 11, 2013, 02:16 pm
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);}`

#### arduinohabib

#3
##### Feb 11, 2013, 02:55 pm
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

#4
##### Feb 11, 2013, 03:24 pm

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.

#### arduinohabib

#5
##### Feb 11, 2013, 03:49 pm
Oops... Sorry.
What is man's best friend? The breadboard!

#### GoForSmoke

#6
##### Feb 11, 2013, 04:36 pm
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?