Mais uma dúvida, que deve ser simples, mas que meus conhecimentos não me deixam responder... rsss

Em meu sistema tenho algumas variáveis, dados e sensores que me entregam os valores em uma infinidade de classes.

Por exemplo, tenho dados int; float, string e char.

Preciso concatenar tudo isso em uma única variável, uma char, com 70 caracteres, para ser entregue a outro sistema.

Se eu fizer algo do tipo abaixo funciona, mas como o código é grande acaba ocupando muito espeço por conta da string smstexto:

// smstext foi declarada como string
smstexto += dt; // string
smstexto += ";"; //
smstexto += hr; // string
smstexto += ";"; //
smstexto += ch; // float (0.00)
smstexto += ";"; //
smstexto += tc; // float (0.00)
smstexto += ";"; //
smstexto += ur; // float (0.00)
smstexto += ";"; //
smstexto += pa; // float (0.00)
smstexto += ";"; //
smstexto += vd; // float (0.00)
smstexto += ";"; //
smstexto += vv;  // float (0.00)
smstexto.toCharArray(textosms, smstexto.length() + 1);

// textosms tem que ser char

Alguma orientação de como usar mais char e menos string para poder poupar bytes e bytes que no meu UNO valem ouro?

Em tempo o meu sketch usa 27.580 bytes (85%) de espaço de armazenamento para programas e as variáveis globais usam 1.671 bytes (81%) de memória dinâmica. Ou seja, estou perto do meu limte... rssss

Obrigado a todos

Exibições: 76

Respostas a este tópico

Tu pode tentar usar sprintf, acho que funcionaria bem nesse teu caso, tipo:

char voltageMsg[25];
sprintf(voltageMsg, "Pot Voltage = %f", volts);
Serial.println(voltageMsg);

Ou o que o pessoal recomenda bastante também, que é usar

char *dtostrf(double valor, signed char tamanhoDoBuffer, unsigned char casasDecimais, char *stringDeSaida);

Mas se for usar essa dtostrf, lembra de colocar um '\0' no final da cadeia de char (stringDeSaida).

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2017   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço