Pages: [1]   Go Down
 Author Topic: 5x7 dot matrix  (Read 137 times) 0 Members and 1 Guest are viewing this topic.
Beijing
Offline
Full Member
Karma: 3
Posts: 181
Skype name habib.derbyshire
 « on: February 11, 2013, 07:18:50 am » Bigger Smaller Reset

Hi all! I was trying to get a 5x7 dot matrix to work. I started with this:
Code:
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?
 Logged

What is man's best friend? The breadboard!

East Anglia (UK)
Online
Edison Member
Karma: 47
Posts: 1383
 « Reply #1 on: February 11, 2013, 07:47:51 am » Bigger Smaller Reset

Code:
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:
for(int i=0; i<6; i++)
loops 6 times and
Code:
for(int i=0; i<4; i++)
loops 4 times but you say that your matrix is 5x7

How are the LEDs wired ?
 Logged

Milton Keynes UK
Offline
Tesla Member
Karma: 88
Posts: 6287
-
 « Reply #2 on: February 11, 2013, 08:16:40 am » Bigger Smaller Reset

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

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

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

Code:
for(int r = 0; r < ROW_COUNT; r++)
{
digitalWrite(rows[r], LOW);
}
for(int c = 0; c < COLUMN_COUNT; c++)
{
digitalWrite(columns[c], HIGH);
}
 Logged

Beijing
Offline
Full Member
Karma: 3
Posts: 181
Skype name habib.derbyshire
 « Reply #3 on: February 11, 2013, 08:55:37 am » Bigger Smaller Reset

Thanks a lot. I modified the code, here it is.
Code:
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.
 Logged

What is man's best friend? The breadboard!

Milton Keynes UK
Offline
Tesla Member
Karma: 88
Posts: 6287
-
 « Reply #4 on: February 11, 2013, 09:24:18 am » Bigger Smaller Reset

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.
 Logged

Beijing
Offline
Full Member
Karma: 3
Posts: 181
Skype name habib.derbyshire
 « Reply #5 on: February 11, 2013, 09:49:35 am » Bigger Smaller Reset

Oops... Sorry.
 Logged

What is man's best friend? The breadboard!

Pittsburgh, PA, USA
Offline
Karma: 29
Posts: 2880
I only know some basic electricity....
 « Reply #6 on: February 11, 2013, 10:36:39 am » Bigger Smaller Reset

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?
 Logged

Examples can be found at Learning in the Main Site and at the Playground

 Pages: [1]   Go Up