String zerlegen

Hallo,

1.Frage:

mit folgendem Code

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
    
    char buffer [40];
    
    if (vw_get_message(buf, &buflen)) // check to see if anything has been received
    {
    int i;
     // Message with a good checksum received.
    
    for (i = 0; i < buflen; i++)
    {
        Serial.print((char)buf[i]);                     // the received data is stored in buffer
        buffer[i]=(char)buf[i];
        }
}

bekomme ich doch ein uint8_t array?

  1. Die Daten die ich bekomme sehen wie folgt aus:

s=1&t=1860&h=7890

Dieses möchte ich nun gerne aufsplitten und auf einem LCD Display ausgeben.

S=1 ist meine ID
t=1860 ist meine Temperatur 18,60°C
h=7890 ist meine Feuchtigkeit 78,90%

Der Code steht soweit und läuft bis auf die richtige Aussgabe.

Ich verstehe gerade noch nicht wie ich nun dieses array am besten splitten kann, wegen Zeichen und Zahlen.

Möchte gerne eine Variable t mit dem Wert 1860 und eine Variable h mit dem Wert 7890.

Ist strtok() eine Möglichkeit?

Könnt ihr mir eine kleine Hilfestellung geben?

Array , Strukturen und Datentypen sind mir bekannt. Kenne auch alle Schleifen usw. Trotzdem stehe ich gerade auf dem Schlauch.

Gruß,

Hardtacker

Habe eine Lösung gefunden.

Kann mir mit sscanf die Werte wieder auslesen.

sscanf() frisst nur unnötig Speicher. Sowas geht am besten mit strtok() + atoi()

char* ptr = strtok(str, "=");
ptr = strtok(NULL, "=");
int id = atoi(ptr);
ptr = strtok(NULL, "=");
float t = atoi(ptr) / 100.0;
ptr = strtok(NULL, "=");
float h = atoi(ptr) / 100.0;

Aber wieso sendest du das nicht einfach mit Kommas getrennt und ohne Bezeichner?:
"1,1860,7890"

Du musst sowieso wissen was was ist, also reichen die Zahlen

Array , Strukturen und Datentypen sind mir bekannt. Kenne auch alle Schleifen usw. Trotzdem stehe ich gerade auf dem Schlauch.

Dann musst die Standard String und Konvertierungsfunktionen für C lernen. Hier ist was auf dem AVR gibt:
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdlib.html
http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html

Deckt sich größtenteils mit was in C auf dem PC gibt, aber es nicht 100%ig identisch

Danke,

werde mir das mal anschauen.