Pentru implementarea acestei aplicatii am folosit o matrice de leduri cu anod comun si un microcontroler ARDUINO UNO.Pentru a comanda matricea de leduri am folosit pinii digital ai microcontrolerului dar cum acesta are doar 13 pini de acest tip( dintre care primii doi sunt folositi si de modulul de transmisie seriala) iar matricea necesita 16 pini (8 linii si 8 coloane) vom folosi (seta)  4 pini ai portului analogic ca pini digitali. 






            Configuratia pinilor dintre cele doua module (pe baza diagramei pinilor matricei)este urmatoarea:
                      













CODUL SURSA:




const int row[8] = {

  2,7,19,5,13,18,12,16 };

const int col[8] = {
  6,11,10,3,17,4,8,9  };

int i,j,k=0;
int pixels[8][8];
int C[8][8]= {
  {1,1,1,1,1,1,1,1},
  {1,1,0,0,0,1,1,1},
  {1,0,1,1,0,1,1,1},
  {1,0,1,1,1,1,1,1},
  {1,0,1,1,1,1,1,1},
  {1,0,1,1,0,1,1,1},
  {1,1,0,0,0,1,1,1},
  {1,1,1,1,1,1,1,1}
  };  
int L[8][8]= {
  {1,1,1,1,1,1,1,1},
  {1,0,1,1,1,1,1,1},
  {1,0,1,1,1,1,1,1},
  {1,0,1,1,1,1,1,1},
  {1,0,1,1,1,1,1,1},
  {1,0,1,1,1,1,1,1},
  {1,0,0,0,0,1,1,1},
  {1,1,1,1,1,1,1,1}
  };  
  int A[8][8]={
  {1,1,1,0,1,1,1,1},
  {1,1,0,1,0,1,1,1},
  {1,0,1,1,1,0,1,1},
  {1,0,1,0,1,0,1,1},
  {1,0,0,0,0,0,1,1},
  {1,0,1,1,1,0,1,1},
  {1,0,1,1,1,0,1,1},
  {1,1,1,1,1,1,1,1}
  };  
  int U[8][8]= {
  {1,1,1,1,1,1,1,1},
  {1,0,1,1,1,0,1,1},
  {1,0,1,1,1,0,1,1},
  {1,0,1,1,1,0,1,1},
  {1,0,1,1,1,0,1,1},
  {1,0,1,1,1,0,1,1},
  {1,1,0,0,0,1,1,1},
  {1,1,1,1,1,1,1,1}
  }; 
 int D[8][8]= {
  {1,1,1,1,1,1,1,1},
  {1,0,0,0,1,1,1,1},
  {1,0,1,1,0,1,1,1},
  {1,0,1,1,1,0,1,1},
  {1,0,1,1,1,0,1,1},
  {1,0,1,1,0,1,1,1},
  {1,0,0,0,1,1,1,1},
  {1,1,1,1,1,1,1,1}
  };  
 int I[8][8]= {
  {1,1,1,1,1,1,1,1},
  {1,1,0,0,0,1,1,1},
  {1,1,1,0,1,1,1,1},
  {1,1,1,0,1,1,1,1},
  {1,1,1,0,1,1,1,1},
  {1,1,1,0,1,1,1,1},
  {1,1,0,0,0,1,1,1},
  {1,1,1,1,1,1,1,1}
  };  
  

void setup() {
  Serial.begin(9600);
  
  for (int thisPin = 0; thisPin < 8; thisPin++) {
    pinMode(col[thisPin], OUTPUT); 
    pinMode(row[thisPin], OUTPUT);  
    digitalWrite(col[thisPin], HIGH);    
                                                                   }


}

void loop() {

  

 if(k==0){

 for(i=0;i<8;i++){
                  for(j=0;j<8;j++){pixels[i][j]=C[i][j];}
                  }
 }
 else if(k==1){
 for(i=0;i<8;i++){
                  for(j=0;j<8;j++){pixels[i][j]=L[i][j];}
                  }
 }

  else if(k==2){
 for(i=0;i<8;i++){
                  for(j=0;j<8;j++){pixels[i][j]=A[i][j];}
                  }
 }
   else if(k==3){
 for(i=0;i<8;i++){
                  for(j=0;j<8;j++){pixels[i][j]=U[i][j];}
                  }
 }
   else if(k==4){
 for(i=0;i<8;i++){
                  for(j=0;j<8;j++){pixels[i][j]=D[i][j];}
                  }           
 }
 else if(k==5){
 for(i=0;i<8;i++){
                  for(j=0;j<8;j++){pixels[i][j]=I[i][j];}
                  }           
 }
 else if(k==6){
 for(i=0;i<8;i++){
                  for(j=0;j<8;j++){pixels[i][j]=U[i][j];}
                  }           
 }

  
  for(int x=0;x<1000;x++){
  refreshScreen();}
  delay(50);
  k++;
  if(k>6) {
    delay(1000);
    k=0;
  }
}

void refreshScreen() {

                             for (int thisRow = 0; thisRow < 8; thisRow++) {
                            digitalWrite(row[thisRow], HIGH);
                           for (int thisCol = 0; thisCol < 8; thisCol++) {
                           int thisPixel = pixels[thisRow][thisCol];
                          digitalWrite(col[thisCol], thisPixel);
                          if (thisPixel == LOW) {
                        digitalWrite(col[thisCol], HIGH);
                                                                }
                               }
                digitalWrite(row[thisRow], LOW);
                                                                                                }
}