array in float umwandeln.

OP #4305774
Lesenswert?
• ▲
▼
Hallo allerseits,
ich bin totaler Anfänger was das Programmieren angeht und gerade 
ziemlich verzweifelt.

Ich habe mir ein APRS Modem zur Funkübertragung von GPS Koordinaten nach 
der Anleitung von Mark Qvist (http://unsigned.io/micromodem/) gebaut. 
Jetzt versuche ich den Code soweit zu modifizieren, dass ich den 
ankommenden Text (die Koordinaten) irgendwie in eine Float Variable 
bekomme um damit weiter arbeiten zu können.
Unter "void processPacket()" wird das Array "incomingPacket.info" über 
die Serielle Schnittstelle gedruckt. Wie kann ich an dieser Stelle aus 
den Daten eine Float Variable machen?
Kann mir jemand hierbei helfen?

Besten Gruß
Martin




boolean gotPacket = false;
AX25Msg incomingPacket;
uint8_t *packetData;
void aprs_msg_callback(struct AX25Msg *msg) {

  if (!gotPacket) {
    gotPacket = true;
    memcpy(&incomingPacket, msg, sizeof(AX25Msg));
    if (freeMemory() > msg->len) {
      packetData = (uint8_t*)malloc(msg->len);
      memcpy(packetData, msg->info, msg->len);
      incomingPacket.info = packetData;
    } else {
      gotPacket = false;
    }
  }
}

void processPacket() {
  if (gotPacket) {
    gotPacket = false;

    for (int i = 0; i < incomingPacket.len; i++) {
      Serial.write(incomingPacket.info[i]);
    }
    Serial.println("");

    // Remeber to free memory for our buffer!
    free(packetData);


  }
}
Gast #4305993
Lesenswert?
• ▲
▼
Danke erst einmal für die Antworten.
Direkt mit atof geht es nicht. Wenn ich folgendes eingebe
"double tmp =atof(incomingPacket.info[i]);"
kommt
"invalid conversion from 'uint8_t {aka unsigned char}' to 'const char*' 
[-fpermissive]" dabei heraus.

AX25Msg habe ich in einer der zugehörigen Libraries gefunden. Es scheint 
keine Variable, sondern eine Funtion zu sein.

"typedef struct AX25Msg {
    AX25Call src;
    AX25Call dst;
    AX25Call rpt_list[AX25_MAX_RPT];
    uint8_t  rpt_count;
    uint8_t  rpt_flags;
    uint16_t ctrl;
    uint8_t  pid;
    const uint8_t *info;
    size_t len;
} AX25Msg;
"
packetData ist als "uint8_t *packetData;" deklariert. Also ein "unsigned 
char".

Der Sketch scheint das meiste ja schon zu können. Immerhin setzt er 
mittels for-Schleife das (char)-Array für den Serial.write zusammen. 
Kann ich das analog zu Mikes Vorschlag irgendwie als Nicht-Array-Char 
ausgeben und dann mittels atof oder so umwandeln...
Sorry, wenn ich an dieser Stelle mit gefährlichem Halbwissen um mich 
werfe...
Gast #4306174
Lesenswert?
• ▲
▼
len müsste die Länge oder Größe des Arrays sein. Weiter oben im Code 
nutzt er es glaube ich
"
if (!gotPacket) {
    gotPacket = true;
    memcpy(&incomingPacket, msg, sizeof(AX25Msg));
    if (freeMemory() > msg->len) {
      packetData = (uint8_t*)malloc(msg->len);
      memcpy(packetData, msg->info, msg->len);
      incomingPacket.info = packetData;
"

Gruß
Martin

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.