Hallo Ich möchte gerne über die serielle Schnittstelle ein "STRG+Z" über die Leitung senden. Jedoch geschieht dies mit einem "printf" Befehl, und im C Quellcode. Jedoch weiß ich nicht, wie man STRG+Z als ASCII Zeichen eingeben kann, und ich auch nichts ähnliches gefunden habe. Falls jemand nicht genau weiß, was ich meine: Enter in ASCII wäre "\r". Ich brauche eben das STRG+Z. Wäre behilflich, wenn mir jemand helfen könnte. printf("0891XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC006 ???????"); Die Fragezeichen hätt ich gerne beantwortet ;). PS: Der ganze Befehl ist zensiert, da es sich um einen at+cmgs Befehl im PDU Format handelt... Danke, LG
Hallo, mit printf("%c", 26 ) sollte es gehen.
Peter wrote: > Hallo, > > mit printf("%c", 26 ) sollte es gehen. Also meinst du printf("0891XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC006 %c",26); ? LG
Es ginge auch:
1 | printf("0891XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC006\x1a"); |
Solange printf nimmt, ist es egal. Aber nach diesem Strickmuster könnte man auch eine einfachere Funktion als printf() nehmen (fwrite(), puts() etc.).
Vorallem sollte man mal überlegen, was Strg+Z überhaupt ergibt. Das hängt nämlich zum Teil ganz extrem davon ab, was das Terminal daraus macht. Termcap wäre schon mal ein guter Anfang...
"This is CTRL-Z:\032" ASCII-Code oktal mit drei Stellen.
Peter wrote: > Hallo, > > mit printf("%c", 26 ) sollte es gehen. Hallo, bin jetzt wieder mal im Land. Also theoretisch ist es richtig mit printf"%c",26), jedenfalls wird so STRG+Z gesendet (1A in Hex). Jedoch stoße ich auf ein weiteres Problem: Wenn ich über das HyperTerminal das Siemens Handy verbinde (Ansteuerung über die AT Befehle...), dann sende ich folgendes: at //Bestätigung mit Enter at+cmgs=22 //Bestätigung mit Enter "PDU-Nachricht" //Bestätigung mit STRG+Z In meinem C Programm schaut es wie folgt aus: printf("at\r"); printf("at+cmgs=22\r"); printf("069XXXXXXXXXXXXXXXXXXXXXX500730074%c",26); Jedoch geht das Versenden von den SMS nicht, anrufen konnte ich jedoch schon. Das Problem liegt glaube ich daran, dass nach dem "printf("at+cmgs=22\r");" vom Handy ein ">" zurückgesendet wird. Hier liegt mein Verdacht. Vielleicht kennt sich jemand hier gut aus, und kann mir helfen wie es doch geht, wäre echt dankbar. Mfg
Du wirst zwischen den einzelnen Ausgaben an das Telephon dessen Antworten abwarten und auswerten müssen. Tust Du das nicht, "überfährst" Du das Telephon.
Außerdem haben viele Telfone auch gerne einen "echten" Zeilenumbruch alla "\r\n" ...
Rufus t. Firefly schrieb: > Du wirst zwischen den einzelnen Ausgaben an das Telephon dessen > Antworten abwarten und auswerten müssen. Tust Du das nicht, "überfährst" > Du das Telephon. Hallo. Bin jetzt wieder mal hier. Du hattest recht. Mit... printf("at\r"); delay_ms(1000); printf("at+cmgs=22\r"); delay_ms(1000); printf("069XXXXXXXXXXXXXXXXXXXXXX500730074%c",26); ...funktionierte es. Und jetzt mal ein neues Thema. Hätte jetzt noch eine liebe Zusatzfunktion im Gedanken: Würde gerne von einem anderen Handy aus auf das Siemens Handy eine SMS senden, in welcher man einen Text hineinschreibt kann, und dieser Text soll von meinem Mikrocontroller ausgelesen werden. Hat jemand da Tipps für mich? Danke! LG
Sauberer als Warten wäre ein Auswerten der Antworten des Telephones.
Rufus t. Firefly schrieb:
> Sauberer als Warten wäre ein Auswerten der Antworten des Telephones.
Die Auswertung der Antwort ist bei mir technisch nicht möglich zzt., da
ich keine Schnittstelle dafür bereit habe.
Außerdem geht es so, und das ist das Wichtige.
LG
> Die Auswertung der Antwort ist bei mir technisch nicht möglich > zzt., da ich keine Schnittstelle dafür bereit habe. Du nutzt nur die TxD-Leitung Deines µCs und RxD ist anderweitig belegt? Dann aber kann das hier nicht funktionieren: > Würde gerne von einem anderen Handy aus auf das Siemens Handy > eine SMS senden, in welcher man einen Text hineinschreibt kann, > und dieser Text soll von meinem Mikrocontroller ausgelesen werden.
Die Transmit und Receive Leitung ist belegt. Jedoch ist z.B. eine Auswertung in dem Sinne nicht möglich, dass ich die empfangenen Daten vom Handy irgendwo anzeigen kann. Kann die Daten vom Handy nur in einem Speicher auf den PC direkt schreiben. LG
Auswertung heißt ja nicht zwangsweise Anzeigen, sondern hier, daß nach dem Senden eines AT-Kommandos auf die Antwort gewartet wird (die "OK" lauten sollte) und erst nach dem Eintreffen der Antwort mit dem nächsten Kommando fortgefahren wird.
Nein, dann wird es nicht ausgewertet. Wie kann ich so eine Auswertung noch realisieren? Hab mit der Handy-Anbinung zum Mikrocontroller nicht so viel Erfahrung. LG
> Nein, dann wird es nicht ausgewertet.
Ja, dann mach das doch einfach. Ich verstehe Dein Problem nicht so
recht.
Das Problem: Hab mehr oder weniger das PIC Demoboard. Das Handy ist an den Mikrocontroller angeschlossen und kann auch Daten zurücksenden, da Transmit und Receive Leitungen in Verwendung sind. Jedoch kann ich nicht auswerten was das Handy zurücksendet, da ich es nirgends anzeigen lassen kann (vgl. HyperTerminal). Verstehst du schon ein bisschen mehr was ich meine? LG
Hier liegt ein Missverständnis vor. Du musst die Daten, die das Telephon zurücksendet, nicht anzeigen, Du musst sie nur auswerten, um den Zeitpunkt bestimmen zu können, wann Du das nächste Kommando an das Telephon senden kannst: printf("at\r"); ... hier auf Antwort warten printf("at+cmgs=22\r"); ... hier auf Antwort warten printf("069XXXXXXXXXXXXXXXXXXXXXX500730074%c",26); naja, und hier natürlich auch wieder auf Antwort warten. Wird es allmählich klarer?
Uwe L. schrieb: > nirgends anzeigen lassen kann (vgl. HyperTerminal). > Verstehst du schon ein bisschen mehr was ich meine? Du musst die Antwort einfach nur von der seriellen Schnittstelle abholen. Wenn du gut drauf bist, vergleichst du noch ob das Handy ein "OK" zurückgeschickt hat oder nicht. Und wenn nicht, schaltest du von mir aus eine LED ein, damit dein Benutzer auch weiß, das da was schief gelaufen ist. Das hat aber nichts damit zu tun, ob du die Antwort wo anzeigen kannst oder nicht. Du kannst dir ja auch von der Post einen postlagernden Brief abholen und den ungeöffnet wegwerfen. Du musst auch nicht alle Briefe in deinem Briefkasten tatsächlich lesen. Du musst sie nur aus dem Briefkasten rausnehmen, denn wenn du es nicht tust, wird dir der Postler irgendwann keine neuen mehr reinstecken. Ob du die Briefe liest oder nicht, ist dem Postler hingegen egal.
Hallo. Ich sehe, es war mein Fehler, ich habe mich ein wenig falsch ausgedrückt. Das Programm welches SMS senden soll, funktioniert so, und ich möchte es auch nicht ausbauen und nicht auswerten was das Handy zurücksendet. Jedoch habe ich folgendes gemeint: Ich möchte jetzt ein Programm schreiben, bei dem mit einem AT Befehl , der vom Mikrocontroller aus gesendet wird, der Nachrichtenspeicher im Handy ausgelesen wird, und diese Zeichenfolge welche ich dann vom Handy zurückbekomme (PDU Message), möchte ich einzeln als Character einlesen und auswerten. Das Problem ist, dass man Character die z.B. von einer Tastatur kommen ja mit einem Enter bestätigt. Jedoch kann ich die Zeichenfolge die mir das Handy an den µController sendet nicht im Programm (z.B. mittels Schleife) abfangen und einlesen, da das Handy ja nur einzelne Zeichen, aber keine Steuerzeichen wie Enter mit schickt. Habt ihr ungefähr verstanden worum es geht? Ich hoffe ich konnte mich genauer formulieren. LG
> Das Problem ist, dass man Character die z.B. von einer Tastatur kommen > ja mit einem Enter bestätigt. Tut man das? > Jedoch kann ich die Zeichenfolge die mir das Handy an den µController > sendet nicht im Programm (z.B. mittels Schleife) > abfangen und einlesen, da das Handy ja nur einzelne Zeichen, aber keine > Steuerzeichen wie Enter mit schickt. Das Telephon wird als Antwort auf das entsprechende AT-Kommando eine Zeichenkette senden, also mehrere Zeichen hintereinander. Und aller Wahrscheinlichkeit nach wird es am Ende der Zeichenkette sogar CR und/oder LF senden. Mir scheint, daß da noch das eine oder andere Verständnisproblem vorliegt.
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.