Variable einfügen bei uint8_t data[]

Hallo zusammen, ich hab eine Problem, bei dem ich nicht weiter komme.

Ich habe eine Vorlage mit einem fixen Text. Nun möchte ich diesen Fixen Text durch eine Variable des ADC ersetzen bzw ergänzen. Das Ganze soll dann via LoRa übertragen werden.

Hier das Beispiel:

 uint8_t data[] = "Test: " ;
  rf95.send(data, sizeof(data));

Bei Test möchte ich nun die Voltzahl des externen ADC einsetzen:

  uint16_t adc0;
  adc0 = ads.readADC_SingleEnded(0);
  Voltage = (adc0 * 0.1875)/1000;

Definiert ist also "Voltage"

Nur habe ich jetzt keine Idee bzw Gedanken, wie ich diesen in uint8_t data[] einfügen kann.
Kann mir hierbei jemand kurz helfen?

Besten Dank

Frannek

Wenn du nicht einfügen kannst, dann mach Platzhalter rein!

z.B.
int8_t data[] = "Test: ###.## Volt" ;

evtl. gar sprintf(), oder einen seiner Brüder, verwenden

Definiert ist also "Voltage"

Leider nein.

uint8_t data[] = "Test: " ;

Das ist nur 6 Buchstaben groß. Wo soll da noch was dazu?

uint8_t data[12] = "Test: #.###";  
...
   float Voltage = (adc0 * 0.1875)/1000;
   dtostrf (Voltage, 5,3, data+6);

dtostrf ist avr-gcc Spezial, um das meiste der Standard float libraries weglassen zu können. Kannst du aber googeln.

Oh je, das hab ich auch nicht hinbekommen :frowning:

michael_x:
dtostrf ist avr-gcc Spezial, um das meiste der Standard float libraries weglassen zu können.

Nicht float sondern printf()

Wie ist denn rf95 deklariert? Vielleicht hat die Klasse ja die üblichen print() Methoden, mit denen sich beliebige Werte als Text ausgeben lassen?

Andernfalls brauchst Du ein Array, das groß genug ist für den Text, der ausgegeben werden soll, z.B. char buf[20]. Dann schreibst Du den Wert in dieses Array, z.B. mit ftoa(), sprintf() o.ä., und läßt ihn ausgeben. Etwa so:

 char buf[20];
 ftoa(buf, Voltage, 2, ',');
 rf95.sendData(buf, strlen(buf));

Bei diesen Funk-Libraries kann man meistens nur Strings oder Byte Arrays versenden, was praktisch das gleiche ist.

ftoa() gibt es nicht. Heißt wie gesagt dtostrf():
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html#ga060c998e77fb5fc0d3168b3ce8771d42

Und printf() geht standardmäßig nicht mit Float. Das ist deaktiviert, weil das die Funktion um ca. 1,5kB aufblähen wurde auch wenn man es nicht verwendet. Genau deshalb existiert eben die nicht-Standard Funktion dtostrf() als Alternative

Oder man benutzt Print (Print.h), die Basisklasse von Stream.