LED matrix - one by one LED not really working
i'm using 4x8 led matrix using uln2803. code use debugging purposes , turn 1 led on @ time:
ledrowarray array of 4 output pins:
now @ point works fine. learned today unless set unused row pins inputs , write low them there possibility turn on multiple leds on using 1 row pin , 1 column pin. why happening?
i've got array of boolean values indicating state of led. wrote simple function test this:
this part in cycle columns:
the check leds functions looks this:
in loop function call nextcolumn() function and in setup call this:
which does cause led 0 turn on of course on first (0) column turn led 30 on column 6/row 3.
it's unclear me why when using onebyoneled function works fine , when using latter method there multiple leds on.
code: [select]
onebyoneled() {
for (int i=0; i<4; i++) {
switch (i) {
case 0:
pinmode(ledrowarray[1], input);
digitalwrite(ledrowarray[1], low);
pinmode(ledrowarray[2], input);
digitalwrite(ledrowarray[2], low);
pinmode(ledrowarray[3], input);
digitalwrite(ledrowarray[3], low);
break;
case 1:
pinmode(ledrowarray[0], input);
digitalwrite(ledrowarray[0], low);
pinmode(ledrowarray[2], input);
digitalwrite(ledrowarray[2], low);
pinmode(ledrowarray[3], input);
digitalwrite(ledrowarray[3], low);
break;
case 2:
pinmode(ledrowarray[0], input);
digitalwrite(ledrowarray[0], low);
pinmode(ledrowarray[1], input);
digitalwrite(ledrowarray[1], low);
pinmode(ledrowarray[3], input);
digitalwrite(ledrowarray[3], low);
break;
case 3:
pinmode(ledrowarray[0], input);
digitalwrite(ledrowarray[0], low);
pinmode(ledrowarray[1], input);
digitalwrite(ledrowarray[1], low);
pinmode(ledrowarray[2], input);
digitalwrite(ledrowarray[2], low);
break;
default:
break;
}
pinmode(ledrowarray[i], output);
digitalwrite(ledrowarray[i], high);
for (int j=0; j<number_of_columns; j++) {
digitalwrite(shared_pin_1, bitread(j,2));
digitalwrite(shared_pin_2, bitread(j,1));
digitalwrite(shared_pin_3, bitread(j,0));
delay(5000);
serial.print("row: ");
serial.print(i+1);
serial.print("\n");
serial.print("column: ");
serial.print(j+1);
serial.print("\n");
serial.print("led number: ");
serial.print(j+number_of_columns*i);
serial.print("\n\n");
}
}
}
ledrowarray array of 4 output pins:
code: [select]
ledrowarray[0] = led_row_pin_1;
ledrowarray[1] = led_row_pin_2;
ledrowarray[2] = led_row_pin_3;
ledrowarray[3] = led_row_pin_4;
now @ point works fine. learned today unless set unused row pins inputs , write low them there possibility turn on multiple leds on using 1 row pin , 1 column pin. why happening?
i've got array of boolean values indicating state of led. wrote simple function test this:
code: [select]
setledstate(int led, boolean state) {
ledstate[led] = state;
}
this part in cycle columns:
code: [select]
nextcolumn() {
for (int i=0; i<number_of_columns; i++) {
digitalwrite(shared_pin_1, bitread(i,2));
digitalwrite(shared_pin_2, bitread(i,1));
digitalwrite(shared_pin_3, bitread(i,0));
checkleds(i);
}
}
the check leds functions looks this:
code: [select]
checkleds(int column) {
for (int i=0; i<4; i++) {
if (ledstate[i*number_of_columns+column] == true) {
pinmode(ledrowarray[i], output);
digitalwrite(ledrowarray[i], high);
} else {
pinmode(ledrowarray[i], input);
digitalwrite(ledrowarray[i], low);
}
}
}
in loop function call nextcolumn() function and in setup call this:
code: [select]
setledstate(0, true);
which does cause led 0 turn on of course on first (0) column turn led 30 on column 6/row 3.
it's unclear me why when using onebyoneled function works fine , when using latter method there multiple leds on.
Arduino Forum > Using Arduino > LEDs and Multiplexing > LED matrix - one by one LED not really working
arduino
Comments
Post a Comment