Encender Led via SMS con SIM900 Y Arduino UNO

buenas tardes amigos… les cuento

Estoy realizando un proyecto para encender un led por medio de un sms que se enviara desde otro telefono a la SIM900. La SIM900 la estoy alimentando de una fuente externa que pueda entregar la corriente necesaria para su funcionamiento. He probado las placas mediante el monitor serial de arduino, envian un mensaje desde la sim900 a otro celular y me ha funcionado de maravilla. El código fuente fue modificado de un proyecto muy similar, pero solo para reducir los pines de salida para encender mas leds.

He probado con diferentes pines de salida sin interferir en los rx y tx pero al enviar el mensaje de texto para generar la salida digital no he obtenido resultados… Al haber hecho las pruebas con el monitor serial he podido descartar problemas de alimentación y funcionamiento… Ahora lo unico que me queda es que el problema puede estar en el código… esto puede ser por un error en este, ya que en windows 10 me aparece un error al verificar, pero en mac verifica correctamente…

Aqui les dejo el codigo para que le hechen un vistazo…
Saludos y Muchas Gracias!

#include <SoftwareSerial.h>
#include <string.h> 
SoftwareSerial Sim900Serial(2, 3);
byte buffer[64]; //Buffer para recibir datos del puerto serie
int count=0;     
int led8 = 8;

#define phonenumber "+5696456XXXX"  //Cambiar por su número de teléfono, el número de teléfono debe ser el mismo que el formato que recibe el SMS,
//Quizá debe incluir el código de país.
void setup()
{
  pinMode(led8, OUTPUT); 
  digitalWrite(led8, LOW);   //Aca dejo encender el vehiculo al reiniciar el arduino
  Sim900Serial.begin(19200);//Velocidad del puerto serie por Software pines 2 y 3
  Serial.begin(19200);      //Velocidad del puerto serie por Hardware pines 0 y 1
  delay(500);
  Sim900_Inti();


}
 
void loop()
{
  if (Sim900Serial.available())              
  {
    while(Sim900Serial.available())          //Leyendo datos del arreglo de caracteres 
    {
      buffer[count++]=Sim900Serial.read();     //Almacenando los datos del arreglo en un buffer
      if(count == 64)break;
  }
    Serial.write(buffer,count);            
    Cmd_Read_Act();                        
    clearBufferArray();              
    count = 0;                       
 
 
  }
  if (Serial.available())            // Verifica si se dispone de datos en el puerto serie por hardware 
    Sim900Serial.write(Serial.read());       // y los escribe en el escudo SIM900
}
// Limpia el buffer
void clearBufferArray()              
{
  for (int i=0; i<count;i++)
    { buffer[i]=NULL;}                  // borrar todos los índices del arreglo
}
void Sim900_Inti(void)
{
  Sim900Serial.println("AT+CMGF=1");
  delay(500);
  Sim900Serial.println("AT+CNMI=2,2");
   delay(500);
}
//////Esta función lee los SMS enviados al escudo SIM900 y actua en base a esa orden.
void Cmd_Read_Act(void)          
{  
  char buffer2[64];
  char comparetext[25];    
  for (int i=0; i<count;i++)
  { buffer2[i]=char(buffer[i]);}  
  memcpy(comparetext,buffer2,25); 
  if (strstr(comparetext,phonenumber))
  {
  if (strstr(buffer2,"Apagar"))           
    {
      digitalWrite(led8, HIGH);   //Aca enciendo el led
      
    }
    if (strstr(buffer2,"Encender"))         
    {
      digitalWrite(led8, LOW);  //Aca apago el led
      
    }

  }
}

Esta librería SIM900/908 Arduino Library resuelve código de modo simple. Mira el ejemplo SMS

hola surbyte gracias por responder… estube probando un código que estaba en el link que posteaste pero al verificarlo me dice que la libreria “SIM900.h” no existe en el directorio :frowning: … les dejo el código que use para probar, saludos

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
 
SMSGSM sms;
 
char number[]="+56995716468";
 
char message[180];
 
char pos;
 
char *p;
 
void setup()
 
{
 
 Serial.begin(9600);
 
 if (gsm.begin(2400))
 
   Serial.println("\nstatus=READY");
 
 else Serial.println("\nstatus=IDLE");
 
};
 
void loop()
 
{
 
 pos=sms.IsSMSPresent(SMS_UNREAD);
 
 Serial.println((int)pos);
 
 if((int)pos>0&&(int)pos<=20){
 
   Serial.print("NUOVO MESSAGGIO, POS=");
 
   Serial.println((int)pos);
 
   message[0]='\0';
 
   sms.GetSMS((int)pos,number,message,180);
 
   p=strstr(message,"testpwd");
 
   if(p){
 
     Serial.println("PSWD OK");
 
     p=strstr(message,"LEDON");
 
     if(p){
 
       Serial.println("LED ON");
 
       digitalWrite(13,HIGH);
 
     }
 
     else{
 
       p=strstr(message,"LEDOFF");
 
       if(p){
 
         Serial.println("LED OFF");
 
         digitalWrite(13,LOW);
 
       }
 
     }
 
   }
 
   sms.DeleteSMS((int)pos);
 
 }
 
 delay(5000);
 
};

No instalaste bien la librería. Mira que no haya doble carpeta SIM900

Hola surbyte, he instalado las librerias y al verificar no hay problema... Aun así al enviar el mensaje no reacciona. Cual cree usted que puede ser el problema?

he instalado las librerias y al verificar no hay problema..

Como has verificado?

primero incluí las librerias GSM al IDE y luego verifique el código en el mismo IDE clickeando en el tick de "verificar"