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

No código abaixo, preciso chamar a função Ler passando um parâmetro ou dela receber o que foi digitado, não estou a conseguir fazer nenhuma coisa alguma. A necessidade é para poder gravar o que foi digitado em variáveis.

char entrada[15];   
byte etapa;
void setup() {
  Serial.begin(9600);    
  etapa = 1;
}
int Ler(){
  if (Serial.available() >= 15) {
    for ( int i = 0; i < 15; i++)
      entrada[i] = Serial.read();
    Serial.print("Recebido: ");
    for ( int u = 0; u < 15; u++)
      Serial.print(entrada[u]);
    Serial.println();
    return 1;  
  }
}
void loop() {
  if (etapa == 1){
    Serial.println("Entre com o endereco IP.");
    Serial.println("Atencao: Use o formato xxx.xxx.xxx.xxx");
    while (Ler() != 1){
    };
    etapa = 2;
  }
  if (etapa == 2){
    Serial.println("Entre com o mascara.");
    Serial.println("Atencao: Use o formato xxx.xxx.xxx.xxx");
    while (Ler() != 1){
    };
    etapa = 3;
  }
  if (etapa == 3){
    Serial.println("Entre com o gateway.");
    Serial.println("Atencao: Use o formato xxx.xxx.xxx.xxx");
    while (Ler() != 1){
    };
    etapa = 4;
  }
}

if (Serial.available() >= 15){
.....
return 1
{

e se não for, retorna o que?

Tente colocar um else no final e nos diga s emudou algo.

int Ler(){
  if (Serial.available() >= 15) {
    for ( int i = 0; i < 15; i++)
      entrada[i] = Serial.read();
    Serial.print("Recebido: ");
    for ( int u = 0; u < 15; u++)
      Serial.print(entrada[u]);
    Serial.println();
    return 1;  
  }
  else{
     return 0;
  }
}

Abraços

Esta parte funciona, porém preciso chamar a função Ler passando um valor, assim:
1 quando o valor a ser capturado é o IP;
2 para máscara;
3 para gateway.
Pois assim farei a gravação do valor capturado dentro a função Ler.
Pelo que sei basta colocar o valor entre os parênteses da chamada da função, tendo declarado a variável receptora na função, mas dá erro!

char entrada[15];   
boolean inicio;
byte etapa;
int retorno;
void setup() {
  Serial.begin(9600);    
  inicio = true;
  etapa = 1;
  retorno = 0;
}
int Ler(int x){
  if (Serial.available() >= 15) {
    for ( int i = 0; i < 15; i++)
      entrada[i] = Serial.read();
    Serial.print("Recebido: ");
    for ( int u = 0; u < 15; u++)
      Serial.print(entrada[u]);
    Serial.println();
    return 1;
  }
  else
    return 0;
}

void loop() {
  if (etapa == 1){
    Serial.println("Entre com o endereco IP. No formato xxx.xxx.xxx.xxx");
    Serial.println("Atencao: Use o formato xxx.xxx.xxx.xxx");
    while (Ler(1) != 1){
    };
    etapa = 2;
  }
  if (etapa == 2){
    Serial.println("Entre com o mascara. No formato xxx.xxx.xxx.xxx");
    Serial.println("Atencao: Use o formato xxx.xxx.xxx.xxx");
    while (Ler() != 1){
    };
    etapa = 3;
  }
  if (etapa == 3){
    Serial.println("Entre com o gateway. No formato xxx.xxx.xxx.xxx");
    Serial.println("Atencao: Use o formato xxx.xxx.xxx.xxx");
    while (Ler() != 1){
    };
    etapa = 4;
  }
}

Obrigado!

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 ...

O código funcionou, tive só que remover os apóstrofos na instrução case. Obrigado!
Por ora estou a tentar fazer o ciclo recomeçar quando o usuário não confirmar a operação, porém a condição na linha if (Serial.read() == 78 or Serial.read() == 110)
não é atendida quando digito n ou N, tem ideia onde está o erro?

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

void setup() 
{
  Serial.begin(9600);
  inicio = true;
}
void loop() 
{
  while (inicio == true){
    ler(1);
    ler(2);
    ler(3);
    inicio = false;
    Serial.println("IP:");
    for (int u = 0; u < 15; u++)
      Serial.print(ip[u]);
    Serial.println();
    Serial.println("Mascara:");
    for (int u = 0; u < 15; u++) 
      Serial.print(netmask[u]);
    Serial.println();
    Serial.println("Gateway:"); 
    for (int u = 0; u < 15; u++)  
      Serial.print(gateway[u]);
    Serial.println();
    Serial.println("Confirma? S ou N");
    while(Serial.available() < 1){
    }
    Serial.print(Serial.read());
    if (Serial.read() == 78 or Serial.read() == 110)
      inicio = true;// Por que não assume?   
  }
}

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

void readSerial(int y)
{
  if (y == 1)
    Serial.println("Entre com o IP");
  if (y == 2)
    Serial.println("Entre com a Mascara");
  if (y == 3)
    Serial.println("Entre com o Gateway");
  while(Serial.available() <=14){
  }
  for(int i = 0; i < 15; i++)
  {
    if (y == 1)
      ip[i] = Serial.read();
    if (y == 2)
      netmask[i] = Serial.read();
    if (y == 3)
      gateway[i] = Serial.read();
  }
}

O código funcionou, tive só que remover os apóstrofos na instrução case. Obrigado!

Quando digitas um caracter na serial port este ocupa um byte por cada caracter digitado.Como eu à pressa meti na funcao int ler(int x) entao o valor passado por x esta a ser tratado como um int.O correcto sera passa-lo como um char

int ler(char x)

Com isto ja podes usar as plicas tipo case '1'

Por ora estou a tentar fazer o ciclo recomeçar quando o usuário não confirmar a operação, porém a condição na linha if (Serial.read() == 78 or Serial.read() == 110)
não é atendida quando digito n ou N, tem ideia onde está o erro?

Sim
E simples:

Serial.println("Confirma? S ou N");
while(Serial.available() < 1){//Aqui travas o codigo ate receberes um caracter-ok esperas pelo N ou pelo n
}
Serial.print(Serial.read());//Quando chegas aqui é porque alguem ja digitou o N ou o n e imprimes isso na serie e LIMPAS O BUFFER
if (Serial.read() == 78 || Serial.read() == 110)//Logo quando tentas ler aqui ja nao tens nada no buffer !
inicio = true;// Por que não assume? Logo aqui nada é feito

O teu erro é estares a tentar ler algo que ja leste e descartas-te!
Sempre que les a porta serie esse byte é retirado do buffer automaticamente.(quando usas o serial.read() estas a ler e a retira-lo do buffer)