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:

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

Popular posts from this blog

Convierte tu Raspberry en un NAS. Firmware fvdw-sl 15.3 - Raspberry Pi Forums

How to format a Get Request

avrdude: verification error, first mismatch at byte 0x0000 0x0c != 0x62