Arduino GSM Shield - Problem beim Senden einer SMS

OP #4718604
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
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
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
Ok, das ist ja auch ein anderer Sketch.
Du schriebst der Sketch aus der IDE, daraus habe ich die Anweisung 
entnommen.
Diesen Sketch muss ich mir erst ansehen.
Gast
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
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.
Gast
Ludwig M. schrieb:
 Poster doch mal den Sketch den du
> meinst, vielleicht bekomme ich es ja damit hin.
>
> Gruß Ludwigm

Das geht aktuell nicht, da ich am Tablet poste und nicht am Rechner 
sitze.
Aber teste es mit den zuvor beschriebenen.
OP
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
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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.