Função, enviar ou receber parâmetro/dados.

O erro dá porque a tua funçao aceita um parametro e tu estas a chama-a depois sem passares o parametro int x quando a chamas na loop.Em todo o caso mesmo que passes o parametro na tua funçao ler nao o estas a usar, entao para quê passa-lo?

char ip[15]; 
char netmask[15];
char gateway[15];

void setup() 
{
Serial.begin(9600);    
}
void loop() 
{
ler(1);//Isto ira ler o IP
ler(2);//Isto ira ler a mascara
ler(3);//Isto le o gateway
}


int ler(int x)
{
switch (x) 
   {
    case '1':    
      readSerial(ip);
      break;
    case '2':    
      readSerial(netmask);
      break;
    case '3':    
      readSerial(gateway);
      break;
    default:
      Serial.println("Valor passado errado");
    }
}  

void readSerial(char *myArray)
{
  while(Serial.available() <=14){}//O codigo ira travar aqui ate ter recebido os 14 bytes
  for(int i = 0; i < 15; i++)
    {
    myArray[i] = Serial.read();
    }
  for ( int u = 0; u < 15; u++)
    Serial.print(myArray[u]);
}

Nao testei o codigo porque nao tenho o meu menino por perto, mas deve te dar uma idea de como podes fazer ...