The sim 900 does not receive messages after a certain time of use

Good Morning,

Write a forum to seek advice on this, make a simple program to turn off and turn on a phone by SMS using the SIM900.

The system operates but after spending certain hours of being connected, it stops receiving the messages to turn the LED off or on.

I call the SIM900 and in the port I seriously note RING, it means there is a signal.

Actually I do not understand why I do not have the messages after a certain time of use, I have to restart it by disconnecting the power supply and start it again.

I attach the program

Maybe the messages are queued … Greetings

#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 LED = 12 ;
int listo=11;

void setup()
{
pinMode( LED, OUTPUT) ; // LED como salida
pinMode(listo,OUTPUT);

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, LOW); // Descomentar para activar la alimentación de la tarjeta por Software
delay(1000);
digitalWrite(9, HIGH);
delay (6000);
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 (10000);
//SIM900.println("AT + CPIN = “0000"”); //Comando AT para introducir el PIN de la tarjeta
//delay(25000); //Tiempo para que encuentre una RED
//Serial.println(“PIN OK”);
SIM900.print(“AT+CMGF=1\r”); //Configura el modo texto para enviar o recibir mensajes
delay(1000);
digitalWrite(listo, HIGH);
delay(100);
}

void identifica_SMS()
{
int led_on = mensaje.indexOf(“Encender”);
int led_off = mensaje.indexOf(“Apagar”);
if (led_on >= 0)
{
digitalWrite( LED, HIGH) ;
Serial.println("\nLED ENCENDIDO");
mensaje = “” ; //Bórralo para la próxima vez
delay(200);
mensaje_sms();
}
if (led_off >= 0)
{
digitalWrite( LED, LOW) ;
Serial.println("\nLED APAGADO");
mensaje = “” ; //Bórralo para la próxima vez
delay(200);
mensaje_sms1();
}
}

void mensaje_sms()
{
SIM900.print(“AT+CMGF=1\r”); // AT command to send SMS message
delay(100);
SIM900.println("AT+CMGS=“573183852090"”); // recipient’s mobile number, in international format
delay(100);
SIM900.println(“foco encendido”); // message to send
delay(100);
SIM900.println((char)26); // End AT command with a ^Z, ASCII code 26 //Comando de finalizacion
delay(100);
SIM900.println();
delay(5000); // Tiempo para que se envie el mensaje
Serial.println(“SMS sent successfully”);
}

void mensaje_sms1()
{
SIM900.print(“AT+CMGF=1\r”); // AT command to send SMS message
delay(100);
SIM900.println("AT+CMGS=“573183852090"”); // recipient’s mobile number, in international format
delay(100);
SIM900.println(“foco apagado”); // message to send
delay(100);
SIM900.println((char)26); // End AT command with a ^Z, ASCII code 26 //Comando de finalizacion
delay(100);
SIM900.println();
delay(5000); // Tiempo para que se envie el mensaje
Serial.println(“SMS sent successfully”);
}

PRUEBA___SOLO_RECIBIR_Y_ENVIAR_SMS.ino (2.8 KB)

after spending certain hours of being connected, it stops receiving the messages

A symptom like that is often indicative of memory contamination from the use of the String class.

The evils of Strings in Arduino sketches.