Hallo,
Ich bin absolut neu hier im Forum und auch erst seit kurzem dabei mit Arduino umzugehen. Ich besitze und beziehe mich dabei auf einen Arduino Mega 2560.
Ich habe folgendes Problem:
Auf diversen Seiten im Web (z.B. SUPER IR ANDROID APPLICATIONS - ARDUINO PROJECTS) habe ich herausgefunden, dass man ältere Handys quasi als GSM-Shield nutzen und über die serielle Verbindung mit dem AT-Befehlssatz steuern kann (Anrufe tätigen, SMS lesen, SMS senden usw.). Ich habe mir daraufhin ein Sony Ericsson K700i mitsamt Datenkabel besorgt und die Verbindung hergestellt (TX Handy -> RX1 Arduino, RX Handy -> TX1 Arduino, GND -> GND). Wohlgemerkt beherscht das SE K700i nur den PDU-Modus, was mich jetzt aber weniger stört. Hierfür gibt es genügend Converter (z.B. http://twit88.com/home/utility/sms-pdu-encode-decode).
Soweit so gut, das funktioniert auch einwandfrei. Sende ich dem Handy Befehle bekomme ich Antworten, ich kann Anrufe tätigen und SMS versenden. Das Problem ist also nicht die Verbindung.
Mein Problem besteht jetzt vielmehr darin empfangene SMS auf dem Handy auszulesen. Anwendungszweck z.B. ich sende eine SMS mit "led an" an das Handy, Arduino liest dies aus und schaltet die LED an.
Ich habe dazu folgenden Sketch geschrieben (es geht mir erstmal nur darum die SMS überhaupt auszulesen):
void setup(){
Serial.begin(9600);
Serial1.begin(9600);
delay(3000);
Serial1.println("AT+CPMS=\"ME\",\"ME\",\"ME\""); //Auf internen Telefonspeicher umschalten
delay(3000);
}
void loop(){
Serial1.println("AT+CMGL=4"); //Alle Nachrichten auslesen
Serial.println("Befehl gesendet: AT+CMGL=4");
Serial.println("Antwort:");
while(Serial1.available() > 0){
Serial.write(Serial1.read());
}
Serial.println("");
Serial.println("");
delay(5000);
}
(das K700i ist beim Arduino Mega an Serial1 angeschlossen!)
Auf dem Serial Monitor erhalte ich nun folgendes (Ausschnitt):
Befehl gesendet: AT+CMGL=4
Antwort:
+CMGL=4
+CMGL: 1,1,,26
0791947106005034240D91947177104149F30
(Handynummer verfälscht)
eigentlich müsste ich aber das erhalten:
Befehl gesendet: AT+CMGL=4
Antwort:
+CMGL=4
+CMGL: 1,1,,26
0791947106005034240D91947177104149F300003170327135628006EC3219147603
Ich habe nun schon mehrere Stunden herumprobiert und es scheint mir als ob Arduino den Output des Handys irgendwie "verschluckt" oder abschneidet, denn wenn ich folgenden Code (einfach ohne das delay(5000)) verwende:
void setup(){
Serial.begin(9600);
Serial1.begin(9600);
delay(3000);
Serial1.println("AT+CPMS=\"ME\",\"ME\",\"ME\"");
delay(3000);
}
void loop(){
Serial1.println("AT+CMGL=4");
Serial.println("Befehl gesendet: AT+CMGL=4");
Serial.println("Antwort:");
while(Serial1.available() > 0){
Serial.write(Serial1.read());
}
Serial.println("");
Serial.println("");
}
erhalte ich (Ausschnitt):
Befehl gesendet: AT+CMGL=4
Antwort:
AT
Befehl gesendet: AT+CMGL=4
Antwort:
Befehl gesendet: AT+CMGL=4
Antwort:
+CMGL=4
+CMGL: 1,1,,26
0791947106005034240D91947177104149F300003170327135628006EC3219147603
OK
Befehl gesendet: AT+CMGL=4
Antwort:
AT
Befehl gesendet: AT+CMGL=4
Antwort:
+CMGL=4
+CMGL: 1,1,,26
0791947106005034240D91947177104149F300003170327135628006EC3219147603
OK
Befehl gesendet: AT+CMGL=4
Antwort:
AT
Befehl gesendet: AT+CMGL=4
Antwort:
Befehl gesendet: AT+CMGL=4
Antwort:
+CMGL=4
+CMGL: 1,1,,26
0791947106005034240D91947177104149F300003170327135628006EC3219147603
Hier taucht also auf einmal der zuvor vermeintlich abgeschnittene Teil auf, allerdings scheint sich Arduino hier zu überschlagen oder dergleichen weil der Output auf dem Serial Monitor nicht immer gleich ist....es scheint als ob Arduino hier einfach immer einen willkürlichen Teil aufschnappt und dann ausgibt.
Wie kann ich es am nun am besten lösen dass Arduino mir einfach den kompletten Output des Handys ausgibt ohne dabei etwas abzuschneiden oder durcheinander zu werfen? Am besten wäre es wenn ich den Output des Handys in einer Variable speichern könnte um diese später mit den "Soll-PDU"-Daten zu vergleichen um dann die LED zu steuern...
Das Problem taucht auch nur beim SMS auslesen auf. Ich vermute das liegt daran dass der Output des Handys hierbei wesentlich länger ist als bei all den anderen Befehlen. Sende ich dem Handy andere Befehle wie (ATD12345678, AT, AT+CBC) funktioniert das einwandfrei...ich bekomme einen gleichbleibenden kompletten Output des Handys angezeigt.
Der Beispielcode (SUPER IR ANDROID APPLICATIONS - ARDUINO PROJECTS) von oben genannter Website gibt mir den gleichen Output wie mein erster Sketch, also unvollständig.
Ich habe diesbezüglich noch keine vergleichbaren Probleme gefunden und hoffe dass mir hier geholfen werden kann. Ich probiere nun wirklich schon Ewigkeiten herum und komme nicht voran. Ebenso hoffe ich mal dass mein erster Post so in Ordnung war
Besten Dank schonmal.