Arduino GSM Shield - Problem beim Senden einer SMS

OP #4718604
Lesenswert?
• ▲
▼
Hallo,
ich habe versucht mit folgendem Code eine SMS zu senden:
1
// Include the GSM library
2
#include <GSM.h>
3

4
#define PINNUMBER "1234"
5

6
// initialize the library instance
7
GSM gsmAccess;
8
GSM_SMS sms;
9

10
[...]
11

12
void loop() {
13
[...]
14
  char txtMsg[] = "test";
15
  char remoteNum[] = "0123456789";
16
 
17
    // send the message
18
    sms.beginSMS(remoteNum);
19
    sms.print(txtMsg);
20
    sms.endSMS();
21
    Serial.println("\nCOMPLETE!\n");
22
    bo = false;
23
}
Leider bekomme ich keine SMS gesendet und das Programm bleibt bei 
sms.print hängen. Das Testprogramm der Arduino-IDE ("SendSMS") 
funktioniert ohne Probleme.

Hat jemand eine Idee was an dem Code falsch ist?

Vielen Dank im Voraus
ludwigm
Gast #4718761
Lesenswert?
• ▲
▼
Warum baust du den Sketch nicht so auf, wie es das Beispiel vorgibt?
So hat es doch nach deiner Aussage funktioniert.
Da verlangt er doch auch diese Anweisung:

"modem.sendSMS("Hello from Arduino","01234567890");"

Somit muss der SMS-Text und die Nummer in einem Aufruf an das Modul 
geschickt werden.
OP #4719865
Lesenswert?
• ▲
▼
Danke für die Antwort, Dieter S.
Ich habe das Beispiel geladen und dann versucht anzupassen.
Der SMS-Text und die Nummer müssen nicht in einem Aufruf an das Modul
geschickt werden.

Hier nochmal der Link zum Beispiel-Sketch: 
https://www.arduino.cc/en/Tutorial/GSMExamplesSendSMS

Dort wird folgende Syntax verwendet:
1
 sms.beginSMS(remoteNum);
2
  sms.print(txtMsg);
3
  sms.endSMS();

Im Beispiel-Sketch gibt es ja auch die Funktion readSerial(char 
result[]) die die Eingabe im seriallen Monitor verarbeitet. Mein Code 
aus dem ersten Post verwendet diese Funktion ja nicht, ich vermute, dass 
sich daraus ein Formatproblem ergibt.

1
int readSerial(char result[]) {
2
  int i = 0;
3
  while (1) {
4
    while (Serial.available() > 0) {
5
      char inChar = Serial.read();
6
      if (inChar == '\n') {
7
        result[i] = '\0';
8
        Serial.flush();
9
        return 0;
10
      }
11
      if (inChar != '\r') {
12
        result[i] = inChar;
13
        i++;
14
      }
15
    }
16
  }
17
}

Hat jemand eine Idee?
Danke im Voraus. ludwigm
Gast #4719943
Lesenswert?
• ▲
▼
Der Sketch ist aus der IDE. Ich habe diesen unter Datei -> Beispiele -> 
GSM -> SendSMS abgerufen.
Poster doch mal den Sketch den du meinst, vielleicht bekomme ich es ja 
damit hin.

Gruß Ludwigm
Gast #4719945
Lesenswert?
• ▲
▼
Du solltest es genau so aufbauen, wie im Beispiel. Nur statt der 
serialRead Anweisung deine Daten (Telefonnummer und Text) übergeben.
Und am Ende der jeweiligen Daten "\n" mit einfügen.
Das macht die Funktion serialRead auch.
OP #4730900
Lesenswert?
• ▲
▼
Hallo,
Sorry Dieter, deine Antwort hatte ich leider übersehen, keine Ahnung 
warum.
Ich habe es jetzt mal so getestet:
1
 // send the message
2
  sms.beginSMS("0123456\n");
3
  sms.print("test\n");    
4
  sms.endSMS();

Leider immer noch ohne Erfolg. Ich habe nochmal in der Referenz von 
Arduino die Methoden beginSMS() und print() nachgesehen. Bei beiden 
steht für den Parameter, dass dieser vom Typ 'char array' sein muss. Ich 
übergebe jetzt ja aber einen String.

Hat es bei dir denn so funktioniert?

Vielen Dank im Voraus
ludwigm
OP #4741497
Lesenswert?
• ▲
▼
Hallo,
ich konnte das Problem immer noch nicht lösen.

Ich habe nochmal diesen Code ausprobiert, bei dem ein char-Array 
übergeben wird wie es von der Funktion gefordert wird.
1
char txtMsg[] = "test"; 
2
  char remoteNum[] = "0123456789";
3
  
4
    sms.beginSMS(remoteNum);
5

6
    sms.print(txtMsg);
7
        //bis hier läuft es, dann hängt es
8
    sms.endSMS();
9

10
    Serial.println("\nCOMPLETE!\n");

Habe auch '\0' und '\n' an die Date angefügt, beides ohne Erfolg.

1
char txtMsg[] = "test\n"; 
2
  char remoteNum[] = "0123456789\n";
Bin für jede Hilfe dankbar!
Gruß Ludwig
OP #4783380
Lesenswert?
• ▲
▼
Ich habe einen kleinen Fortschritt gemacht.
Ich habe das Beispielprogramm der Arduino IDE schrittweise angepasst. 
Die Telefonnumer wird mit folgendem Code erfolgreich vorgegeben.
1
  char remoteNum[20];  // telephone number to send sms
2
  remoteNum[0] = '0';
3
  remoteNum[1] = '1';
4
  remoteNum[2] = '2';
5
         ....  
6
  remoteNum[11] = '4';
7
  remoteNum[12] = '\0';
8

9
  Serial.print("Now, enter SMS content: ");
10
  char txtMsg[200];
11
  readSerial(txtMsg);
12

13
  sms.beginSMS(remoteNum);
14
  sms.print(txtMsg);
15
  sms.endSMS();

Die Textnachricht wird in diesem Code mit dem Seriellen Monitor 
eingelesen (übernommen aus dem Beispielprojekt).
Ich habe versucht den Nachrichtentext ebenfalls im Code zu definieren:
1
 char txtMsg[20];
2
  txtMsg[0] = 'T';
3
  txtMsg[1] = 'e';
4
  txtMsg[2] = 's';
5
  txtMsg[3] = 't';
6
  txtMsg[4] = '\0';
Leider wird so keine SMS versendet.
Hat jemand eine Idee, warum es bei der Telefonnumer klappt, bei der 
Nachricht jedoch nicht?

Gruß Ludwig

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren