Problema velocidad de comunicacion con SIM800L/Arduino

Hola buenas tardes, estoy haciendo un proyecto el cual uso Arduino Mega y un SIM800L, tengo un problema con la comunicacion.
Si trabajo con 9600 baudios puedo enviar bien los sms pero cuando los recibo, solo puedo recibir 10 caracteres en el cuerpo del sms. Para poder recibir todo el cuerpo el sms completo bajo la velocidad a 1200 baudios y puedo recibir bien todo el sms. Pero si trabajo con esa velocidad no puedo enviar los sms.

Alguno tiene alguna sugerencia para este problema. ??
 
Hola buenas tardes, estoy haciendo un proyecto el cual uso Arduino Mega y un SIM800L, tengo un problema con la comunicacion.
Si trabajo con 9600 baudios puedo enviar bien los sms pero cuando los recibo, solo puedo recibir 10 caracteres en el cuerpo del sms. Para poder recibir todo el cuerpo el sms completo bajo la velocidad a 1200 baudios y puedo recibir bien todo el sms. Pero si trabajo con esa velocidad no puedo enviar los sms.

Alguno tiene alguna sugerencia para este problema. ??
¿El 800L lo está alimentando con 3,7 Voltios desde una batería independiente como se sugiere?

Ejemplo sin librería:
C:
#include <SoftwareSerial.h>
// CONFIGURACION DE UART GSM
#define CONFIG_GSM_RXPIN 4
#define CONFIG_GSM_TXPIN 3
#define CONFIG_GSM_BAUDRATE 9600
// PUERTO SERIE EMULADO: EL ARDUINO UNO TIENE SOLO 1 UART
// EN EL CONSTRUCTOR DE SOFTWARESERIAL SE ESPECIFICAN LOS PINES PARA RX Y TX
SoftwareSerial swseri = SoftwareSerial(CONFIG_GSM_RXPIN, CONFIG_GSM_TXPIN);

void setup()
{
  // PREPARAR LOS PUERTOS SERIALES A LA VELOCIDAD CONFIGURADA
  swseri.begin(CONFIG_GSM_BAUDRATE);
  Serial.begin(CONFIG_GSM_BAUDRATE);
  // IMPRIMIR EL ENCABEZADO INCIAL
  Serial.println(F("----------------------------------------------------"));
  Serial.println(F("  EJEMPLO PARA ENVIAR SMS CON ARDUINO Y MODULO GSM  "));
  Serial.println(F("            Tienda de electrónica, IoT, Arduino y Raspberry pi - Geek Factory              "));
  Serial.println(F("----------------------------------------------------"));

  // ENVIAR LOS COMANDOS AT AL MODEM PARA EL ENVIO DEL MENSAJE SMS
  // CONFIGURAR EL MODULO PARA ENVIO DE MENSAJES EN MODO TEXTO (OTRA OPCION ES EL MODO PDU)
  swseri.println("AT+CMGF=1");
  delay(100);
   // ENVIAR EL COMANDO DE ENVIO DE SMS INCLUYENDO EL DESTINATARIO DEL MENSAJE
  swseri.println("AT+CMGS=\"+521XXXXXXXXX\"");
  delay(100);
   // ENVIAR EL CUERPO DEL MENSAJE
  swseri.print("HOLA MUNDO SMS DESDE ARDUINO!");
  delay(500);
   // ENVIAR EL CARACTER DE CONTROL ASCII 26 (SUB) 0X1A INDICANDO EL FINAL DEL CUERPO DEL MENSAJE
  swseri.print(char(0x1A));
  delay(2000);
}

void loop()
{
  // SI HAY DATOS EN LA INTERFAZ SERIAL POR SOFTWARE, ESCRIBIRLOS EN EL UART FISICO
  if (swseri.available())
  {
    Serial.write(swseri.read());
  }
   // SI HAY DATOS EN LA INTERFAZ SERIAL POR HARDWARE, ESCRIBIRLOS EN EL UART EMULADO
  if (Serial.available())
  {
    swseri.write(Serial.read());
  }
}
 
Hola buenas tardes, estoy haciendo un proyecto el cual uso Arduino Mega y un SIM800L, tengo un problema con la comunicacion.
Si trabajo con 9600 baudios puedo enviar bien los sms pero cuando los recibo, solo puedo recibir 10 caracteres en el cuerpo del sms. Para poder recibir todo el cuerpo el sms completo bajo la velocidad a 1200 baudios y puedo recibir bien todo el sms. Pero si trabajo con esa velocidad no puedo enviar los sms.

Alguno tiene alguna sugerencia para este problema. ??
Publica lo que tienes para poder ayudarte.
 
Hola buenas tardes, vuelvo a retomar el proyecto y necesitaria resolver este problema.

dejo el codigo de como leo el pueto serie.

Código:
 if(Serial2.available())
  {
   mensaje=Serial2.readString();
   delay(100);
   Serial.println(mensaje);
  }

trabajo con 9600 baudios
lo recibo bien al SMS, pero solo con primeros 11 carecteres..
 
¿Que función tiene ese delay?
Si ya sabes que lees solo un trozo de la cadena prueba a volver a leer o pon el delay antes y no después.

De todos modos el buffer sería de Arduino es de 32 bytes si esperas que sean más largos los mensajes has de hacer un bucle para leer consecutivamente el buffer.
 
trabajo con 9600 baudios
lo recibo bien al SMS, pero solo con primeros 11 carecteres..
Prueba con eliminar ese delay que esta dentro del bucle de lectura de las cadenas. Solo imagina que envías un comando AT y el módulo tiene que responder una cadena extensa pero el micro justo entra en la línea de delay(100)-Se queda "bloqueado"- y el módulo sigue enviando caracteres. Ahora te imaginas lo que causaría ese delay ? Rpta: El micro no recepciona ningún carácter mientras se encuentre en delay por más que alguien le envíe carácter o cadenas.
 
Hola, buenas a todos. Ahi elimine el delay y me recibe bien el SMS completo. Muchas gracias chicos.
Saludos
Porque tus SMS son de menos de 32 caracteres, como sean de mas vas a ver...

Algo así creo que iría mejor:

Código:
if (Serial2.available()){
mensaje = "";
while(Serial2.available())
  {
   mensaje=mensaje + Serial2.readString();
  }
   Serial.println(mensaje);
}

Seguramente no está del todo fino el código porque no me aclaro mucho con los strings en C
 
Última edición:
Atrás
Arriba