3 x 3 x 3 LED Cube code

I have recently resurrected my 3 x 3 x 3 LED cube to write some code based on Hassan Ali's code at -

http://www.abrushfx.com/Arduino/ledcube3.html

The posted code

 //Code based on ABrushFX Cube code at
//http://www.abrushfx.com/Arduino/ledcube3.html

//Array for three LED levels
int ledRow[] ={ 11, 12, 13 };
// Array for nine LED's in each level
int ledCol[]= { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int timer= 500;

void setup() // Sets up all pins as Outputs
{  
  for( int i =  0; i < 3; i++)
  
  {
  pinMode( ledRow[i],OUTPUT);
  }

    {  
      for(int j =  0; j < 9; j++)
     
      {
      pinMode( ledCol[j],OUTPUT);
      }
    }
}
// Sets an LED HIGH based on Row and Column position
void onLED(int ledRow, int ledCol){
  
  digitalWrite(ledRow, HIGH); 
  digitalWrite(ledCol, HIGH); 
  
}

// Sets an LED LOW based on Row and Column position
void offLED(int ledRow, int ledCol)
{
  digitalWrite(ledRow, LOW); 
  digitalWrite(ledCol, LOW); 
}

void topRowPaneFigure8()
    {
      for(int y = 0; y < 3; y++)   // light LED's 1 - 3 on/off on top level
        
      {
        onLED(ledRow[0],ledCol[y]);         // 7 8 9
        delay(timer);                       // 4 5 6
        offLED(ledRow[0],ledCol[y]);        // 1 2 3
      }
       for(int y = 5; y > 2; y--)  // light LED's 6 - 4 on/off on top level
      {
        onLED(ledRow[0],ledCol[y]);
        delay(timer);
        offLED(ledRow[0],ledCol[y]);
      }
       for(int y = 6; y < 9; y++)  // light LED's 7 - 9 on/off on top level
      {
        onLED(ledRow[0],ledCol[y]);
        delay(timer);
        offLED(ledRow[0],ledCol[y]);
      }
      for(int y = 5; y > 2; y--)   // light LED's 6 - 4 on/off on top level
      {
        onLED(ledRow[0],ledCol[y]);
        delay(timer);
        offLED(ledRow[0],ledCol[y]);
      }
  
  }
  

void centreRowPaneFigure8()
    {
      for(int y = 0; y < 3; y++)    // light LED's 1 - 3 on/off on centre level
        
      {
        onLED(ledRow[1],ledCol[y]);           // 7 8 9
        delay(timer);                         // 4 5 6
        offLED(ledRow[1],ledCol[y]);          // 1 2 3
      }
       for(int y = 5; y > 2; y--)   // light LED's 6 - 4 on/off on centre level
      {
        onLED(ledRow[1],ledCol[y]);
        delay(timer);
        offLED(ledRow[1],ledCol[y]);
      }
       for(int y = 6; y < 9; y++)   // light LED's 7 - 9 on/off on centre level
      {
        onLED(ledRow[1],ledCol[y]);
        delay(timer);
        offLED(ledRow[1],ledCol[y]);
      }
      for(int y = 5; y > 2; y--)   // light LED's 6 - 4 on/off on centre level
      {
        onLED(ledRow[1],ledCol[y]);
        delay(timer);
        offLED(ledRow[1],ledCol[y]);
      }
  
  }
  
  void bottomRowPaneFigure8()
    {
      for(int y = 0; y < 3; y++)   // light LED's 1 - 3 on/off on bottom level
        
      {
        onLED(ledRow[2],ledCol[y]);          // 7 8 9
        delay(timer);                        // 4 5 6
        offLED(ledRow[2],ledCol[y]);         // 1 2 3
      }
       for(int y = 5; y > 2; y--)   // light LED's 6 - 4 on/off on bottom level
      {
        onLED(ledRow[2],ledCol[y]);
        delay(timer);
        offLED(ledRow[2],ledCol[y]);
      }
       for(int y = 6; y < 9; y++)   // light LED's 7 - 9 on/off on bottom level
      {
        onLED(ledRow[2],ledCol[y]);
        delay(timer);
        offLED(ledRow[2],ledCol[y]);
      }
      for(int y = 5; y > 2; y--)    // light LED's 6 - 4 on/off on bottom level 
      { 
        onLED(ledRow[2],ledCol[y]);  
        delay(timer);
        offLED(ledRow[2],ledCol[y]);
      }
  
  }
  
  
void loop()
{
  topRowPaneFigure8();
  centreRowPaneFigure8();
  bottomRowPaneFigure8();
}

includes three functions (one for each level of the cube) that light the LED's in a figure eight configuration as detailed in the short attached txt document. The code operates as required but in the interest of building on my limited code writing skills 8) I am wondering how to consolidate the three functions

topRowPaneFigure8
centreRowPaneFigure8
bottomRowPaneFigure8

into one function. Where I am having trouble is the fact that the only difference between the three functions is the (ledRow[0] section in

onLED(ledRow[0],ledCol[y]);
delay(timer);
offLED(ledRow[0],ledCol[y]);

which is 0, 1 and 2 in the three functions corresponding to the three levels. I assume that the solution is to use a for loop, but as the " ledRow[ ] "appears unchanged four times in each function, I am somewhat perplexed. I hope that I have explained myself adequately and thanks for reading Pedro.

Cube doc.txt (399 Bytes)

void rowPaneFigure8(int row)
    {
    // Check for range errors
    if (row < 0 || row > 2)
        return;

      for(int y = 0; y < 3; y++)    // light LED's 1 - 3 on/off on centre level
      {
        onLED(ledRow[row],ledCol[y]);           // 7 8 9
        delay(timer);                                   // 4 5 6
        offLED(ledRow[row],ledCol[y]);          // 1 2 3
      }
       for(int y = 5; y > 2; y--)   // light LED's 6 - 4 on/off on centre level
      {
        onLED(ledRow[1],ledCol[y]);
        delay(timer);
        offLED(ledRow[1],ledCol[y]);
      }
       for(int y = 6; y < 9; y++)   // light LED's 7 - 9 on/off on centre level
      {
        onLED(ledRow[row],ledCol[y]);
        delay(timer);
        offLED(ledRow[row],ledCol[y]);
      }
      for(int y = 5; y > 2; y--)   // light LED's 6 - 4 on/off on centre level
      {
        onLED(ledRow[row],ledCol[y]);
        delay(timer);
        offLED(ledRow[row],ledCol[y]);
      }
  }

Thank you for your reply johnwasser. Do I correctly assume that you mean for me to replace my three existing functions

topRowPaneFigure8
centreRowPaneFigure8
bottomRowPaneFigure8

with the modified rowPaneFigure8 function you have provided ?

If so I get the following errors

sketch_nov17a.cpp: In function 'void loop()':
sketch_nov17a:39: error: too few arguments to function 'void allRowPaneFigure8(int)'
sketch_nov17a:72: error: at this point in file

Am I possibly making some mistake, here is the code I am now trying to compile and upload thanks Pedro.

//Code based on ABrushFX Cube code at
//http://www.abrushfx.com/Arduino/ledcube3.html

//Array for three LED levels
int ledRow[] ={ 11, 12, 13 };
// Array for nine LED's in each level
int ledCol[]= { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int timer= 500;

void setup() // Sets up all pins as Outputs
{  
  for( int i =  0; i < 3; i++)

  {
    pinMode( ledRow[i],OUTPUT);
  }

  {  
    for(int j =  0; j < 9; j++)

    {
      pinMode( ledCol[j],OUTPUT);
    }
  }
}
// Sets an LED HIGH based on Row and Column position
void onLED(int ledRow, int ledCol){

  digitalWrite(ledRow, HIGH); 
  digitalWrite(ledCol, HIGH); 

}

// Sets an LED LOW based on Row and Column position
void offLED(int ledRow, int ledCol)
{
  digitalWrite(ledRow, LOW); 
  digitalWrite(ledCol, LOW); 
}

void rowPaneFigure8(int row)
    {
    // Check for range errors
    if (row < 0 || row > 2)
        return;

      for(int y = 0; y < 3; y++)    // light LED's 1 - 3 on/off on centre level
      {
        onLED(ledRow[row],ledCol[y]);           // 7 8 9
        delay(timer);                                   // 4 5 6
        offLED(ledRow[row],ledCol[y]);          // 1 2 3
      }
       for(int y = 5; y > 2; y--)   // light LED's 6 - 4 on/off on centre level
      {
        onLED(ledRow[1],ledCol[y]);
        delay(timer);
        offLED(ledRow[1],ledCol[y]);
      }
       for(int y = 6; y < 9; y++)   // light LED's 7 - 9 on/off on centre level
      {
        onLED(ledRow[row],ledCol[y]);
        delay(timer);
        offLED(ledRow[row],ledCol[y]);
      }
      for(int y = 5; y > 2; y--)   // light LED's 6 - 4 on/off on centre level
      {
        onLED(ledRow[row],ledCol[y]);
        delay(timer);
        offLED(ledRow[row],ledCol[y]);
      }
  }

void loop()
{
rowPaneFigure8();
}

Replace

topRowPaneFigure8();
centreRowPaneFigure8();
bottomRowPaneFigure8();

with

rowPaneFigure8(0);
rowPaneFigure8(1);
rowPaneFigure8(2);

or

for (int i=0; i<3; i++)
    rowPaneFigure8(i);

Thanks johnwasser.
It took me a little while to work out how to implement your suggestions, but in the end I just reduced the three functions to one and incremented the

onLED(ledRow[i],ledCol[j]);
delay(timer);                       
offLED(ledRow[i],ledCol[j]);

with the for loop

for (int i = 0; i < 3; i++)

so I ended up with

    //Code based on ABrushFX Cube code at
//http://www.abrushfx.com/Arduino/ledcube3.html

//Array for three LED levels
int ledRow[] ={ 11, 12, 13 };
// Array for nine LED's in each level
int ledCol[]= { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int timer= 500;

void setup() // Sets up all pins as Outputs
{  
  for( int i =  0; i < 3; i++)
  
  {
  pinMode( ledRow[i],OUTPUT);
  }

    {  
      for(int j =  0; j < 9; j++)
     
      {
      pinMode( ledCol[j],OUTPUT);
      }
    }
}
// Sets an LED HIGH based on Row and Column position
void onLED(int ledRow, int ledCol){
  
  digitalWrite(ledRow, HIGH); 
  digitalWrite(ledCol, HIGH); 
  
}

// Sets an LED LOW based on Row and Column position
void offLED(int ledRow, int ledCol)
{
  digitalWrite(ledRow, LOW); 
  digitalWrite(ledCol, LOW); 
}

void rowPaneFigure8()
  {
    for (int i = 0; i < 3; i++)
  
    {
      for(int j = 0; j < 3; j++)   // light LED's 1 - 3 on/off on top level
        
      {
        onLED(ledRow[i],ledCol[j]);         // 7 8 9
        delay(timer);                       // 4 5 6
        offLED(ledRow[i],ledCol[j]);        // 1 2 3
      }
       for(int j = 5; j > 2; j--)  // light LED's 6 - 4 on/off on top level
      {
        onLED(ledRow[i],ledCol[j]);
        delay(timer);
        offLED(ledRow[i],ledCol[j]);
      }
       for(int j = 6; j < 9; j++)  // light LED's 7 - 9 on/off on top level
      {
        onLED(ledRow[i],ledCol[j]);
        delay(timer);
        offLED(ledRow[i],ledCol[j]);
      }
      for(int j = 5; j > 2; j--)   // light LED's 6 - 4 on/off on top level
      {
        onLED(ledRow[i],ledCol[j]);
        delay(timer);
        offLED(ledRow[i],ledCol[j]);
      }
  
  }
  
  }
  
void loop()
{
  rowPaneFigure8();
}

This saved 550 bytes, so thanks for your help Pedro.