Ejemplo basico Alarma GSM con wavecom y arduino atmega-8 RS232

Añado a la pregunta de un compañero por MP :

Estos comandos son estandar, llamados conjunto de comandos Hayes Conjunto de comandos Hayes - Wikipedia, la enciclopedia libre Aunque estos que estoy empleando son para controlar un modem GSM, los que se emplean para controlar un modem de linea telefonica son practicamente muy parecidos, para ello hay que remitirse al conjunto de comandos AT y practicamente seran los que emplea un modem analogico de los de toda la vida.
http://www.usr.com/support/3cxm756/3cxm756-spanish-ug/atcoms.htm

Si recordais hace unos post años (2009) gobernaba con esta misma "patata" de atmega8 un modem Vayris n56 analogico:

Si quereis emplear un modem RS232 con un arduino que no tenga ese interface, hay que conectar una placa conversora de TTL a RS232 como esta:

Y hacer un cable null modem para conectar ambos.

Respecto a la ultima pregunta de algun error de compilacion, es posible, yo emplee el ide 022 porque un ide mas avanzado me daba error con el programador USBTINY que tengo V.2 no extrañe que o bien los comandos de la libreria String puedan dar fallo en ides posteriores... o que el compilador no contemple un micro tan antiguo como es este atmega8.

Un saludo.

PD: He encontrado algunos comandos que empleaba, el IDE creo que era el 17, no es un programa son trozos de uno que emplee

// ????????????????????????????????????????????????
// ?  FUNCION inicia Inicializa el modem                                          ?
// ????????????????????????????????????????????????
void inicia(){
  mensaje1("Iniciando Modem " );
  Serial.flush();
//  Serial.println("AT&D&S0=2&E0"); 
  Serial.println("AT&D1&S0=0&S7=18&E0");
  delay(500);
  }



if (inString.contains("NO CARRIER"))
    {
     mensaje1("Sin Portadora   ");
    }

  if (inString.contains("ERROR"))
    {
     mensaje1("Error !!      ");
    }

  if (inString.contains("CONNECT"))
    {
     mensaje1("Conectado ");
    } 

  if (inString.contains("BUSY"))
    {
     mensaje1("Ocupado");
    } 

  if (inString.contains("NO DIALTONE"))
    {
     mensaje1("Sin tono llamada");
    } 

  if (inString.contains("NO ANSWER"))
    {
     mensaje1("Sin respuesta  ");
    } 
    
  if (inString.contains("OK"))
    {
     mensaje1("OK");

En esta funcion realizaba una llamada de alarma con el modem analogico:

// ????????????????????????????????????????????????
// ?  FUNCION alarma  genera una alarma y llama al telefono programado               ?
// ????????????????????????????????????????????????
void alarma(){
    if (ha_llamado == '1')
      {
      mensaje1("Alarma entregada");
      sin_averias = '0';
      }
      
    else if ((sin_averias == '2') && (RTC.get(DS1307_HR,true) > 7) && (RTC.get(DS1307_HR,true) < 22))
          {  
          mensaje1("Alarma llamando");      // Telefono 1
          Serial.println("ATDTW971696@;");
          delay(11000);
          Serial.println("ATH0");
      
          Serial.println("ATDTW961590@;");  // Telefono 2
          delay(11000);
          Serial.println("ATH0");
      
          Serial.println("ATDTW968395@;");  // Telefono 3
          delay(11000);
          Serial.println("ATH0");
          ha_llamado = '1';
          sin_averias = '0';
          }

    else if (sin_averias == '1')
          {  
          mensaje1("Alarma llamando");      // Telefono 1
          Serial.println("ATDTW971696@;");
          delay(11000);
          Serial.println("ATH0");
      
          Serial.println("ATDTW961590@;");  // Telefono 2
          delay(11000);
          Serial.println("ATH0");

          Serial.println("ATDTW968395@;");  // Telefono 3
          delay(11000);
          Serial.println("ATH0");
          ha_llamado = '1';
          sin_averias = '0';
          }
 }