mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Arduino GSM Shield - Problem beim Senden einer SMS


Autor: Ludwig M. (ludwigm)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo,
ich habe versucht mit folgendem Code eine SMS zu senden:
// Include the GSM library
#include <GSM.h>

#define PINNUMBER "1234"

// initialize the library instance
GSM gsmAccess;
GSM_SMS sms;

[...]

void loop() {
[...]
  char txtMsg[] = "test";
  char remoteNum[] = "0123456789";
 
    // send the message
    sms.beginSMS(remoteNum);
    sms.print(txtMsg);
    sms.endSMS();
    Serial.println("\nCOMPLETE!\n");
    bo = false;
}

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

Autor: Dieter S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ludwig M. (ludwigm)
Datum:

Bewertung
0 lesenswert
nicht 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:
 sms.beginSMS(remoteNum);
  sms.print(txtMsg);
  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.

int readSerial(char result[]) {
  int i = 0;
  while (1) {
    while (Serial.available() > 0) {
      char inChar = Serial.read();
      if (inChar == '\n') {
        result[i] = '\0';
        Serial.flush();
        return 0;
      }
      if (inChar != '\r') {
        result[i] = inChar;
        i++;
      }
    }
  }
}

Hat jemand eine Idee?
Danke im Voraus. ludwigm

Autor: Dieter S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Ludwig M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter S. (Gast)
Datum:

Bewertung
1 lesenswert
nicht 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.

Autor: Dieter S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Ludwig M. (ludwigm)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo,
Dieter S. konntest du etwas herausfinden?

Gruß Ludwig

Autor: Dieter S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte doch geschrieben, was zu machen ist.
Hast du es probiert?

Autor: Ludwig M. (ludwigm)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo,
Sorry Dieter, deine Antwort hatte ich leider übersehen, keine Ahnung 
warum.
Ich habe es jetzt mal so getestet:
 // send the message
  sms.beginSMS("0123456\n");
  sms.print("test\n");    
  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

: Bearbeitet durch User
Autor: Ludwig M. (ludwigm)
Datum:

Bewertung
-1 lesenswert
nicht 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.
char txtMsg[] = "test"; 
  char remoteNum[] = "0123456789";
  
    sms.beginSMS(remoteNum);

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

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

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

char txtMsg[] = "test\n"; 
  char remoteNum[] = "0123456789\n";
Bin für jede Hilfe dankbar!
Gruß Ludwig

: Bearbeitet durch User
Autor: ende inchar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
probier mal \0 statt \n

Autor: Dieter S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann nimm mal "\r" ans Ende.

Autor: Ludwig M. (ludwigm)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Ich habe einen kleinen Fortschritt gemacht.
Ich habe das Beispielprogramm der Arduino IDE schrittweise angepasst. 
Die Telefonnumer wird mit folgendem Code erfolgreich vorgegeben.
  char remoteNum[20];  // telephone number to send sms
  remoteNum[0] = '0';
  remoteNum[1] = '1';
  remoteNum[2] = '2';
         ....  
  remoteNum[11] = '4';
  remoteNum[12] = '\0';

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

  sms.beginSMS(remoteNum);
  sms.print(txtMsg);
  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:
 char txtMsg[20];
  txtMsg[0] = 'T';
  txtMsg[1] = 'e';
  txtMsg[2] = 's';
  txtMsg[3] = 't';
  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

Autor: Rufus Τ. F. (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kürzlich wies hier im Forum jemand darauf hin, daß man den 
Nachrichteninhalt mit Ctrl-Z abschließen müsste.

Ctrl-Z ist \x1a.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.