Hola como están, les consulto sobre como leer correctamente el remitente del sms recibido, ya que uso el siguiente código:
void Remitente_SMS() {
if (mensaje == "") {
}
else {
String char14 = mensaje;
uint8_t startPos, endPos;
startPos = char14.indexOf("\"") + 1;
endPos = char14.indexOf("\"", startPos);
Remitente = char14.substring(startPos, endPos);
pero no es el mas preciso...de hecho gral= el primer mensaje no lee el remitente, a partir del segundo después si hay cierta estabilidad..
estuve viendo la librería "Sim800l" Master, y obviamente el código que usa para leer el remitente esta ahi jaja, solo hay que ver como adaptarlo...el código original es:
String Sim800l::getNumberSms(uint8_t index){
_buffer=readSms(index);
Serial.println(_buffer.length());
if (_buffer.length() > 10) //avoid empty sms
{
uint8_t _idx1=_buffer.indexOf("+CMGR:");
_idx1=_buffer.indexOf("\",\"",_idx1+1);
return _buffer.substring(_idx1+3,_buffer.indexOf("\",\"",_idx1+4));
}else{
return "";
}
}
que invoca tmb a:
String Sim800l::readSms(uint8_t index){
SIM.print (F("AT+CMGF=1\r"));
if (( _readSerial().indexOf("ER")) ==-1) {
SIM.print (F("AT+CMGR="));
SIM.print (index);
SIM.print("\r");
_buffer=_readSerial();
if (_buffer.indexOf("CMGR:")!=-1){
return _buffer;
}
else return "";
}
else
return "";
}
y que tamb usa:
String Sim800l::_readSerial(){
_timeout=0;
while (!SIM.available() && _timeout < 12000 )
{
delay(13);
_timeout++;
}
if (SIM.available()) {
return SIM.readString();
}
}
mi pregunta es como puedo con eso hacer la función para detectar con precisión el remitente?
lo que hice fue hacer este cambio para adaptarlo a mi código:
String char13 = mensaje;
Serial.println(char13.length());
if (char13.length() > 10) //avoid empty sms
{
uint8_t NumSMS=char13.indexOf("+CMGR:");
NumSMS=char13.indexOf("\",\"",NumSMS+1);
return char13.substring(NumSMS+3,char13.indexOf("\",\"",char13+4));
}else{
return "";
}
pero me da el siguiente error:
no matching function for call to 'String::indexOf(const char [4], StringSumHelper&)'
que es lo que esta mal en el codigo que me da eses error?