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