Arduino SIM900 24/7

Buenas tardes, tengo un proyecto de control a distancia de un rele por gsm con el sim900 y quisiera que funcionara 24/7, pero llega un punto en el primer dia donde el sim900 ya no recibe mas mensajes. no se que pueda ser. este es el codigo.

#include <SoftwareSerial.h>




SoftwareSerial SIM900(7,8); // Configura el puerto serie para el SIM900

char incoming_char = 0; //Variable que guarda los caracteres que envia el SIM900
String mensaje = "";
int relay_pin = 2;

void setup()
{

pinMode(relay_pin, OUTPUT);   // Setting erlay pin as output pin 
digitalWrite(relay_pin, HIGH);  // Making relay pin initailly low

inicializaSIM900();
}

void loop()
{
  if (SIM900.available() > 0)
  {
    incoming_char = SIM900.read(); //Guardamos el carácter del GPRS
    Serial.print(incoming_char); //Mostramos el carácter en el monitor serie
    mensaje = mensaje + incoming_char ; // Añadimos el carácter leído al mensaje
  }
identifica_SMS();
}


void inicializaSIM900()
{
  //digitalWrite(9, HIGH);   // Descomentar para activar la alimentación de la tarjeta por Software
  //delay(1000);             
  //digitalWrite(9, LOW);
  delay (5000);
  SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
  Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
  Serial.println("OK");
  delay (1000);
  SIM900.println("AT + CPIN = \"1234\""); //Comando AT para introducir el PIN de la tarjeta
  delay(25000); //Tiempo para que encuentre una RED
  SIM900.print("AT+CMGF=1\r"); //Configura el modo texto para enviar o recibir mensajes
  delay(1000);
  SIM900.print("AT+CNMI=2,2,0,0,0\r"); // Saca el contenido del SMS por el puerto serie del GPRS
  delay(1000);
}

void identifica_SMS()
{
  int led_on = mensaje.indexOf("Encender");
  int led_off = mensaje.indexOf("Apagar");
  int led_ok = mensaje.indexOf("Reset");
  if (led_on >= 0)
   {
    digitalWrite(relay_pin, LOW);
        delay(1000);

        
        Serial.println("\nLED ENCENDIDO");
        mensaje = "" ; //Bórralo para la próxima vez
  }
 else if (led_off >= 0)
  {
   digitalWrite(relay_pin, HIGH);
        delay(1000);

        
        Serial.println("\nLED APAGADO");
        mensaje = "" ; //Bórralo para la próxima vez
  }
else if (led_ok >=0)
  {

   digitalWrite(relay_pin, HIGH);
   delay(5000);
   digitalWrite(relay_pin, LOW);
    Serial.print("\nLED OK");
    mensaje = "" ; //Bórralo para la próxima vez

  }
  
}

gracias por su atencion

Así, a bote pronto veo que mensaje puede desbordar memoria
prueba a cambiar mensaje="" de dentro de los ifs por uno general al final de la función void identifica_SMS()

#include <SoftwareSerial.h>




SoftwareSerial SIM900(7,8); // Configura el puerto serie para el SIM900

char incoming_char = 0; //Variable que guarda los caracteres que envia el SIM900
String mensaje = "";
int relay_pin = 2;

void setup()
{

pinMode(relay_pin, OUTPUT);   // Setting erlay pin as output pin
digitalWrite(relay_pin, HIGH);  // Making relay pin initailly low

inicializaSIM900();
}

void loop()
{
  if (SIM900.available() > 0)
  {
    incoming_char = SIM900.read(); //Guardamos el carácter del GPRS
    Serial.print(incoming_char); //Mostramos el carácter en el monitor serie
    mensaje = mensaje + incoming_char ; // Añadimos el carácter leído al mensaje
  }
identifica_SMS();
}


void inicializaSIM900()
{
  //digitalWrite(9, HIGH);   // Descomentar para activar la alimentación de la tarjeta por Software
  //delay(1000);             
  //digitalWrite(9, LOW);
  delay (5000);
  SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
  Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
  Serial.println("OK");
  delay (1000);
  SIM900.println("AT + CPIN = \"1234\""); //Comando AT para introducir el PIN de la tarjeta
  delay(25000); //Tiempo para que encuentre una RED
  SIM900.print("AT+CMGF=1\r"); //Configura el modo texto para enviar o recibir mensajes
  delay(1000);
  SIM900.print("AT+CNMI=2,2,0,0,0\r"); // Saca el contenido del SMS por el puerto serie del GPRS
  delay(1000);
}

void identifica_SMS()
{
  int led_on = mensaje.indexOf("Encender");
  int led_off = mensaje.indexOf("Apagar");
  int led_ok = mensaje.indexOf("Reset");
  if (led_on >= 0)
   {
    digitalWrite(relay_pin, LOW);
        delay(1000);

       
        Serial.println("\nLED ENCENDIDO");
 //       mensaje = "" ; //Bórralo para la próxima vez    <---------
  }
 else if (led_off >= 0)
  {
   digitalWrite(relay_pin, HIGH);
        delay(1000);

       
        Serial.println("\nLED APAGADO");
//        mensaje = "" ; //Bórralo para la próxima vez  <---------
  }
else if (led_ok >=0)
  {

   digitalWrite(relay_pin, HIGH);
   delay(5000);
   digitalWrite(relay_pin, LOW);
    Serial.print("\nLED OK");
//    mensaje = "" ; //Bórralo para la próxima vez   <---------

  }
// y poner aquí. Siempre borrará 
mensaje = "" ; //Bórralo para la próxima vez     <---------
}

Saludos