Hallo Forum,
also derzeit arbeite ich an einem Sketch für eine zukünftige Wetterstation, welche Messdaten über das Seeedstudio GPRS Modul mittels SMS verschickt an diverse Teilnehmer.
Das GPRS Modul ist testweise an einem Arduino UNO angeschlossen.
Kommuniziert wird zwschichen GPRS Modul und Arduino über SoftwareSerial und zwischen Arduino und PC über den Hardware UART.
Grundsätzlich funktioniert ja die Kommunikation zwischen Arduino und GPRS Shield.
Beim Hochfahren erhalte ich auch eine schöne Konversation vom GRPS Shield, wo man die AT Kommandos erkennen kann.
<0>ÿÿÿÿÿÿÿÿ
RDY
+CREG: 2
+CREG: 0
+CFUN: 1
+CPIN: SIM PIN
AT+CPIN=xxxx
OK
+PACSP: 1
+CREG: 2
+CREG: 1,"0
Call Ready
Mein Beispielcode erkennt nun wenn eine SMS eintrudelt, denn dann meldet das GPRS Shield über seine SoftwareSerial Schnittstelle folgenden Text an den Hardware UART
+CMTI: "SM",6
Unten in meinem Sketch frage ich dann den eingelesenen String bei Serial.available() mit meinem SMS Empfangshinweis '+CMTI:' ab, und wenn es wirklich so ist, soll die Led 13 leuchten.
Damit sie wieder ausgeht, muss ich absichtlich ein AT Kommande falsch eingeben, sodass am ein 'ERROR' Text ausgegeben wird. ( dass erreche ich mit AT? + Enter drücken am Terminal)
Beides funktioniert super.
Doch ich würde viel lieber einen kompletten String, aus meherer Wörtern bis zum ersten CR einlesen, und in dieser Stringwurst nach diversen Schlüsselwörtern suchen lassen, bzw diese auch anhand von bestimmten Zeichen in Einzelstrings zu zuerlegen.
Doch wie mache ich dass am besten.
Ich bitte euch deshalb um Unterstützung.
char GPRS_read,GPRS_write;
char IncSMS = '+CMTI:'; // Erhält man bei eingehender SMS - 13.Zeichen definiert den SMS Index=> hier vollständige Meldung +CMTI: "SM",6
char ATErr = 'ERROR';
void setup() habe ich der Übersicht ausgelassen, dort definiere ich nur die StartUp Procedure vom GPRS Modul.
void loop()
{
if (GPRS.available())
{
GPRS_read = GPRS.read();
Serial.write(GPRS_read);
if (GPRS_read == IncSMS)
{
digitalWrite(13,HIGH);
} // bei SMS Empfang wird Led eingeschaltet
if (GPRS_read == ATErr)
{
digitalWrite(13,LOW); // bei erzwungenen ERROR Meldung wird Led ausgeschaltet
}
}
if (Serial.available())
{
GPRS_write = Serial.read();
GPRS.write(GPRS_write);
}
}
vielen vielen dank mal schon in voraus.