Forum: Mikrocontroller und Digitale Elektronik Mit AT-Kommandos SMS versenden


von Kevin D. (Firma: m5) (daverda00)


Angehängte Dateien:

Lesenswert?

Hallo, mein Problem ist eigentlich ganz simpel, jedoch komm ich nicht 
weiter; Ich möchte einfach mittels AT-Kommandos und einem Modem eine SMS 
verschicken. Die Kommunikation zwischen Mikrocontroller und Modem 
generell funktioniert (der Dial-Befehl funktioniert einwandfrei). Sende 
ich jedoch das Kommando für eine SMS, passiert nichts. Den Teil meines 
Programmes habe ich als Anhang hochgeladen.
P.s. 92 und 34 stehen für \ und ", ich wusste nur nicht, wie man diese 
als char anschreibt. Ausserdem bin ich momentan "nicht in der Lage", die 
Antworten meines Modems zu lesen, also warte ich nicht auf ein OK nach 
dem ersten Befehl, sondern warte einfach 4 Sekunden und verschicke dann 
den Inhalt der Nachricht. Früher hatte ich aber den Befehl mit einem PC 
und dem selben Modem ausprobiert und es funktionierte. Bitte wenn mir 
jemand weiterhelfen könnte.

von Stefan (Gast)


Lesenswert?

Bevor Du ein Zeichen sendest, musst Du prüfen, ob der UART bereit ist. 
Dazu hat er ein Status Register.

Sonderzeichen kannst Du in C so umschreiben:

\n = 10
\r = 13
\" = "
\' = '
\\ = \

Schau Dir mal meine Quelltexte bezüglich der seriellen Kommunikation an.
http://stefanfrings.de/avr_io/SERIAL-IO-Modul_v1.3.2.zip

Der Serielle Port wird den Dateien stdin und stdout zugewiesen, so daß 
die standard I/O Funktionen aus stdio.h damit verwendbar sind (wie z.B. 
println).

Dor wird direkt gesendet (wie bei Dir), allerdings unter 
Berücksichtigung des UART Status. Für den Empfang wird der Interrupt 
verwendet, sowie ein Puffer, damit man auch ganze Zeilen am Stück 
auslesen kann. Die Größe des Puffers musst Du an deinen Anwendungsfall 
anpassen. Am besten so groß, dass eine komplette Modem-Antwort rein 
passt.

von Hans Ulli K. (Gast)


Lesenswert?

Mach da am besten einen String draus (wegen lesbarkeit)

aus
char sms_test_command[30] = {'a','t','+','c','m','g','s','=',92,34 ...
wird
char sms_test_command[30]= "at+cmgs=\"+393295348138\"";

Du hat da einen Backslash "zuviel" drin ...

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Von Peter Fleury gibts so eine schöne UART Library, nutz die doch 
einfach mal.

Beim SMS senden musste eh darauf achten ob dein GSM Modul ASCI Text für 
SMS haben will oder PDU (is meist einstellbar).

von Kevin D. (Firma: m5) (daverda00)


Lesenswert?

Nach langem Probieren habe ich herausgefunden, dass die Backslhashes 
wirklich zu viel waren. Ausserdem musste ich noch mittels AT+CMGF vom 
Pdu-Mode zum Text-Mode wechseln. Vielen Dank für die Hinweise, jetzt 
funktionierts perfekt!

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.