Arduino: splitString

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Ich möchte an einen Arduino über USB Befehle schicken in Form von:

    command:value

    Dazu hab ich mir eine Anweisung zum splitten aus dem Netz gesucht - nur leider ist die Rückgabe von value leer :(

    Die Rückgabe sieht bei mir derzeit so aus:


    was mach ich falsch :s :helpnew:

  • auf den ersten Blick wird wohl alles links vom : ausgegeben.
    Ohne zweiten : muss der zweite suchlauf in die Hose gehen.

    //EDIT:
    Mal was prinzipielles:
    Hast Du schona mal sscanf(string, "%s:%d", cmd, %val) ausprobiert?
    Nachdem es aber vermutlich auch auf Performance ankommt, warum nicht nur ein einzelnes Zeichen als Kommando, das dann gleich in einem switch case - dann hast du das Kommando und den Wert:

    switch(string[0])
    {
    case 'L': cmd= CMD_LEFT
    val=atoi(&string[1]);
    break;
    ...
    }


    cu,
    -ds-

  • Hi!

    Also im Moment habe ich keine richtige Lösung für dein Problem.. Aber ich glaub ich kann dir sagen wo der fehler liegt...

    Code
    String command = splitString(sstring, ':', 0);
    String value = splitString(sstring, ':', 1);

    dein Ergebnis was du über den serial bekommst ist :

    Zitat

    links:20

    command wird korrekt eingelesen da das ende durch ":" festgelegt ist...

    nach der 20 kommt aber kein ":" mehr! daher kann dir dein value nicht mehr angezeigt werden.

    Entweder kannst das was du über den serial einliest beeinflussen oder die "Stopbedingung" muss geändert werden.

    Hoffe das hilft erstmal irgendwie...

    MfG

    wenn dein Ergebnis was du über den serial einliest immer diese form"links:20" hat dann kannst du doch bei

    Code
    sstring = Serial.readStringUntil('\n');

    noch ein ":" an den String ran hängen... das deine erste Ausgabe im Prinzip "links:20:" (ich dachte jetzt mal die anzeige ist eh für dich um zu sehen was du empfängst) ist.

    Den Syntax hab ich hier jetzt nicht sofort parat aber was ich meine weisst du denk ich...

    also ich habe jetzt leider nicht direkt einen arduino parat um es zu testen... beim kompilieren gab es bei mir gerade zunmindest keine probleme...

    wenn ich das mit dem Syntax + ":" nicht zu sehr mit python verwechsle sollte es passen. Aber das sollte es sein.

    Rede wenig, rede wahr, trinke mäßig, zahle bar.:angel:

    Einmal editiert, zuletzt von Kornfeld (20. Juli 2014 um 20:00)

  • Aha das kling logisch ;)

    Den sstring kann ich beeinflussen da ich den ja selber über den RPI sende.
    value brauch ich zur Angabe des PWM Werts - und Performance ist natürlich auch wichtig ;)

    Vielen Dank für die Hilfe :thumbs1: funktioniert perfekt:

    Ausgabe:

    Code
    got: f:255
    command: f
    value: 255
    got: forward:255
    command: forward
    value: 255

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!