Forum: Mikrocontroller und Digitale Elektronik TC35 Arduino SMS Empfangen


von Mario I. (mario_i)


Lesenswert?

Hallo,

ich hoffe Ihr könnt mir weiter helfen...
Ich knobel schon eine ganze Weil wie ich mit ein Mega-Board und dem TC35 
eine SMS empfangen kann... Leider komme ich nicht wirklich weiter...
Das senden einer SMS ist kein Problem...
Ich kann nur leider nicht eine empfangende SMS anzeigen lassen...
Hat jemand eine Idee??

Hab schon einen Ansatz...
Leider funktioniert das nicht wirklich...


int ledPin=13;

char receivedByte;


void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
pinMode(ledPin,OUTPUT);
Serial.println("\r\nStarten\r\n");

Serial1.print("AT+CMGF=1\r");
delay(400);
Serial1.print("AT+CMGR=1\r");
delay(400);
Serial.println(Serial1.read());
}

void loop()
{
if(Serial1.available()>0)
{
Serial.println(Serial1.read());
digitalWrite(ledPin,HIGH);
}
}

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Mario I. schrieb:
> Serial1.print("AT+CMGR=1\r");

Hallo Mario,

für AT+CMGR musst du erst einmal wissen, in welchem Speicherplatz die 
angekommene SMS gespeichert wurde. Ich bin mir nicht sicher, aber ich 
glaube, dass man nicht davon ausgehen kann, dass jede SMS auf Position 1 
ankommt.

Ich würde eher AT+CMGL verwenden. Mit =1, 2, 3 oder 4. Weiß es nicht 
auswendig, aber in der Doku wirst du rausfinden, welche Zahl für 
"ungelesene SMS", "gelesene SMS", "beides" steht.

Empfangene SMS sollte man dann eventuell auch löschen, nicht dass der 
Speicher irgendwann voll ist. Das geht mit AT+CMGD. Glaub ich. Hab das 
alles mal programmiert, ist aber ein Weilchen her. :-)

von Mario I. (mario_i)


Lesenswert?

Danke für die schnelle Antwort!!

Ich habe es versucht... Als Anzeige bekomme ich:


Starten

13
10
79
75
13
10
13
10
69
82
82
79
82
13
10


Ich habe aber doch mit Serial1.print("AT+CMGF=1\r"); angegeben das er 
das ergebnis im Klartext anzeigen soll...
Hmmm

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Mario I. schrieb:
> Ich habe aber doch mit Serial1.print("AT+CMGF=1\r"); angegeben das er
> das ergebnis im Klartext anzeigen soll...
> Hmmm

Hm...schau mal hier:
http://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#ASCII-Tabelle

Ausgegeben wird:
OK
ERROR

Wahrscheinlich brauchst du zur Ausgabe von Text eine andere Funktion als 
digitalWrite(ledPin,HIGH);

Welche das ist, weiß ich leider nicht, ich kenne die verwendete 
Bibliothek nicht.

von Mario I. (mario_i)


Lesenswert?

die fkt digitalWrite(ledPin,HIGH); ist nur eine led die angeht... ist 
für mich zur kontrolle ob das programm in die fkt einsteigt. wenn die 
led leuchtet, dann ja... und das macht sie... leider bekomm ich nur die 
oben angegebene antwort zurück...

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Sorry, mein Fehler, ich meinte diese Zeile hier:

Serial.println(Serial1.read());

Serial.println() gibt anscheinend Zahlen aus. Du brauchst aber einzelne 
Zeichen ("char").

von Mario I. (mario_i)


Lesenswert?

ok, danke...
Jetzt bekomme ich das "OK ERROR" angezeigt...
Jetzt muß ich nur noch raus bekommen warum ich die Nachricht nicht 
angezeigt bekomme...

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Mario I. schrieb:
> ok, danke...
> Jetzt bekomme ich das "OK ERROR" angezeigt...
> Jetzt muß ich nur noch raus bekommen warum ich die Nachricht nicht
> angezeigt bekomme...

Siehe oben. Wenn es keine SMS mit der Nummer 1 gibt, kann AT+CMGR auch 
keine lesen. Deswegen kommt für das zweite Kommando auch "ERROR" zurück.

Probier statt AT+CMGR mal das List-Kommando: AT+CMGL=4
Damit müssten alle SMS angezeigt werden, die gespeichert sind.

Doku dazu hier:
http://www.hughes.com/AT_Command_Reference.html#AT_plusCMGL

von Mario I. (mario_i)


Angehängte Dateien:

Lesenswert?

Hallo...
Ich habe es hin bekommen...
Es gibt da nur noch ein kleines Problem...
Wenn ich den Code im HyperTerminal anzeigen lasse, bekomme ich alles 
angezeigt (siehe Bild).
Wenn ich den gleichen Code über das Arduino anzeigen lasse, fehlt auf 
einmal der Text der SMS. So als ob es nicht angezeigt werden kann (nicht 
genug Zeichen zur Verfügung oder so)
Hat jemand eine Idee wie ich mir den Rest anzeigen lassen kann??

Vielen Dank im Voraus
Mario

von Mario I. (mario_i)


Lesenswert?

ok, danke.
kannst du mir bitte einen Ansatz geben?
weiß nicht ganz was du damit meinst

danke

von Hilgi (Gast)


Lesenswert?

also wenn du einfach nur serial1 schreibst und serial schreibst wird 
immer der gleiche pin angesprochen
ich arbeite mit myserial.h

da kann man dann 0,1 für serial belassen und zb 2,3 für den tc35 
benennen
in deinem letzte thread sah es so aus als wenn du alles über die 
gleichen pins laufen lässt....

nur als idee..

gruß

von Chen (Gast)


Lesenswert?

Hallo Mario,
prüf bitte mal die Buffersize der seriellen Schnittstellen. Ich habe die 
auf 256 erhöcht und hat das Problem erledigt.

Viele Erfolg!!

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.