GSM Shield SMS als Mail weiterleiten

Hallo zusammen,

da ich noch neu in Sachen Arduino bin, komme ich da bei einem Punkt nicht weiter.
Ausgangslage: GSM und Ethernetshields mit den Beispielen. Hier habe ich beide Beispiele zusammengestoppelt.

Das Problem ist, dass ich keinen String habe, den ich dann dem Mailsendeteil übergeben kann, da das GSM Shield das SMS Zeichen für Zeichen abholt:
Line 84: char c;

Ab Line 100

while(c=sms.read())
 Serial.print(c);

Hier soll der SMS Text in ein Mail verpackt werden. (Line 153)

client.println(F(c));

Es kommt logischerweise folgende Fehlermeldung:
'c' was not declared in this scope. 1. Weil es nicht deklariert ist, und 2. Würde hier nur ein Zeichen statt der gesamte SMS Text drinstehen.

Somit habe ich 2 Fragen: Wie kann ich Variablen deklarieren, die für das gesamte Sketch gültig ist und wie bekomme ich die einzelnen Char´s von c in einen String?

Ich hab den gesamten Code hier beigepackt. Zu bemerken ist noch, dass ich den nicht testen kann, mangels Hardware.

Ich wäre echt Dankbar über hilfreiche Tips.

lg
Peter

SMS2Mail.ino (6.01 KB)

Hallo Peter, ausser vielen delays sehe ich nicht, wo das bei dir stattfinden soll.

Variablen für den gesamten Sketch deklarierst du im Global,

// Hier hin!

setup() { ...}

loop() { ...}

sonstigeFunktionen { ... }

Anstatt einzeln die Werte einzulesen kannst du diese auch als Zeichenkette / String verabeiten.

Schau dir mal die Arduino Referenzen an
Du suchst vermutlich sowas

String test;
test += c;

"+=" - "addiert jeweils einen Buchstaben auf. Wenn nun an deiner SMS Schnittstelle "Hallo" ankommt, sind ist das 'H','a','l','l',o

Num mit dem +=;
0. (test = "");

  1. test += c (test = "H");
  2. test += c (test = "Ha");
  3. test += c (test = "Hal");
  4. test += c (test = "Hall");
  5. test += c (test = "Hallo");
    String

da_Peda:

client.println(F(c));

Das kann auch deshalb nicht gehen, weil das F-Makro Daten ins Flash schreibt. Das muss also zur Compile-Zeit feststehen. Man kann nicht Variablen die sich zur Runtime ändern ins Flash schreiben.

Hallo,

Danke für Euren Input!
Ich hab ds gleich mal so versucht:

      SMSText += c;

Dann kam folgender Fehler: incompatible types in assignment of 'char' to 'String [160]'

Nun habe ich dann konvertiert:

      SMSText += String(c);

Ergebnis was folgendes: error: no match for 'operator+=' in 'SMSText += String(c)'

Kann er nun nicht konvertieren, oder wo liegt der Fehler jetzt?

lg
Peter

error: no match for 'operator+=' in 'SMSText += String(c)'
Kann er nun nicht konvertieren, oder wo liegt der Fehler jetzt?

Na, der Fehler heisst, man kann kein + auf SMSText und String(c) anwenden. ( und schon gar kein += )

Du hast nicht verraten, was SMSText ist, aber meine Kristallkugel sagt mir, dass es zum Glück wohl kein String Objekt ist.
Bei char Array braucht man so ein kompliziertes += gar nicht.

char* getSMS( )
{
 static char SMSText[160];
 byte pos =0;
 char c; 
 while ( ( c = sms.read() ) != 0 )  // mal geraten, dass sms.read() so verwendet wird...
    SMSText[pos++] = c;
 SMSText[pos]= 0;  // Endekennung
 Serial.println(SMSText);  // z. Test
 return SMSText;
}

Hallo,

Danke für die Tipps, leider komme ich aus Beruflichen Gründen wohl die kommenden 2 Wochen nicht dazu, hier weiter zu machen.
Ich hoffe, dass ich bis dahin das GSM und das Ethernetshield erhalten habe, sodass ich nicht nur in der grauen Theorie erfahrungen sammle...

lg
Peter