Como escribir AT comando correctamente

Hola de nuevo, tengo un problema con un comando at, concretamente con AT+CPBW= que es para grabar números de tel en la sim. El comando enviado desde el monitor serial anda perfecto, el problema es que no se como poner las comillas cuando lo hago desde el sketch, este es el caso:

SIM800.print("AT+CPBW=,\"541136589399"); esto no va...
porque debería ser así:
SIM800.print("AT+CPBW=,"541136589399"); pero las segundas comillas dejan en negro al tel

no uso la librería porque no esta este código, pero funciona perfecto desde el serial, el tema que en el serial pongo así:

AT+CPBW=,"54xxxxxxxxxx

con eso es suficiente para que lo grabe en el primer lugar libre que encuentre, el tema que cuando lo quiero enviar desde el sketch no se como lo debo de poner con las comillas...

edito:
probé así pero nada:

SIM900.print("AT+CPBW=,\"541136589399");

no se como van las comillas...

Probá así

SIM800.println("AT+CPBW=,\"541136589399\"");

Hola gatul, no no funciona, de hecho intento con algo mas simple como borrar el registro asi:

SIM800.print("AT+CPBW=1");

eso borra el registro 1, ya que lo probé desde el serial, pero no lo hace desde el sketch, raro porque todos los demás comandos no hay drama los probé y funcionan...

edito:
el manual dice así "Write Command AT+CPBW=[,,[,[]]]"

edito 2:
era un error en mi código, funciona perfecto gatul, gracias...

edito 3:
lo que no puedo es guardar un numero que esta en una variable:

SIM800.println("AT+CPBW=,\"" + TelNvo + "\"");

la variable la imprimo y esta correcta, pero debo estar poniendo algo mal, aunque si en vez de usar ese código uso un código para mandar sms lo envía bien:

SIM800.println("AT+CMGS=\"" + TelNvo + "\"");

edito 4:
incluso asi anda perfecto:

SIM800.println("AT+CPBW=,\"01134216587\",129,\"pepe\"");

Prueba a ver que resulta

SIM800.print("AT+CPBW=,\"");  // .print sin ln
SIM800.print(TelNvo);
SIM800.println("\"");  // aca si, .println 

es medio "desprolijo" pero sino tienes que usar sprintf() para formatear el texto, para lo que tienes que crear un array para que actúe de buffer y demás...
Esto último lo profundizas buscando en la web.

Saludos

Hola gatul, no no funciona..
como seria lo del buffer y spintf(), tenes algún ejemplo?

Ahora estoy en el trabajo :woozy_face:, por eso te dije

Google -> "sprintf arduino"

Saludos

encontré esto en la web:

 char buffer[40];
  sprintf(buffer, "The %d burritos are %s degrees F", numBurritos, tempStr);
  Serial.println(buffer);

a algo asi te referías?

Sip

hice esto:

    char buffer[40];
    sprintf(buffer,",%s", TelNvo);
    Serial.println(buffer);
    SIM800.print("AT+CPBW=,\""+buffer+"\""); 

pero me da error el compilador, dice:

invalid operands of types 'const char [11]' and 'char [40]' to binary 'operator+'
sprintf(buffer,"AT+CPBW=,\"%s\"", TelNvo);
SIM800.println(buffer);

TelNvo tiene que ser tipo char (ver función .toCharArray() )

Mira gatul, tarde en verlo pero recién me di cuenta, perdón, esto:

SIM900.println("AT+CPBW=,\""+TelNvo+"\"");

estaría bien, sino fuera porque agrega un espacio antes de la comilla final, calculo que por la barra invertida, lo deja así: AT+CPBW=,"54xxxxxxxx " al dejar ese espacio devuelve error el comando, pero si hago esto:

SIM900.println("AT+CPBW=,\""+TelNvo+"");

lo que falta al final son las comillas...si soluciono eso va a andar, pero no se como quitarle el espacio a esas comillas

El espacio lo debes tener al final de TelNvo porque todo lo que te estoy pasando primero lo pruebo y por consola sale perfectamente, como debe, sin espacios ni cosas raras (tengo compilador y emulador en el móvil :wink: ).

OK y como puedo hacer para saber si esa variable string TelNvo me la devuelve con un espacio al final? porque en monitor solo veo el numero y lo que se ve estaría bien, pero no puedo ver si hay un espacio vacío..
edito:
ya esta, lo que hice fue a la variable TelNvo:

    int pos = TelNvo.indexOf("0");
    String NumLimpio = TelNvo.substring(pos,pos+11);

ahora si lo guarda correctamente, no se porque mi variable tiene un espacio al final, dejo el código para que si podes veas la forma de hacerlo, porque el otro día me dijiste que tenia que cambiar la forma de pensar, y yo trato. Ahora por ejemplo llegué a la solución, pero capaz esta mal pensado todo el código que captura el numero y es ahí donde viene el problema.
El tema es así yo cuando mando un sms, pongo un "#1" seguido del numero "011xxxxxx" entonces el código captura a partir del "#1", así:

String char13 = mensaje;
    uint8_t startPos, endPos;
    startPos = char13.indexOf("#1") + 2;
    endPos = char13.indexOf("#1", startPos);
    TelNvo = char13.substring(startPos, endPos);
    Serial.printlnTelNvo 
    int pos = TelNvo.indexOf("0");
    String NumLimpio = TelNvo.substring(pos,pos+11);
    Serial.println("NumLimpio");
    Serial.println(NumLimpio);
    delay(1000);
      SIM900.println("AT+CPBW=,\""+NumLimpio+"\"");

hay algo para achicar o mejorar o así estaría bien?

No, esperá, ese no lo probé antes, solo le había agregado el escape para las comillas que faltaba.

A mi no me funciona esa línea, directamente da error al querer "sumar" cadenas.

Seguro que lo que te dije en #4 no funciona?

Y por qué no haces

String comando = "AT+CPBW=,\""+TelNvo+"\"";
SIM900.println(comando);

Y listo?

Porque es un String y los String terminan con un caracter 0, no es un espacio.

Prueba lo que te dije arriba que es mas sencillo

No da error, porque la variable TelNvo es la que debe tener ese 0 o espacio en blanco, y devuelve error el comando, pero con el código como puse antes si lo hace lo guarda perfecto..
Ya lo podemos dar los solucionado, gracias que me dijiste lo del espacio sino no lo hubiera sacado..

Si, en este código

String comando = "AT+CPBW=,\""+TelNvo+"\"";
SIM900.println(comando);

claramente TelNvo tiene que ser un String y como tal tendrá el caracter 0 de finalización.

Como te dije antes, está probado por consola y es correcto, me extraña que no funcione para el SIM pero como no tengo como probarlo no puedo opinar más.

Saludos

Has probado a poner una linea con TelNvo,trim(); antes? esto te debería devolver TelNvo sin espacios.

Saludos

Hola bosoft, excelente, no lo conocía, funcionó genial...muchas gracias...