/* GSM_easy_Attention.txt - Wichtige Informationen zur Programmierung des GSM-easy! - Shield Version: 1.1 Date: 01.01.2013 Company: antrax Datentechnik GmbH Uses with: Arduino UNO (ATmega328) & Arduino Duemilanove (ATmega328) We only use basic AT sequences (with the library), for detailed information please see the "M95_AT_Commands_V1.0.pdf". Die Seitenangaben in den Kommentaren der Beispielprogramme beziehen sich auf dieses Dokument. WARNING: Incorrect or inappropriate programming of the mobile module can lead to increased fees! Viele Wege führen nach Rom: Fast alle komplexeren Funktionen bzw. Abläufe in einem Mobilfunkmodul können auf unterschiedlichen Wegen und meist auch mit unterschiedlichen AT-Befehlen realisiert werden. Es gibt, bis auf wenige Ausnahmen, nicht DIE ultimativ richtige Softwarefunktion. Von daher sollte es nicht verwundern, dass Programme bzw. Programmierbeispiele mit anderen AT-Kommandos und anderen Befehlsfolgen genau so gut funktionieren, wie die originalen GSM-easy! - Beispielprogramme. Bei der Programmierung wurde besonders darauf geachtet, EINFACHEN, gut nachvollziehbaren Beispielcode zu programmieren. Rekursive Funktionsaufrufe, prozedurale Parameter oder verschachtelte, undurchschaubare Objekte oder Klassen werden Sie in der GSM-easy! - Library nicht finden. Die Arduino-Library ist so aufgebaut, dass nicht benötigte Funktionen ganz einfach komplett entfernt werden können. Es gibt, bis auf zwei Ausnahmen (das sind die Funktionen "WaitOfReaction" und "WaitOfDownload") keine Sprünge innerhalb der Library-Funktionen. Wenn z.B. in einem Arduino-Programm nur eine SMS versendet werden soll, werden nur drei Funktionen aus der Library benötigt: - GSM.begin(); - GSM.initialize("1357"); - GSM.sendSMS("+491701234567","hello world ..."); Alle anderen Funktionen der Library (mit Ausnahme der beiden "WaitOf..."-Funktionen) können gelöscht werden. Damit geht kein wertvoller Speicherplatz durch überflüssige Library-Funktionen verloren. Ein dauerhaftes Ärgernis beim Arduino-Board (Duemillanove, UNO etc.) ist die Tatsache, dass nur eine serielle Schnittstelle vorhanden ist. Leider wurden an diese EINE serielle Schnittstelle von den Arduino-Entwicklern MEHRERE 'Teilnehmer' gehängt. Das hat zur Folge, dass die Protokollierung/Debug-Ausgaben von AT-Sequenzen zum GSM-easy! - Shield und dessen Antworten darauf oft (systembedingt) nicht funktionieren kann. Beispiel: Es wird ein AT+CREG? zum GSM-easy! - Shield gesendet, welches z.B. mit +CREG: 0,1 OK antwortet und damit signalisiert, dass es beim Homeprovider eingebucht ist. So weit, so gut! Wenn diese Information als Debug-Meldung für den User auch über Arduinos "Serial-Monitor" ausgegeben wird, z.B. "GSM eingebucht" o.ä. kommt es am Mobilfunkmodul zu einer Fehlermeldung ("+CME ERROR: 100"). Das liegt daran, dass der String "GSM eingebucht" nicht nur als Klartext für den User zum Serial Monitor gesendet wird, sondern ungewollt, aber nicht verhinderbar, parallel auch als Befehlssequenz zum Mobilfunkmodul. Ein AT-Befehl "GSM eingebucht" ist dem Modul natürlich unbekannt und deswegen reagiert es darauf mit "+CME ERROR: 100" (= unbekannter Befehl). Ein weiteres, ebenfalls im Zusammenhang mit der seriellen Schnittstelle zu sehendes Ärgernis besteht darin, dass auch während eines Uploads von Software vom PC auf das Arduino-Board ein aufgestecktes Mobilfunk-Shield über die parallelgeschaltete Schnittstelle immer "mitbeschrieben" wird. Da ein Binärcode immer wie "Datensalat" aussieht, kann ein Mobilfunkmodul, dass nur AT-Befehlssequenzen kennt und erwartet, damit nicht viel anfangen und antwortet dem PC nur mit Fehlermeldungen (s.o.) ... was wiederum zur Folge hat, dass der Software-Upload abgebrochen wird. Die einzige Möglichkeit, diesen Fehler zu vermeiden ist, das Mobilfunk-Shield während des Upload-Vorgangs zu deaktivieren. Das wird über das Signal GSM_ON auf Output 6 oder 10 (siehe Schaltplan) realisiert. Des GSM-easy! - Shield bietet die Möglichkeit, die Kommunikation zwischen Arduino-Mainboard und Mobilfunkmodul direkt mitzuprotokollieren. Auf Steckverbinder X24 liegt auf Pin 1 die yxc General: Please don't use Serial.println("...") to send commands to the mobile module! Use Serial.print( "... \r") instead. See "M95_AT_Commands_V1.0.pdf", page 9, Chapter 1.3 FAQ: Warum sind manche Textausgaben in den Beispielprogrammen auskommentiert? Alle Textausgaben über die serielle Schnittstelle z.B. zum PC oder zum "Serial Monitor" erreichen auch das Mobilfunkmodul und erzeugen dort möglicherweise eine Fehlermeldung oder den Abbruch eines vorher eingeleiteten Befehls. Dieses Verhalten liegt im internen Aufbau des Arduino-Systems begründet und ist keine spezielle Eigenschaft des GSM-easy! - Shields. Ich benötige nicht alle angebotenen Funktionen der Library. Kann ich die nicht benötigten Funktionen löschen, um Speicherplatz zu sparen? JA