ArduPros:
Ich glaube langsam auch, dass es am Speicherunterschied liegt. Wie kann ich denn noch RAM einsparen, außer die Serial-Ausgaben umzuschreiben bzw. wegzulassen?
Die kannst nirgends so viel und so einfach RAM auf einen Schlag einsparen wie mit dem Umschreiben aller print und println Anweisungen für die Ausgabe von reinen Textkonstanten auf die Verwendung des F-Makros.
Die nächste Massnahme wäre dann, alle "String" Objekte aus dem Programm rauszuschmeißen und in geeigneter Weise durch C-Strings/Char-Arrays zu ersetzen. Dazu muss einiges an Programmlogik umgeschrieben werden, da Du mehrfach String-Objekte verwendest:
String msg
String erg;
String data;
String pw
String par
Letzteres String Objekt ("par") wird offenbar innerhalb derselben Funktion mehrfach re-deklariert.
Keine Ahnung, was das für Auswirkungen auf den Speicherverbrauch hat.
BTW: String-Objekte sind in allen Arduino Versionen vor v1.0.5 fehlerhaft implementiert. Also String-Objekte nicht mit den Versionen 1.0.1, 1.0.2, 1.0.3 oder 1.0.4 verwenden, sondern wenn überhaupt notfalls erforderlich dann nur mit Version 1.0.5 (oder vielleicht zukünftigen Versionen), sonst drohen selbst bei fehlerfreien Programmen extreme Programm-Fehlfunktionen!
Der Gebrauch von String-Objekten ist das zweite große Ding an RAM-Speicherverschwendung, das Du bei Dir in den Sketch eingebaut hast. Aber im Gegensatz zu den F-Makros, die man bei print() und println() leicht nachträglich reinschieben kann, ist das Umschreiben auf char-Arrays mit mehr Aufwand verbunden, um RAM-Speicher zu sparen.
Wieviel RAM-Speicher jeweils noch frei ist, kannst Du Dir mit der Funktion freeRam anzeigen lassen, wenn Du die mal gelegentlich irgendwo in Deinem Sketch aufrufst und Dir das Ergebnis über Serial ausgeben läßt.
int freeRam () {
extern int __heap_start, *__brkval;
int v;
return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
}