No consigo leer con serial.read...Ufff...

Muchas Gracias Igor R

Esos enlaces son una joya, me pongo a estudiarlos ya.

Respecto a mi problema del modem serie y como no se aun encadenar caracteres con string y conseguir comparar strings, he tenido que recurrir a la libreria "string"

No he conseguido que me funcione el ejeplo que trae (copiado integro) de "StringEquals.pde" es como si no reconociera el caracter de intro o retorno de carro porque si en vez de poner "\r" le pongo una "A" si que da por concluida la entrada de datos.

Asi que he probado un ejemplo que trae llamado "StringContains.pde" y este es el que me ha funcionado y me he quitado por un lado el contar caracteres de retorno de carro y avance de linea, simplemente comprueba si en la respuesta existe la palabra que quiero y paso de leer el resto. (es un apaño pero de momento es lo que tengo)

Pongo el ejemplo de codigo que he usado hoy para comprobarlo (esta chapucero pero era una prueba rapida de que funcionara) por si puede ayudar a cuaquier compañero en los mismos berengenales que yo.

Un saludo, continuare...

#include <WString.h>                
#include <LiquidCrystal.h> 
#define maxLength 30
String inString = String(maxLength);  
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2);                    // define display de dos columnas
  Serial.begin(9600);                  // define baudios
  pinMode(7, OUTPUT);                  // define retroiluminacion en el 7   
  digitalWrite(7, HIGH);               // enciende retroiluminacion  
  Serial.println("ATZ");               // Reset del modem
  lcd.clear();
  lcd.setCursor(0, 0);
//Regla-Lcd("1..............6" );
  lcd.print("Iniciando Modem " );      // Doy tiempo a que el modem se recupere
  lcd.setCursor(0, 1);
  for (int i=0; i <= 8; i++){
    lcd.print(".");
    delay(700);
   }
  Serial.println("AT&D&S0=4");         // Inicio Dtr y pongo autorespuesta en 4
  Serial.println("ATE0");              // Desactivo mostrar codigos
  Serial.println("ATQ1");              // Desactivo mostrar resultados
}

void loop () {
  while(Serial.available() > 0) {
    getIncomingChars();
  }
  if (inString.contains("NO CARRIER")) {
     lcd.print("SIN PORTADORA");
     limpia();
  }
  if (inString.contains("OK")) {
     lcd.print("OK");
     limpia();
  }
  if (inString.contains("RING")) {
     lcd.print("LLAMANDO");
     limpia();
  }
  if (inString.contains("56000")) {
     lcd.print("VELOCIDAD 56KB");
     limpia();
  }
  if (inString.contains("ERROR")) {
     lcd.print("ERROR");
     limpia();
  }
  inString = " ";
  Serial.flush();
  delay(500);
}

void getIncomingChars() {
  char inChar = Serial.read();
  if (inString.length() < maxLength) {
    inString.append(inChar);
  } 
  else {
    inString = inChar;
  }
}

void limpia(){
  delay(500);
  lcd.clear();
}