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); } }
von welchem Typ ist AX25Msg? wenn packetdata ein integer ist, hau die Einzelpakete doch nacheinander als string zusammen und mach dann am Ende eine Typenumwandlung Richtung float (wenn ich das Problem richtig verstanden habe)
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...
AX25Msg ist offensichtlich ein struct info ist ein Pointer auf uint8_t Daten. Gehört len vielleicht zu info? Gruß Daniel
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.