Hola.
Lo que pasa es que tengo que enviar diferentes tipos de información por medio de mensajes de texto a diferentes personas, con esta función que encontre y funciona bien. Hay otras más sencillas pero no sé porque a veces funcionan y a veces no. Pero esta no me ha dado ningún problema, pero el código está un poco enredado para mis conocimientos muy básicos de arduino.
Esta es la función original:
void mensaje_sms()
{
if (enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 1) //comprueba la conexion a la red
{
Serial.println("Enviando SMS...");
enviarAT("AT+CMGF=1\r", "OK", 1000); //Comando AT para mandar un SMS
sprintf(aux_str, "AT+CMGS=\"+573008986280\"", strlen(sms)); //Numero al que vamos a enviar el mensaje
//Texto del mensaje
if (enviarAT(aux_str, ">", 10000) == 1)
{
enviarAT(sms, "OK", 10000);
}
Serial.println("SMS enviado");
}
else
{
reiniciar();
iniciar();
}
}
Deseo que la función pueda recibir dos parámetros distintos, el teléfono, y el mensaje.
al alterar la línea
sprintf(aux_str, "AT+CMGS=\"+573001234567\"", strlen(sms));
y cambiarla a esto:
sprintf(aux_str, "AT+CMGS=\"+57" + "\"", strlen(sms));
el compilador muestra el siguiente error:
invalid operands of types 'const char [13]' and 'const char [2]' to binary 'operator+'
Cambié la línea de nuevo a
sprintf(aux_str, Destinatario, strlen(sms));
donde 'Destinatario' es un String. Se produce este error:
cannot convert 'String' to 'const char*' for argument '2' to 'int sprintf(char*, const char*, ...)'
lo que significa que solo recibe un char*. Cambié la definición de destinatario a char*. EL programa compila bien.
Ahora el problema es crear la lnea "AT+CMGS="+57XXXXXXXXXX"". donde XXXXXXXXXX es un número que cambia dependiendo del mensaje.´
Intente con la siguiente línea
Destinatario = "AT+CMGS="+57" + """;
el compilador arroja el error
invalid operands of types 'const char [13]' and 'const char [2]' to binary 'operator+'
Intenté con StringAppendOperator, StringAdditionOperator, concat, etc pero no funcionó.
Mientras escribí esta respuesta probé con el siguiente código
char Destinatario[30];
strcpy(Destinatario, "AT+CMGS=\"+57");
strcpy(Destinatario, Tel);
strcpy(Destinatario, "\"");
El cual si funcionó. El código completo de la nueva función es este
void EnviaMensaje(char* Tel, char* Msj)
{
char Destinatario[30];
strcpy(Destinatario, "AT+CMGS=\"+57");
strcpy(Destinatario, Tel);
strcpy(Destinatario, "\"");
if (enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 1) //comprueba la conexion a la red
{
Serial.println("Enviando SMS...");
enviarAT("AT+CMGF=1\r", "OK", 1000);
sprintf(aux_str, Destinatario, strlen(Msj));
//Texto del mensaje
if (enviarAT(aux_str, ">", 10000) == 1)
{
enviarAT(sms, "OK", 10000);
}
Serial.println("SMS enviado");
}
else
{
Serial.println("GMS: error!");
}
}