Advertisement
Al_Ninyo

new4x4

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