Encender varios led con sms

Hola muy buenas, estoy tratando de llevar a cabo un tutorial que he encontrado en internet, se trata de encender varios led con un Sms, el proyecto es este que dejo en el enlace https://rogerbit.com/wprb/2015/11/encendiendo-led-con-sms/ he seguido el tutorial al pie de la letra, tanto en conexiones como en el resto, lo único que en lugar de utilizar GSM SIM900 he utilizado SIM 800l, lo he conectado de la siguiente manera, Arduino UNO, GSM SIM 800l y para alimentar el modulo Gsm, un regulador de tensión a 4v conectado a una fuente de alimentación de 4 amperios, y cuando envío el mensaje ni veo que el modulo Gsm le envíe al Arduino uno ni transmisión ni recepción y ni enciende led ni nada, os dejo la programación para ver si me podéis ayudar, gracias de antemano

#include <SoftwareSerial.h>
#include <string.h> 
SoftwareSerial Sim800Serial(2, 3);
byte buffer[64]; //Buffer para recivir datos del puerto serie
int count=0;     
int led13 = 13;
int led12 = 12;
int led11 = 11;
int led10 = 10;
int led9 = 9;
int led8 = 8;
int led7 = 7;
int led6 = 6;
int led5 = 5;
int led4 = 4;
#define phonenumber "+34XXXXXXXX"  //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()
{
//Del pin 4 al 13 serán salidas donde se conectaran los led
   pinMode(led13, OUTPUT); 
   pinMode(led12, OUTPUT); 
   pinMode(led11, OUTPUT); 
   pinMode(led10, OUTPUT); 
   pinMode(led9, OUTPUT); 
   pinMode(led8, OUTPUT); 
   pinMode(led7, OUTPUT); 
   pinMode(led6, OUTPUT); 
   pinMode(led5, OUTPUT); 
   pinMode(led4, OUTPUT); 
  
  Sim800Serial.begin(9600);//Velocidad del puerto serie por Software pines 2 y 3
  Serial.begin(9600);      //Velocidad del puerto serie por Hardware pines 0 y 1
  delay(500);
  Sim800_Inti();
}
 
void loop()
{
  if (Sim800Serial.available())              
  {
    while(Sim800Serial.available())          //Leyendo datos del arreglo de caracteres 
    {
      buffer[count++]=Sim800Serial.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
    Sim800Serial.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 Sim800_Inti(void)
{
  Sim800Serial.println("AT+CMGF=1");
  delay(500);
  Sim800Serial.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))
  {
///////////LED13///////////////////////////////////////    
  if (strstr(buffer2,"On13"))           
    {
      digitalWrite(led13, HIGH);
      
    }
    if (strstr(buffer2,"Off13"))        
    {
      digitalWrite(led13, LOW); 
      
    }
///////////LED12///////////////////////////////////////    
  if (strstr(buffer2,"On12"))            
    {
      digitalWrite(led12, HIGH);
      
    }
    if (strstr(buffer2,"Off12"))        
    {
      digitalWrite(led12, LOW); 
      
    }
///////////LED11///////////////////////////////////////    
  if (strstr(buffer2,"On11"))            
    {
      digitalWrite(led11, HIGH);
     
    }
    if (strstr(buffer2,"Off11"))        
    {
      digitalWrite(led11, LOW); 
      
    }
///////////LED10///////////////////////////////////////    
  if (strstr(buffer2,"On10"))            
    {
      digitalWrite(led10, HIGH);
    }
    if (strstr(buffer2,"Off10"))        
    {
      digitalWrite(led10, LOW); 
    }
///////////LED9///////////////////////////////////////    
  if (strstr(buffer2,"On9"))            
    {
      digitalWrite(led9, HIGH);
    }
    if (strstr(buffer2,"Off9"))        
    {
      digitalWrite(led9, LOW); 
    }
///////////LED8///////////////////////////////////////    
  if (strstr(buffer2,"On8"))            
    {
      digitalWrite(led8, HIGH);
    }
    if (strstr(buffer2,"Off8"))        
    {
      digitalWrite(led8, LOW); 
    }
///////////LED7///////////////////////////////////////    
  if (strstr(buffer2,"On7"))            
    {
      digitalWrite(led7, HIGH);
    }
    if (strstr(buffer2,"Off7"))        
    {
      digitalWrite(led7, LOW); 
    }
///////////LED6///////////////////////////////////////    
  if (strstr(buffer2,"On6"))            
    {
      digitalWrite(led6, HIGH);
    }
    if (strstr(buffer2,"Off6"))        
    {
      digitalWrite(led6, LOW); 
    }
///////////LED5///////////////////////////////////////    
  if (strstr(buffer2,"On5"))            
    {
      digitalWrite(led5, HIGH);
    }
    if (strstr(buffer2,"Off5"))        
    {
      digitalWrite(led5, LOW); 
    }
///////////LED4///////////////////////////////////////    
  if (strstr(buffer2,"On4"))            
    {
      digitalWrite(led4, HIGH);
    }
    if (strstr(buffer2,"Off4"))        
    {
      digitalWrite(led4, LOW); 
    }
    
    if (strstr(buffer2,"Allon"))            
    {
      digitalWrite(led4, HIGH);
      digitalWrite(led5, HIGH);
      digitalWrite(led6, HIGH);
      digitalWrite(led7, HIGH);
      digitalWrite(led8, HIGH);
      digitalWrite(led9, HIGH);
      digitalWrite(led10, HIGH);
      digitalWrite(led11, HIGH);
      digitalWrite(led12, HIGH);
      digitalWrite(led13, HIGH);
    }
    if (strstr(buffer2,"Alloff"))        
    {
      digitalWrite(led4, LOW);
      digitalWrite(led4, LOW);
      digitalWrite(led4, LOW);
      digitalWrite(led4, LOW);
      digitalWrite(led4, LOW);
      digitalWrite(led4, LOW);
      digitalWrite(led4, LOW);
      digitalWrite(led4, LOW);
      digitalWrite(led4, LOW);
      digitalWrite(led4, LOW);
    }
  }
}

Ok. Los módulos SIM como el 800 o 900 tienen un boton de POWERON que se debe presionar para que realmente arranque. Revisa si no tiene uno. Suele ser un botón pulsador a 90 grados. Tal vez te falte eso para iniciarlizarlo y luego si responderá a los comandos SMS:

Hola muchas gracias por responder al mensaje, tengo dos módulos, he revisado los dos y ninguno tiene botón. un modulo ya lo tenia funcionando con un Nano, que me enviaba mensajes cada vez que se entraba en una habitación, y lo he desmontado para probar con esto, y el otro que tengo lo compre para esto, los dos los he adquirido en paginas de España, no en china, lo digo por si tiene que ver con el botón, pero con el Nano lo conecte y funciono, pero ahora sin embargo no, anoche realizando pruebas le conecte el reset del Sim800l al reset del Arduino y e reseteaba el Arduino, en el modulo no detecte nada.

Gracias de nuevo.

Tal vez no este teniendo señal del proveedor.
No veo muchos Serial.print indicando que esta pasando.
Agrega algunos para entender donde se queda esperando?
Particularmente aquí deberia recibir los SMS

if (Sim800Serial.available())              
  {
    while(Sim800Serial.available())          //Leyendo datos del arreglo de caracteres 
    {
      buffer[count++]=Sim800Serial.read();     //Almacenando los datos del arreglo en un buffer
      if(count == 64)break;
  }
    Serial.write(buffer,count);            // Aca imprime, realmente lo hace?
    Cmd_Read_Act();                        
    clearBufferArray();              
    count = 0;                       
   }

Hola Subyte, no se utilizar los Serial.print, llevo haciendo pruebas y mas pruebas como un loco. lo que si puedo decir es que le mando comandos AT y no responde nada, y otras pruebas que he realizado es este tutorial

l Controlar dispositivos electrónicos a través de mensajes de texto – SIM800L y Arduino – El Taller De TD (wordpress.com)

Y me ocurre lo mismo, no funciona y tampoco responde al comando AT

Muchas gracias.

Bueno, mi amigo. Busca en youtube Arduino Serial.print y luego mira donde poner alguno que te diga si esta recibiendo datos de lo contario estas a ciegas.
Este es una impresion del tipo que te menciono pero imprime los count bytes que fueron leidos por el puerto serie usando Serial.write()
Serial.write imprime de a uno pero al ponerle buffer, count le dices imprime los bytes que tiene buffer acumulados de 1 en 1 que llegaron por el puerto serie y que deberian tener los mensajes SMS entrantes y cuando llegues a la cantidad almacenada en count detente o sea para de imprimir.
Si no recibes nada es porque falla algo con tu proveedor.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.