Monday, September 15, 2008

Why.

So, thanks to mem on the arduino forum, I managed to figure out the damage to the code:

Now it works!

Fixed! from Andrew Parnell on Vimeo.


What was wrong?
Short version: I was being really wasteful.

Long version: the way the code was written, each LED took a whole byte to assign. With the fixed code, each row takes a byte. (Taking it from 64 bytes per pattern, to 8. Serious savings!)

Code in the comments.

1 comment:

Andrew S. Parnell said...

const int numPatterns = 64;

int anPins[8] = {18,17,16,15,14,2,3,4};
int cathPins[8] = {5, 6, 7, 8, 9, 10, 11, 12};

byte patterns[numPatterns][8] = {{ \
B00000001, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000010, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000100, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00001000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00010000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00100000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B01000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B10000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000001, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000010, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000100, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00001000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00010000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00100000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B01000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B10000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00000001, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00000010, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00000100, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00001000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00010000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00100000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B01000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B10000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00000000, \
B00000001, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00000000, \
B00000010, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00000000, \
B00000100, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00000000, \
B00001000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00000000, \
B00010000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00000000, \
B00100000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00000000, \
B01000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00000000, \
B10000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000 \
},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000001, \
B00000000, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000010, \
B00000000, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000100, \
B00000000, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00001000, \
B00000000, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00010000, \
B00000000, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00100000, \
B00000000, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B01000000, \
B00000000, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B10000000, \
B00000000, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000001, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000010, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000100, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00001000, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00010000, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00100000, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B01000000, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B10000000, \
B00000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000001, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000010, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000100, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00001000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00010000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00100000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B01000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B10000000, \
B00000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000001, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000010, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000100, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00001000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00010000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00100000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B01000000, \

},{ \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B00000000, \
B10000000
}};

void setup() {

for (int i = 0; i < 8; i++) {
pinMode(anPins[i], OUTPUT);
pinMode(cathPins[i], OUTPUT);
}
for (int i = 0; i < 8; i++) {
digitalWrite(anPins[i], LOW);
digitalWrite(cathPins[i], HIGH);
}
}

void loop() {
for(int i = 0; i < numPatterns; i++) {
pattern(patterns[i], 500);
}
}

void pattern(byte pat[8],unsigned long inc)
{
unsigned long T = millis() + inc;
while(millis() < T) {
for (int i = 0; i < 8; i++) {
digitalWrite(cathPins[i], LOW);
digitalWrite(anPins[0], pat[i] & B00000001);
digitalWrite(anPins[1], pat[i] & B00000010);
digitalWrite(anPins[2], pat[i] & B00000100);
digitalWrite(anPins[3], pat[i] & B00001000);
digitalWrite(anPins[4], pat[i] & B00010000);
digitalWrite(anPins[5], pat[i] & B00100000);
digitalWrite(anPins[6], pat[i] & B01000000);
digitalWrite(anPins[7], pat[i] & B10000000);

digitalWrite(cathPins[i], HIGH);
blank();
}
}
}

void blank() {
for (int i = 0; i < 8; i++) {
digitalWrite(anPins[i], LOW);
}
}