I was testing out making a 2x2 led matrix and I ended up defining 15 byte variables to represent all 4 bit numbers. The void loop ended up messy. Is there a way to loop through all such variables (n0-n15). I tried putting them into another array, but they merge together and I don’t know how to then send them to the function.
#define col1 12
#define col2 11
#define row1 10
#define row2 9
const byte rows[] = {
row1, row2
};
const byte col[] = {
col2, col1
};
byte n0[2] = {B00, B00};
byte n1[2] = {B00, B01};
byte n2[2] = {B00, B10};
byte n3[2] = {B00, B11};
byte n4[2] = {B01, B00};
byte n5[2] = {B01, B01};
byte n6[2] = {B01, B10};
byte n7[2] = {B01, B11};
byte n8[2] = {B10, B00};
byte n9[2] = {B10, B01};
byte n10[2] = {B10, B10};
byte n11[2] = {B10, B11};
byte n12[2] = {B11, B00};
byte n13[2] = {B11, B01};
byte n14[2] = {B11, B10};
byte n15[2] = {B11, B11};
int dt = 50;
void setup() {
// put your setup code here, to run once:
pinMode(row2, OUTPUT);
pinMode(row1, OUTPUT);
pinMode(col2, OUTPUT);
pinMode(col1, OUTPUT);
Serial.begin(9600);
}
void loop() {
drawScreen(n0);
delay(dt);
drawScreen(n1);
delay(dt);
drawScreen(n2);
delay(dt);
drawScreen(n3);
delay(dt);
drawScreen(n4);
delay(dt);
drawScreen(n5);
delay(dt);
drawScreen(n6);
delay(dt);
drawScreen(n7);
delay(dt);
drawScreen(n8);
delay(dt);
drawScreen(n9);
delay(dt);
drawScreen(n10);
delay(dt);
drawScreen(n11);
delay(dt);
drawScreen(n12);
delay(dt);
drawScreen(n13);
delay(dt);
drawScreen(n14);
delay(dt);
drawScreen(n15);
delay(dt * 2);
Serial.println("done");
}
void drawScreen(byte buffer1[]) {
for (int b = 0; b < 100; b++) {
for (byte i = 0; i < 2; i++)
{
digitalWrite(rows[i], HIGH); //turn on row
for (byte a = 0; a < 2; a++)
{
digitalWrite(col[a], (~buffer1[i] >> a) & 0x01); // turn on col
delay(1);
digitalWrite(col[a], HIGH); // reset col
}
digitalWrite(rows[i], LOW); // reset row
}
}
}