novo no Arduino Estou lutando com o que parece ser um problema bastante n00b … Eu conectei uma placa GPS adafruit para o meu Arduino e ela está funcionando enquanto envia dados GPS para a porta serial com Serial.print(GPS.latitude, DEC) 
Agora quero concat uma string que posso processar (leia-se: desejo enviá-lo por meio de um cliente Ethernet.) Isso é o que já recebi:
...... String vnnt = "$VNNT,"; if (GPS.fix) { vnnt += "GPS,"; //this works: vnnt.concat(GPS.fix); //but this not: vnnt.concat(GPS.latitude); }else{ vnnt += "INFO,Acquiring Sats"; } Serial.println(vnnt); 
 A mensagem de erro é: Call of overloaded "concat(float&)" is ambiguous Quando eu Serial.print(GPS.latitude, DEC) resulta em: 4418.5937996050 
Então é provavelmente muito grande ou algo assim …
Como posso concatear os vars e criar a string longa?
Comentários
Resposta
A função concat não implementa uma versão float, mas alguns de char, int, unsigneds …
unsigned char String::concat(long unsigned int) unsigned char String::concat(unsigned int) unsigned char String::concat(int) ... 
então o compilador não sabe como converter (provavelmente truncando o float) para um inteiro, pois existem vários opções.
Você deve primeiro converter seu float em string, usar dtostrf () ou sprintf () e então concatá-lo em sua string.
char outstr[25]; sprintf(outstr, "%f", GPS.latitude); 
ou
dtostrf(GPS.latitude, 6, 2, outstr); //check docs for 6, 2 values, and set them for your needs 
E então:
vnnt.concat(outstr) 
Observe também que sprintf é muito útil para criação compacta de uma string (char):
char msg[80]; sprintf(msg, "$VNNT,GPS, %s %f", GPS.fix, GPS.latitude); 
Comentários
-  +1 em caso de dúvida, 
sprintffora 🙂 -  Um ponto de cautela, porém: 
sprintf()é uma função complexa, portanto, é bastante lento e usa bastante memória. Geralmente, eu o evitaria para código de " produção " (manter apenas para fins de depuração). - Isso é um bom ponto @jfpoilpret, não levei em consideração. Você tem alguma ordem de magnitude de eficiência em comparação com uma versão dtostrf + concat? O mesmo se aplica a sscanf ()? (aliás, agora duvido que sscanf () funcione bem no arduino)
 -  Não realizei medições reais para comparar as duas chamadas, mas acho que seria possível apenas dar uma olhada no código C e possivelmente verificar a montagem gerada. Em relação ao 
sscanf, IIRC tem algumas limitações (com números de ponto flutuante, eu acho). 
vnntenquanto outro dizvannutGPS.latitude? Por exemplo. é umfloat,int, etc.?