/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Arduino UNO, Pro Mini
//
////////////////////////
//
//программа для LED куба на шести матрицах 8*8, и max7219  //
#include "LedControl.h"//подключаем данную библиотеку
int i=0;int j=0;int k=0;int k1=0;int k2=0;int k3=0;
int n=50;//50 миллисекунд- единица длительности паузы переключений
int x=1;
int r=3;// количество повторов программ
int r1=1;
 
LedControl LC = LedControl(12, 11, 10, 6);// создаём объект класса для 6 индикаторов
// при этом выводы 12-DIN 11-CLK 10-CS //
void setup() 
{
   for (i=0;i<=5;i++)
   {  
  LC.shutdown(i, false);//выключаем энергосберегающий режим
  LC.setIntensity(i,4 );// устанавливаем интенсивность в 4 единиц между 0 и 15
  LC.clearDisplay(i);//очищаем матрицу i
   }
  
}
void loop() 
{
  ///////////////////////////////////// ПРОГРАММА №1 ///////////////////////////////////
 r1=1;     
 while(r1<=r){r1++; 
  byte  tabl[6]={B11111100,
                 B01111000,
                 B00110000,
                 B00110000,
                 B01111000,
                 B11111100};
 
  for (j=0;j<=5;j++) //цикл в цикле для перебора элементов матриц
  {
    if(k==0)
    {k=1;
  for (i=0;i<=5;i++)
   {  
    if (x==1){LC.setRow(j, i,tabl[i] );} else {LC.setColumn(j, i,tabl[i] );};delay(2*n);
    LC.clearDisplay(0);LC.clearDisplay(1);LC.clearDisplay(2);
    LC.clearDisplay(3);LC.clearDisplay(4);LC.clearDisplay(5);
   }} 
   if(k==1)
    {k=0;j++;
  for (i=5;i>=0;i--)
   {  
    if (x==1){LC.setRow(j, i,tabl[i] );} else {LC.setColumn(j, i,tabl[i] );};delay(2*n);
    LC.clearDisplay(0);LC.clearDisplay(1);LC.clearDisplay(2);
    LC.clearDisplay(3);LC.clearDisplay(4);LC.clearDisplay(5);
   }} 
   
   }
   
   
   delay(5*n);
   LC.clearDisplay(0);LC.clearDisplay(1);LC.clearDisplay(2);
   LC.clearDisplay(3);LC.clearDisplay(4);LC.clearDisplay(5);delay(5*n);x=!x;
   ///////////////////////////////////// ПРОГРАММА №2 /////////////////////////////////// 
  
 byte  tabl1[6][6]={B00011000, B00111000, B01111100, B00011000, B01111100, B00111000,
                    B00110000, B01000100, B00000100, B00101000, B01000000, B01000100,
                    B01010000, B00000100, B00111000, B01001000, B00111000, B01111000,
                    B00010000, B00111000, B00000100, B01001000, B00000100, B01000100,
                    B00010000, B01000000, B01000100, B01111100, B01000100, B01000100,
                    B01111100, B01111100, B00111000, B00001000, B00111000, B00111000};
 for (j=0;j<=5;j++) //цикл в цикле для перебора элементов матриц
  {
   
  for (i=0;i<=5;i++)
   {  
    if (x==0) {LC.setRow(j, i,tabl1[i][j] );}else {LC.setRow(j, i,tabl1[i][5-j] );}
   } 
   delay(5*n);
   LC.clearDisplay(0);LC.clearDisplay(1);LC.clearDisplay(2);
   LC.clearDisplay(3);LC.clearDisplay(4);LC.clearDisplay(5);}                   
  } 
   ///////////////////////////////////// ПРОГРАММА №3 ///////////////////////////////////  
  byte  tabl[6]={B10000000,
                 B11000000,
                 B11100000,
                 B11110000,
                 B11111000,
                 B11111100}; 
  r1=1;     
 while(r1<=r){r1++; 
  for (j=0;j<=5;j=j+2) //цикл в цикле для перебора элементов матриц
  {
    
  for (i=0;i<=5;i++)
   {  
    LC.setRow(j, i,tabl[i]);
   } 
   delay(5*n);
    LC.clearDisplay(0);LC.clearDisplay(1);LC.clearDisplay(2);
    LC.clearDisplay(3);LC.clearDisplay(4);LC.clearDisplay(5);
     for (i=0;i<=5;i++)
   {  
    LC.setColumn(j+1, i,tabl[i]);
   } 
   delay(5*n);
    LC.clearDisplay(0);LC.clearDisplay(1);LC.clearDisplay(2);
    LC.clearDisplay(3);LC.clearDisplay(4);LC.clearDisplay(5);
   }
  }
 ///////////////////////////////////// ПРОГРАММА №4 ///////////////////////////////////
  r1=1;     
 while(r1<=r){r1++;  
  for (j=0;j<=5;j++) //цикл в цикле для перебора элементов матриц
  {
    
  for (i=0;i<=5;i++)
   {   
     LC.setLed(0, i, j,1);  
   }
  } 
  delay(10*n);
  for (j=0;j<=5;j++) //цикл в цикле для перебора элементов матриц
  {
    
  for (i=0;i<=5;i++)
   {   
     LC.setLed(0, i, j,0);LC.setLed(1, i, j,1);delay(n); LC.setLed(1, i, j,0);LC.setLed(2, i, j,1);delay(n); 
     LC.setLed(2, i, j,0);LC.setLed(3, i, j,1);delay(n); LC.setLed(3, i, j,0);LC.setLed(4, i, j,1);delay(n); 
     LC.setLed(4, i, j,0);LC.setLed(5, i, j,1);delay(n); 
   }
  }
  delay(10*n);
  
    LC.clearDisplay(0);LC.clearDisplay(1);LC.clearDisplay(2);
    LC.clearDisplay(3);LC.clearDisplay(4);LC.clearDisplay(5);  
 } 
 ///////////////////////////////////// ПРОГРАММА №5 /////////////////////////////////// 
  byte tabl2[6][4]={B11111100, B00000000, B00000000, B11111100, 
                    B10000100, B01111000, B00000000, B11111100, 
                    B10000100, B01001000, B00110000, B11111100, 
                    B10000100, B01001000, B00110000, B11111100, 
                    B10000100, B01111000, B00000000, B11111100, 
                    B11111100, B00000000, B00000000, B11111100};
   r1=1;     
 while(r1<=2*r){r1++;                  
   for (i=0;i<=5;i++)
   {  
    LC.setRow(1, i,tabl2[i][3]);LC.setRow(3, i,tabl2[i][3]);
   } 
   delay(3*n);
    LC.clearDisplay(0);LC.clearDisplay(1);LC.clearDisplay(2);
    LC.clearDisplay(3);LC.clearDisplay(4);LC.clearDisplay(5);  
 for (i=0;i<=5;i++)
   {  
    LC.setRow(0, i,tabl2[i][2]);LC.setRow(1, i,tabl2[i][1]);LC.setRow(2, i,tabl2[i][0]);
    LC.setRow(4, i,tabl2[i][2]);LC.setRow(3, i,tabl2[i][1]);
   } 
   delay(3*n);
    LC.clearDisplay(0);LC.clearDisplay(1);LC.clearDisplay(2);
    LC.clearDisplay(3);LC.clearDisplay(4);LC.clearDisplay(5);  
     for (i=0;i<=5;i++)
   {  
    LC.setRow(1, i,tabl2[i][3]);LC.setRow(3, i,tabl2[i][3]);
   } 
   delay(3*n);
    LC.clearDisplay(0);LC.clearDisplay(1);LC.clearDisplay(2);
    LC.clearDisplay(3);LC.clearDisplay(4);LC.clearDisplay(5);  
  for (i=0;i<=5;i++)
   {  
    LC.setRow(0, i,tabl2[i][0]);LC.setRow(1, i,tabl2[i][1]);LC.setRow(2, i,tabl2[i][2]);
    LC.setRow(4, i,tabl2[i][0]);LC.setRow(3, i,tabl2[i][1]);
   } 
   delay(3*n);
    LC.clearDisplay(0);LC.clearDisplay(1);LC.clearDisplay(2);
    LC.clearDisplay(3);LC.clearDisplay(4);LC.clearDisplay(5); 
 } 
 ///////////////////////////////////// ПРОГРАММА №6 /////////////////////////////////// 
  r1=1;     
 while(r1<=12*r){r1++;
 for (i=0;i<=0;i++)
   {   k1=random(0,4); k2=random(0,4);k3=random(0,4);  
 LC.setLed(k1, k2, k3,1); LC.setLed(k1, k2, k3+1,1);LC.setLed(k1, k2, k3+2,1);LC.setLed(k1, k2+1, k3+2,1);LC.setLed(k1, k2+2, k3+2,1);LC.setLed(k1, k2+2, k3+1,1);LC.setLed(k1, k2+2, k3,1);
 LC.setLed(k1, k2+1, k3,1); 
 LC.setLed(k1+2, k2, k3,1); LC.setLed(k1+2, k2, k3+1,1);LC.setLed(k1+2, k2, k3+2,1);LC.setLed(k1+2, k2+1, k3+2,1);LC.setLed(k1+2, k2+2, k3+2,1);LC.setLed(k1+2, k2+2, k3+1,1);LC.setLed(k1+2, k2+2, k3,1);
 LC.setLed(k1+2, k2+1, k3,1);
 LC.setLed(k1+1, k2, k3,1); LC.setLed(k1+1, k2, k3+2,1);LC.setLed(k1+1, k2+2, k3+2,1);LC.setLed(k1+1, k2+2, k3,1);delay(3*n);}
 LC.clearDisplay(0);LC.clearDisplay(1);LC.clearDisplay(2);
 LC.clearDisplay(3);LC.clearDisplay(4);LC.clearDisplay(5); 
 } 
 ///////////////////////////////////// ПРОГРАММА №7 /////////////////////////////////// 
  r1=1;     
 while(r1<=4*r){r1++;
  for (k1=5;k1>=0;k1--)
   {LC.setLed(k1, k1, k1,1);delay(2*n);LC.setLed(k1, k1, k1,0);}k1=0;
   LC.setLed(k1, k1+1, k1,1);LC.setLed(k1, k1, k1+1,1);LC.setLed(k1+1, k1, k1,1);delay(2*n);LC.clearDisplay(0);LC.clearDisplay(1);
   LC.setLed(k1, k1+2, k1,1);LC.setLed(k1, k1, k1+2,1);LC.setLed(k1+2, k1, k1,1);delay(2*n);LC.clearDisplay(0);LC.clearDisplay(2);
   LC.setLed(k1, k1+3, k1,1);LC.setLed(k1, k1, k1+3,1);LC.setLed(k1+3, k1, k1,1);delay(2*n);LC.clearDisplay(0);LC.clearDisplay(3);
   LC.setLed(k1, k1+4, k1,1);LC.setLed(k1, k1, k1+4,1);LC.setLed(k1+4, k1, k1,1);delay(2*n);LC.clearDisplay(0);LC.clearDisplay(4);
   LC.setLed(k1, k1+5, k1,1);LC.setLed(k1, k1, k1+5,1);LC.setLed(k1+5, k1, k1,1);delay(2*n);LC.clearDisplay(0);LC.clearDisplay(5);
   } 
    ///////////////////////////////////// ПРОГРАММА МАТРИЦА ///////////////////////////////////
  r1=1;     
 while(r1<=r){r1++;int tabl2[6][6]; 
  for (j=0;j<=5;j++) //цикл в цикле для перебора элементов матриц
  {
    
  for (i=0;i<=5;i++)
   {   
     LC.setLed(0, i, j,1);   
   }
  } 
  delay(10*n);
  //////////////////////////////////////////////////////////////////////////////////////////
  for (j=0;j<=5;j++) //цикл в цикле для перебора элементов матриц
  {
    
  for (i=0;i<=5;i++)
   { 
    k2=random(0,6); tabl2[i][j]=k2;  
    for (k1=1;k1<=k2;k1++)
   {   
     LC.setLed(k1-1, i, j,0);LC.setLed(k1, i, j,1);delay(n);
   }
  }
  }
  delay(50*n);
  /////////////////////////////////////////////////////////////////////////////////////////
  for (j=0;j<=5;j++) //цикл в цикле для перебора элементов матриц
  {
    
  for (i=0;i<=5;i++)
   { 
    k2=tabl2[i][j];
    for (k1=i;k1<=4;k1++)
   {   
      LC.setLed(k2, k1, j,0);LC.setLed(k2, k1+1, j,1);delay(n);
   }
  }
  }
  delay(50*n);
    LC.clearDisplay(0);LC.clearDisplay(1);LC.clearDisplay(2);
    LC.clearDisplay(3);LC.clearDisplay(4);LC.clearDisplay(5);  
 }           
}