Ich möchte einen getippten Befehl via Terminal an den AVR senden um dort Servos zu positionieren. Z.B.: "S3=400" + "S12=1020" (Servo 3 auf Pos 400, Servo 12 auf Pos 1020) Ich kann die Buchstaben 'S' und '=' lokalisieren: if ( memchr(STR,'S',2) > 0) //S vorhanden if ( memchr(STR,'=',5) > 0) //= vorhanden Aber im avr-libc/user-manual oder hier im Forum finde ich keinen passenden Befehl, nur "Von Anfang bis x", aber keinen mit dem ich die Zahlen gezielt heraustrennen kann ? Und dann schliesslich S3 = strtol(teilstring, 0, 10); oder besser S3 = atoi (teilstring); ?
Du hast 2 Möglichkeiten:
* Tatsächlich einen Substring erstellen, der die
Teile enthält die du brauchst
* du teilst strtol bzw. atoi mit, dass sie gefälligst
nicht am Anfang des kompletten Strings mit der
Arbeit anfangen sollen, sondern wo anders
ad 2)
wenn du weisst, dass die Zahl immer im String
an Position 5 steht:
atoi( String + 5 );
strtol( String + 5, 0, 10 );
ad 1)
Ist eigentlich dieselbe Idee wie bei ad 2), nur halt
mit strncpy benutzt
char SubString[10];
strncpy( SubString, String + 5, 2 );
SubString[2] = '\0';
// kopiert 2 Zeichen, beginnend an der 5. Position von
// String nach Substring.
> memchr
Benutz bitte die richtigen Funktionen um mit Strings zu
arbeiten. Die mem...() Funktionen arbeiten auf Speicher-
Felder. Die str...() Funktionen arbeiten mit C-Strings.
Er hat noch eine dritte Möglichkeit: sscanf(). Falls es die verfügbaren Resourcen des verwendeten Prozessors (also insbesondere der freie flash-ROM) hergeben, ist das eigentlich die eleganteste:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
p.s.: alles in Großbuchstaben (STR) benutzt man per Konvention für Makros. Variablen sollten Kleinbuchstaben oder einen Mix benutzen.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.