Leggere un intero a 3 cifre da seriale

Ragazzi mi servirebbe sapere come fare per leggere un intero inserito da tastiera sul monitor seriale.
So che legge caratteri ascii, quindi per una cifra basta fare "cifra-48" dove 48 è la posizione dello 0 nella tabella ascii.
Ma per un intero a tre cifre?
avevo pensato a questo sketch:

if(Serial.avaliable())
{
    x=0;
    num[0]=Serial.read()-48;
    num[1]=Serial.read()-48;
    num[2]=Serial.read()-48;

    x=num[0]*100+num[1]*10+num[2];

}

ma non mi convince moltissimo xD inoltre ho alcuni problemi, a volte mi da vari parametri sul monitor seriale anche se non scrivo niente, a volte infiniti valori.
Io vorrei che quando non scrivo niente non faccia nulla, che si fermi in attesa dell'input.

inseriscigli un istruzione di pausa che te lo fa funzionare solo quando riceve un click ad esempio nel c si può usare system(pause) e a quel punto il programma funziona quando riceve un impulso dalla tastiera del pulsante invio

si in C lo so, ma con arduino non lo so xD.
Ma non c'è un modo più veloce per leggere un intero a 3 cifre?

Questa è la funzione presente nell'IDE

long Stream::parseInt(char skipChar)
{
  boolean isNegative = false;
  long value = 0;
  int c;

  c = peekNextDigit();
  // ignore non numeric leading characters
  if(c < 0)
    return 0; // zero returned if timeout

  do{
    if(c == skipChar)
      ; // ignore this charactor
    else if(c == '-')
      isNegative = true;
    else if(c >= '0' && c <= '9')        // is c a digit?
      value = value * 10 + c - '0';
    read();  // consume the character we got with peek
    c = timedPeek();
  }
  while( (c >= '0' && c <= '9') || c == skipChar );

  if(isNegative)
    value = -value;
  return value;
}

Puoi prendere spunto da questa per creartene una tua.