#include <Shifty.h>
Shifty shift;
void setup() {
shift.setBitCount(48);
shift.setPins(11, 8, 12);
}
void Layer(int K)
{
if ( K >0 && K <37 ) {
shift.writeBit(40, 0);
shift.writeBit(32, 0);
shift.writeBit(24, 0);
shift.writeBit(16, 0);
shift.writeBit(8, 0);
shift.writeBit(0, 1);
}
else if ( K >36 && K < 73 ) {
shift.writeBit(40, 0);
shift.writeBit(32, 0);
shift.writeBit(24, 0);
shift.writeBit(16, 0);
shift.writeBit(0, 0);
shift.writeBit(8, 1);
}
else if ( K >72 && K < 109 ) {
shift.writeBit(40, 0);
shift.writeBit(32, 0);
shift.writeBit(24, 0);
shift.writeBit(0, 0);
shift.writeBit(8, 0);
shift.writeBit(16, 1);
}
else if ( K >108 && K < 145 ) {
shift.writeBit(40, 0);
shift.writeBit(32, 0);
shift.writeBit(0, 0);
shift.writeBit(16, 0);
shift.writeBit(8, 0);
shift.writeBit(24, 1);
}
else if ( K >144 && K < 181 ) {
shift.writeBit(40, 0);
shift.writeBit(0, 0);
shift.writeBit(24, 0);
shift.writeBit(16, 0);
shift.writeBit(8, 0);
shift.writeBit(32, 1);
}
else if ( K >180 && K < 217 ) {
shift.writeBit(0, 1);
shift.writeBit(32, 1);
shift.writeBit(24, 1);
shift.writeBit(16, 1);
shift.writeBit(8, 1);
shift.writeBit(40, 0);
}
else{
shift.writeBit(0, 0);
shift.writeBit(32, 0);
shift.writeBit(24, 0);
shift.writeBit(16, 0);
shift.writeBit(8, 0);
shift.writeBit(40, 0);
}
}
void LayerXy(int X)
{
if ( X >0 && X <7 ) {
shift.writeBit(40, 0);
shift.writeBit(32, 0);
shift.writeBit(24, 0);
shift.writeBit(16, 0);
shift.writeBit(8, 0);
shift.writeBit(0, 1);
}
else if ( X >6 && X < 13 ) {
shift.writeBit(40, 0);
shift.writeBit(32, 0);
shift.writeBit(24, 0);
shift.writeBit(16, 0);
shift.writeBit(0, 0);
shift.writeBit(8, 1);
}
else if ( X >12 && X < 19 ) {
shift.writeBit(40, 0);
shift.writeBit(32, 0);
shift.writeBit(24, 0);
shift.writeBit(0, 0);
shift.writeBit(8, 0);
shift.writeBit(16, 1);
}
else if ( X >18 && X < 25 ) {
shift.writeBit(40, 0);
shift.writeBit(32, 0);
shift.writeBit(0, 0);
shift.writeBit(16, 0);
shift.writeBit(8, 0);
shift.writeBit(24, 1);
}
else if ( X >24 && X < 31 ) {
shift.writeBit(40, 0);
shift.writeBit(0, 0);
shift.writeBit(24, 0);
shift.writeBit(16, 0);
shift.writeBit(8, 0);
shift.writeBit(32, 1);
}
else if ( X >30 && X < 37 ) {
shift.writeBit(0, 1);
shift.writeBit(32, 1);
shift.writeBit(24, 1);
shift.writeBit(16, 1);
shift.writeBit(8, 1);
shift.writeBit(40, 0);
}
else{
shift.writeBit(0, 0);
shift.writeBit(32, 0);
shift.writeBit(24, 0);
shift.writeBit(16, 0);
shift.writeBit(8, 0);
shift.writeBit(40, 0);
}
}
void Col(int range)
{
switch (range) {
case 1:
shift.writeBit(1, HIGH);
break;
case 2:
shift.writeBit(2, HIGH);
break;
case 3:
shift.writeBit(3, HIGH);
break;
case 4:
shift.writeBit(5, HIGH);
break;
case 5:
shift.writeBit(6, HIGH);
break;
case 6:
shift.writeBit(9, HIGH);
break;
case 7:
shift.writeBit(10, HIGH);
break;
case 8:
shift.writeBit(11, HIGH);
break;
case 9:
shift.writeBit(12, HIGH);
break;
case 10:
shift.writeBit(13, HIGH);
break;
case 11:
shift.writeBit(14, HIGH);
break;
case 12:
shift.writeBit(17, HIGH);
break;
case 13:
shift.writeBit(18, HIGH);
break;
case 14:
shift.writeBit(19, HIGH);
break;
case 15:
shift.writeBit(20, HIGH);
break;
case 16:
shift.writeBit(21, HIGH);
break;
case 17:
shift.writeBit(22, HIGH);
break;
case 18:
shift.writeBit(25, HIGH);
break;
case 19:
shift.writeBit(26, HIGH);
break;
case 20:
shift.writeBit(27, HIGH);
break;
case 22:
shift.writeBit(28, HIGH);
break;
case 23:
shift.writeBit(29, HIGH);
break;
case 24:
shift.writeBit(30, HIGH);
break;
case 25:
shift.writeBit(33, HIGH);
break;
case 26:
shift.writeBit(34, HIGH);
break;
case 27:
shift.writeBit(35, HIGH);
break;
case 28:
shift.writeBit(36, HIGH);
break;
case 29:
shift.writeBit(37, HIGH);
break;
case 30:
shift.writeBit(38, HIGH);
break;
case 31:
shift.writeBit(41, HIGH);
break;
case 32:
shift.writeBit(42, HIGH);
break;
case 33:
shift.writeBit(37, HIGH);
break;
case 34:
shift.writeBit(38, HIGH);
break;
case 35:
shift.writeBit(41, HIGH);
break;
case 36:
shift.writeBit(42, HIGH);
break;
}
}
void Led(int L)
{
if ( L >0 && L <37 )
{Col(L);
Layer(L);}
else if ( L >36 && L <73 )
{Col(L -36);
Layer(L);}
else if ( L >72 && L <109 )
{Col(L -72);
Layer(L);}
else if ( L >108 && L <145 )
{Col(L -108);
Layer(L);}
else if ( L >144 && L <181 )
{Col(L -144);
Layer(L);}
else if ( L >180 && L <217 )
{Col(L -180);
Layer(L);}
else if ( L >108 && L <145 )
{Col(L /2);
Layer(L);}
else{
for (int i = 0; i <= 216; i++)
{shift.writeBit(i, LOW);}
}
}
void Yas(int Y)
{
LayerXy(X);
Led(Y);
Led(Y +6);
Led(Y +12);
Led(Y +18);
Led(Y +24);
Led(Y +30);
}
void loop()
{
for (int i = 0; i <= 216; i++)
{
Led(i, HIGH);
delay(200);
Led(i, LOW);
}
}