Hallo Ich möchte über RS232 Befehle an meinen Controller (SiLabs F330) senden. wie gehe ich hier am besten bei der Umsetzung vor? Die Befehel sollen über die Kommandozeile im ASCII Format an den Controller geschickt werden. z.B. <getTemp> Muss ich die Daten die ich Controllerseitig empfange zuerst in eine int-Variable wandeln? Oder wie kann ich die Befehle am einfachsten verarbeiten? Bin für jeden Tipp dankbar! Das Senden von daten Controller>>PC funktioniert schon. Ich schicke derzeit einfach die aktuelle Temperatur an den PC. MFG Bean
> Muss ich die Daten die ich Controllerseitig empfange zuerst in eine int-Variable wandeln? Du MUSST gar nix. Du bist der Gott des Systems und kannst mit ihm machen, was DU willst. Es hängt alles davon ab, was das Teil tun soll. > Oder wie kann ich die Befehle am einfachsten verarbeiten? Tipp: Fang an, den Befehl, so wie er ist, zurückzuschicken. Dann siehst Du, ob der Empfang klappt. Danach hänge weitere Verarbeitungsschritte dran. Was Du dazu tun willst, wird Dir dann schon klar werden, wenn Du damit rumprobierst.
Erstmal danke für die klasse Antwort... ;-) Naja vielleicht muss ich meine Frage präzisieren, man soll den Fehler ja zuerst bei sich suchen bevor man über andere lästert. Was mir nicht klar ist, dass wenn ich den Befehl <getTemp> über die RS232 schicke für jedes Zeichen 2Byte gesendet werden. Bei "g" z.B. 0x67. Jetzt muss ich das in meinem Controller ja irgendwie aus dem Buffer in eine Variable schreiben. Wie mache ich das? Und wie sezte ich dann nachher den String wieder zusammen? Hoffe ich bekomme noch ein paar Antworten, die mir noch weiter helfen wie die, die bereits gepostet wurde... Danke! MFG Bean
> für jedes Zeichen 2Byte gesendet werden. Bei "g" z.B. 0x67.
0x67 ist nur ein Byte. Das 0x sagt nur, dass das 67 ein Hexadezimalcode
ist. Und zwar gerade der Hex-Code für ein kleines g.
Ansonsten musst Du einen String (ein Array aus Zeichen), also eine
Variable für die Zeichen anlegen, in die Du dann nach und nach die
empfangenen Zeichen speicherst.
Irgendwie muss dabei das Ende eines Befehls erkannt werden. Wenn Du das
hast, kannst Du den Befehl mit einer Liste von möglichen Befehlen
vergleichen und dann entsprechend reagieren.
Das alles ist im Wesentlichen Zeichen- und Stringverarbeitung mit
geeigneten Vergleichen.
Ah ok, ja stimmt klar. Aber dann muss die Größe des Arrays das ich anlege ja dynamisch sein!? Oder reicht es ein Array anzulegen das groß genug ist um den größten Befehl aufzunehmen und bei kleineren Befehlen wird der Rest dann einfach mit Nullen aufgefüllt...? Grüße! Bean
Du kannst zum Beispiel die Zeichen so lange in eine String-Variable speichern, bis der PC die Eingabetaste drückt (Zeichen 0x0D) oder bis die Maximallänge der Variable erreicht ist. Das sind jeweils if-Vergleiche nach dem Empfang bzw. dem Speichern eines Zeichens. Wenn eine dieser beiden Bedingungen erreicht ist, sendest Du den ganzen String einfach mal zurück (als Kontrolle für Dich, vor allem während der Testphase) und verarbeitest den Befehl.
Wie gesagt, das ist Stringverarbeitung. Um die Erarbeitung der entsprechenden Abschnitte eines C-Buchs oder eines Tutorials kommst Du bei sowas nicht herum. (Falls Du C verwendest.)
leg dir einen buffer an die länge ist etwas größer als der längste string den du sendest in diesen buffer empfängst du nun die datem vom PC wenn ein gewisses zeichen kommt .. zB <enter> schließt den string mit einem '\0' ab und vergleichst den string mit einer konstante zB deinem "gettemp" wenn es übereinstimmt schickst du die temp .. ansonst verwirfst du den buffer wieder und setzt buffer[0]='\0' damit is der buffer zwar nie leer aber der sting ist ja nur so lang bis das '\0' kommt so mal als ganz einfache version
Fang einfach an: ein char (z.B. t oder T) als befehl für die Ausgabe der Temperatur dann ein einzelnes Zeichen für was anderes dann kannst du dir immer noch die Stringverarbeitung anschauen
> Oder reicht es ein Array anzulegen das groß > genug ist um den größten Befehl aufzunehmen Solange du überprüfst, ob du innerhalb der Grenzen bist: ja Wenn du aber immer auf ein zum Abschluss gesendetes Zeichen wartest (z.B. line feed) dann hast du bei einem Tippfehler leicht einen längeren String.
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.