Hallo, ich bin gerade dabei mit einem Atmel 89C5131 drei Modellbauservos für ein Schulprojekt anzusteuern. Die Positionsdaten lese ich von einem Xbox360-Controller aus und schicke sie als char-array über eine USB-Uart-Verbindung zum Microcontroller. Mit einem Wert funktioniert das alles bereits bestens. Nun zu meinem Problem: Wie kann ich am besten mehrere werte gleichzeitig in einem String verschicken und im µC wieder aufsplitten? Ich habe es schon versucht, die werte mit punkten o.ä. zu trennen, doch das ging nicht so wie ich wollte. die einfachste möglichkeit wäre es, zb. die ersten 3 stellen für den ersten wert, dann die nächsten 3 stellen der nächste wert und so weiter... mit welchen standart c-funktionen kann ich am einfachsten einen char-array abschneiden? (von vorne und hinten) Ich würde mich über eine schnelle Antwort freuen, da ich bis Donnerstag fertig sein muss... (= MFG Clemens
Was heisst Char Array? Binär? Oder ASCII? Du must bedenken, der Punkt (ASCII) hat den Wert 46, also du kannst nicht unterscheiden ob du 46 oder den Punkt sendest. Am einfachsten Machst du einen Definierten Anfang, also du sendest z.B. ein 'A', danach empfängst du deine X Bytes und dann bist du wider im Anfangszustand. Wenn du etwas anderes als ein 'A' kriegst ist etwas schief gelaufen. Wenn du noch etwas anderes senden willst sendest du einfach ein 'B' usw. Also du sendest einfach einen Anfang, und dann ist auch klar wie viel Daten das du nachher erhaltest, und dann erwartest du dein nächstes Paket. Es gibt noch diverse andere Ansätze, aber solange du nicht verratest was du mit den Daten machst kann ich nur raten. [edit]Aja, und wenn du Zeichenweise empfängst einfach ein 'if', sonst eben strtok wie von Oliver genannt mfg Andreas
Hallo, ich rate dir zum CSV- Format (Comma Separated Values) und auftrennen mit strtok. Stringende mit CR. D.h. du sendest/liest immer einen ganzen String bis zum CR und tennst in dann mit strtok auf
Clemens schrieb: > und schicke sie als char-array über eine > USB-Uart-Verbindung zum Microcontroller. Mit einem Wert funktioniert das > alles bereits bestens. Du brauchst sowas wie ein Protokoll, hier mal ein paar Beispiele mit der Annahme, dass du Werte von 0-255(0x00 bis 0xff) versenden willst Das hier... 0x01 -- ID Servo 1 '0' -- oberes nibble der sollposition in hex 'a' -- unteres nibble der sollposition in hex ...hieße z.B. "stelle Servo 1 auf Position 10" oder das hier... 0x02 '3' 'c' 0x00 '7' 'f' ...hieße dann "stelle servo 2 auf 60; stelle servo 0 auf Mittelstellung" Das ließe sich mit einer Statemachine im RX-Interrupt ziemlich einfach aufdröseln. Alles was an Zeichen nicht passt, wird weggeworfen und evtl. eine "Fehler - bitte nochmal"-Meldung an den Rechner zurückgeschickt. mfg mf
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.