//////////////////////////////////////////////// // Matrix Runner // Runs an LED around the 8x8 Matrix // // This code may be freely used and copied. // // Gareth Davies - June 2012 // //////////////////////////////////////////////// int comRows[8] = {0, 1, 2, 3, 4, 5, 6, 7}; // pins for common Anode Rows int colRed[8] = {8, 9, 10, 11, 12, 13, A0, A1}; // pins for Red column int idxCol = 0, idxRow = 0; int delay1 = 100; void setup() { // initialize all pins as outputs for (int i=0; i< 8; i++) { pinMode(comRows[i], OUTPUT); pinMode(colRed[i], OUTPUT); digitalWrite(comRows[i], LOW); // switch ROW off (Anode) digitalWrite(colRed[i], HIGH); // switch the column off (Cathode) } } void loop() { for (int i=0; i<7; i+=2) { runColumn(i, 0, 8); runColumn(i+1, 7, -1); } runRow(0, 6, 0); } void runColumn (int row, int cStart, int cStop) // NB. stop value is one past the last column to be lit { int cStep = 1; if (cStop < cStart) cStep = -1; digitalWrite(comRows[row], HIGH); //enable row for (int i=cStart; i!=cStop; i += cStep) { digitalWrite(colRed[i], LOW); // enable column delay(delay1); // wait for a bit digitalWrite(colRed[i], HIGH); // disable colum } digitalWrite(comRows[row], LOW); // disable row } void runRow (int column, int cStart, int cStop) // NB. stop value is one past the last row to be lit { int cStep = 1; if (cStop < cStart) cStep = -1; digitalWrite(colRed[column], LOW); //enable column for (int i=cStart; i!=cStop; i += cStep) { digitalWrite(comRows[i], HIGH); // enable row delay(delay1); // wait for a bit digitalWrite(comRows[i], LOW); // disable row } digitalWrite(colRed[column], HIGH); // disable column }