Auto Reset de Shield Sim 900

Hola amigos estoy realizando un proyecto con una shield Sim900 Modem Gsm Y Gprs la cual funciona a la perfeccion, solo que al momento de trabajar por un par de horas esta pierde la senal y al activarse un pulso de una alarma en la entrada de mi arduino para realizar la llamada y mensaje no me llama, ya que la shield no esta conectada a la red.

lo que megustaria es saber como poder tener una rutina que antes de que realize la llamada y el mensaje de texto primero revise si la senal de la shield esta disponible, si no esta disponible que mande un pulso para encenderla…

este es mi programa

#include <SoftwareSerial.h>

SoftwareSerial SIM900(10, 11); // Configura el puerto serial para el SIM900
const byte pinalarma = 7; //pin de entrada de alarma
bool alarma;    //nombre de la variable alarma

void setup()
{
 
  SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
  Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
  Serial.println("OK");
  SIM900.println("AT + CPIN = \"XXXX\""); //Comando AT para introducir el PIN de la tarjeta
  delay(25000); //Tiempo para que encuentre una RED
  pinMode(pinalarma, INPUT); //Configurando la entrada del pin
  
}



void llamar()
{
  Serial.println("Realizando llamada...");
  SIM900.println("ATD6413270802;"); //Comando AT para realizar una llamada
  delay(30000); // Espera 30 segundos mientras realiza la llamada
  SIM900.println("ATH"); // Cuelga la llamada
  delay(1000);
  Serial.println("Llamada finalizada");
}

void mensaje_sms()
{
  Serial.println("Enviando SMS...");
  SIM900.print("AT+CMGF=1\r"); //Comando AT para mandar un SMS
  delay(1000);
  SIM900.println("AT + CMGS = \"6413270802\""); //Numero al que vamos a enviar el mensaje
  delay(1000);
  SIM900.println("Alerta Horno IR-02 Fuera de Parametros!!!.... (Esta Alerta Continuara Enviandose Cada 15 Min Hasta que El Horno Sea Estabilizado)");// Texto del SMS
  delay(100);
  SIM900.println((char)26);//Comando de finalizacion ^Z
  delay(100);
  SIM900.println();
  delay(5000); // Esperamos un tiempo para que envíe el SMS
  Serial.println("SMS enviado");
}

void loop()
{
  
   alarma = digitalRead(pinalarma);
  
  if(alarma==1)
  {
   

  mensaje_sms(); //Envia SMS  
  llamar(); //Realiza la llamada
  delay(900000); //llama cada 15 minutos
  
  
  
  }
}

Gracias espero alguien me pueda ayudar :slight_smile: