Forum: Mikrocontroller und Digitale Elektronik String mit Steuerzeichen


von Mario (Gast)


Lesenswert?

Hallo
Ich stehe vor einem Problem. Hab das ediptft-43 am laufen und komme 
jetzt recht gut mit klar. Wenn ich Taster oder Schalter erstelle sende 
ich einen String der Steuerzeichen enthalten muß. Ich benutze Codevision 
und einen Mega644.Hier mal ein Beispiel.

unsigned char[] = "#DL,#AB1,0,0,Licht,#BC0,3,3,Test";

Nach Licht und Test muß eine \0 eingefügt werden.Würde es auch mit 0x0D 
probieren. Im Terminalprogramm funktioniert es auch. Weiß nicht ob es im 
String mit /0 probleme gibt.
Wie kann ich in einem String Steuerzeichen einfügen das es Codevision 
auch versteht?

Gruß Mario

von Ralf D. (dreilira)


Lesenswert?

Das geht m.M. gar nicht. In C ist 0x00 als String-Ende-Zeichen 
definiert. Da wirst Du wohl oder übel mit 4 Ausgabe-Befehlen arbeiten 
müssen: 1. Text, dann 0x00, dann 2. Text, dann 0x00

(sagt einer, der nur rudimentäre C-Kenntnisse hat.)

Gruß
Ralf

von Mario (Gast)


Lesenswert?

Hi Ralf
Vielen Dank für die schnelle Antwort.
Ich denke auch das es nicht anders geht.
Dann muß ich wohl oder übel für jeden Taster einen neuen String 
erstellen.
Ich kopiere ihn ja in einen anderen String (buffer) da wird ja 
hoffentlich die \0 angefügt.

Gruß Mario

von Peter II (Gast)


Lesenswert?

es geht auch anders, du musst es ja nicht als string sehen sonder als 
char array und dort können alle zeichen drin stehen. Du brauchst nur 
noch ein zusätzliche Variabele mit der anzahl von Zeichen in dem array. 
Du kann dann aber keine String funktionen damit verwenden.

von Mario (Gast)


Lesenswert?

Als String wär mir aber ganz recht weil ich viele davon fertig habe die 
auch ohne Steuerzeichen sind und gut funktionieren. Ich werde heut mal 
versuchen für jede Taste ein String zu basteln. Habe im Datenblatt von 
meinem Display auch gerade gelesen das ich max 200 byte versenden darf. 
Meine fünf Taster überschreiten dies aber bei weitem. Trotzdem vielen 
Dank Peter. Werde mir die Lösung für´s nächste Projekt merken.
Gruß Mario

von Karl H. (kbuchegg)


Lesenswert?

Andere Möglichkeit: Definier dir ein selten benutztes Sonderzeichen als 
Trenner,zb §, und modifiziere deine Ausgaberoutine dahingehend, dass sie 
ein § bei der Ausgabe durch ein \0 ersetzt.

von Mario (Gast)


Lesenswert?

Das ist ne super Idee.Ich probiere es heut gleich mal aus. Das §-zeichen 
ist ja wie dafür gemacht :-)

Gruß Mario

von Mario (Gast)


Lesenswert?

Hallo Karl Heinz
Das war ne gute Idee. Funktioniert hervorragend. Durchsuche beim 
Sendevorgang den String nach § und ersetze ihn durch 0x0D.

Gruß Mario

von Peter II (Gast)


Lesenswert?

Mario schrieb:
> Durchsuche beim
> Sendevorgang den String nach § und ersetze ihn durch 0x0D

ich dachte du wolltest eine \0 drin haben? eine 0x0D kannst du doch auch 
so reinschreiben.

von Mario (Gast)


Lesenswert?

Ich habe es mit einer \0 probiert.Dann habe ich mir den String angeguckt 
und mußte feststellen das der String an dieser Stelle beendet ist.Alles 
was danach folgt ist weg.Das habe ich auch befürchtet.Habs einfach mal 
mit 0x0D probiert und es geht komischerweise auch obwohl laut Datenblatt 
eine \0 geschickt werden muß.
Das ich die 0D mitten im String mitsenden kann ist mir nicht gelungen.
Gr. Mario

von Karl H. (kbuchegg)


Lesenswert?

Mario schrieb:

> Das ich die 0D mitten im String mitsenden kann ist mir nicht gelungen.

0x0D ist ein '\r'


unsigned char[] = "#DL,#AB1,0,0,Licht\r,#BC0,3,3,Test\r";

von Mario (Gast)


Lesenswert?

Wenn ich \r in den String schreibe gibt er mir 5C 72 aus. Das hab ich 
alles schon probiert.Liegt wahrscheinlich an den " vom String.Aber die 
Sache mit dem Sonderzeichen klappt hervorragend.
Vielen Dank euch allen für die schnelle Hilfe.

von Peter II (Gast)


Lesenswert?

das stimm doch was nicht. Wenn du später ein \r einsetzt geht es, wenn 
du es gleich mitschickt dann nicht. Ich würde der sache schon mal auf 
den Grund gehen, nicht das du noch irgendwo einen anderen Fehler hast.

von Mario (Gast)


Lesenswert?

Das muß irgendwie mit Codevision und den Anführungszeichen zu tun 
haben.Alles was in den Anführungszeichen steht wird als Zeichen 
ausgegeben.Ich lese den String dann byteweise aus und sende die Zeichen 
einzeln.Wenn jetzt mein $ auftaucht ersetze ich es mit 0x0D.
if(buf[i]==0x24){buf[i]=0x0D;}
Geht super.Der Rest läuft auch.Bin schon beim Menü basteln.

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
Noch kein Account? Hier anmelden.