Advertisement
Al_Ninyo

led cube 4x4x4

Jan 9th, 2015
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.40 KB | None | 0 0
  1. // Пин подключен к ST_CP входу 74HC595
  2. const int latchPin = 8;
  3. // Пин подключен к SH_CP входу 74HC595
  4. const int clockPin = 12;
  5. // Пин подключен к DS входу 74HC595
  6. const int dataPin = 11;
  7.  
  8. // указываем пины, к которым подключены слои
  9. int LayerPin[] = {4,5,6,7};
  10.  
  11. boolean mass[16] = {
  12.   0,0,0,0, // строка 1 (светодиоды 0-2)
  13.   0,0,0,0, // строка 2 (светодиоды 3-7)
  14.   0,0,0,0, // строка 3 (светодиоды 8-11)
  15.   0,0,0,0 // строка 4 (светодиоды 12-15)
  16. };
  17.  
  18. void setup() {
  19.   Serial.begin(9600);
  20.   // устанавливаем режим OUTPUT
  21.   pinMode(latchPin, OUTPUT);
  22.   pinMode(dataPin, OUTPUT);
  23.   pinMode(clockPin, OUTPUT);
  24.    
  25.   for(int layer = 0; layer < 4; layer++){
  26.     pinMode(LayerPin[layer], OUTPUT);
  27.     digitalWrite(LayerPin[layer], LOW);
  28.   }
  29. }
  30.  
  31. void loop() {
  32.   // зажигаем слои
  33. for(int layer = 0; layer < 4; layer++){
  34.     digitalWrite(LayerPin[layer], HIGH);
  35.   }
  36.  
  37.   unsigned int DATA = 0;
  38.  
  39.   for(byte pin = 0; pin < 4; pin++) {
  40.     mass[pin] = 1;
  41.     mass[pin+4] = 1;
  42.     mass[pin+8] = 1;
  43.     mass[pin+12] = 1;  
  44.    
  45.   for(byte i=0; i<16; i++){
  46.     if(mass[i]==1) DATA |= 1<<i;
  47.     else           DATA &= ~(1<<i);
  48.   }
  49.   for(byte i=0; i<16; i++){
  50.   Serial.print(mass[i]);
  51.   }
  52.   Serial.println(" ");
  53.   Serial.println(DATA);
  54.  
  55.   digitalWrite(latchPin, LOW);
  56.  
  57.   shiftOut(dataPin, clockPin, MSBFIRST, (DATA >> 8));
  58.   shiftOut(dataPin, clockPin, MSBFIRST, DATA);
  59.  
  60.   // "защелкиваем" регистр, чтобы биты появились на выходах регистра
  61.   digitalWrite(latchPin, HIGH);
  62.   delay(1000);
  63.     mass[pin] = 0;
  64.     mass[pin+4] = 0;
  65.     mass[pin+8] = 0;
  66.     mass[pin+12] = 0;
  67.  
  68.   }
  69. for(byte pin = 2; pin >= 0; pin--) {
  70.     mass[pin] = 1;
  71.     mass[pin+4] = 1;
  72.     mass[pin+8] = 1;
  73.     mass[pin+12] = 1;  
  74.    
  75.   for(byte i=0; i<16; i++){
  76.     if(mass[i]==1) DATA |= 1<<i;
  77.     else           DATA &= ~(1<<i);
  78.   }
  79.   for(byte i=0; i<16; i++){
  80.   Serial.print(mass[i]);
  81.   }
  82.   Serial.println(" ");
  83.   Serial.println(DATA);
  84.  
  85.   digitalWrite(latchPin, LOW);
  86.  
  87.   shiftOut(dataPin, clockPin, MSBFIRST, (DATA >> 8));
  88.   shiftOut(dataPin, clockPin, MSBFIRST, DATA);
  89.  
  90.   // "защелкиваем" регистр, чтобы биты появились на выходах регистра
  91.   digitalWrite(latchPin, HIGH);
  92.   delay(1000);
  93.     mass[pin] = 0;
  94.     mass[pin+4] = 0;
  95.     mass[pin+8] = 0;
  96.     mass[pin+12] = 0;
  97.     }
  98.      
  99.     for(int layer = 0; layer < 4; layer++){
  100.     digitalWrite(LayerPin[layer], LOW);
  101.     }
  102.    
  103.     for(int layer = 0; layer < 4; layer++){
  104.     digitalWrite(LayerPin[layer], HIGH);
  105.     for(byte pin = 0; pin < 4; pin++) {
  106.     mass[pin] = 1;
  107.     mass[15-pin] = 1;
  108.    
  109.   for(byte i=0; i<16; i++){
  110.     if(mass[i]==1) DATA |= 1<<i;
  111.     else           DATA &= ~(1<<i);
  112.   }
  113.   for(byte i=0; i<16; i++){
  114.   Serial.print(mass[i]);
  115.   }
  116.   Serial.println(" ");
  117.   Serial.println(DATA);
  118.  
  119.   digitalWrite(latchPin, LOW);
  120.  
  121.   shiftOut(dataPin, clockPin, MSBFIRST, (DATA >> 8));
  122.   shiftOut(dataPin, clockPin, MSBFIRST, DATA);
  123.  
  124.   // "защелкиваем" регистр, чтобы биты появились на выходах регистра
  125.   digitalWrite(latchPin, HIGH);
  126.   delay(100);
  127.     mass[pin] = 0;
  128.     mass[15-pin] = 0;
  129.     }
  130.   }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement