He tenido bastantes quebraderos de cabeza para echar a andar el shield GPRS con en el Arduino Mega asi que voy a poner algunas indicaciones por si a alguien le pudieran ser de utilidad.
Se trata del modulo de ElectroFreacks efcom 1.2 adquirido en DX. Lo primero que hice fue buscar una libreria para el IDE de Arduino y como la han publicado recientemente queria usar la version 1.6.
El primero problema fue que la version de la libreria que encontre en la documentacion del shield era muy antigua y no funcionaba correctamente en las versiones actuales del IDE de Arduino. La version mas actual de esta libreria mantenida por Marco Martines es esta:
https://github.com/MarcoMartines/GSM-GPRS-GPS-Shield
Una vez instalada la libreria debemos conectarla con la placa Arduino y hacer algunos ajustes en los ficheros.
Tal y como indicaba la placa en la que ira pinchado el shield es la Mega. La manera de conectar los pines para la comunicacion serie es el RX del shield con el pin 18 del Arduino y el TX con el 19 (fijarse en la imagen).
Posteriormente debemos acudir al directorio donde tengamos la libreria y realizar las siguientes modificaciones:
vim GSM.h: (comentar la del UNO y descomentar la del MEGA)
//#define UNO #define MEGA
vim HWSerial.h (descomentar la linea)
#define MEGA
En este momento ya deberia compilar sin embargo al intentarlo se muestra un error similar a este:
GSMSHIELD2/HWSerial.cpp:55:9: error: 'prog_char' does not name a type const prog_char *p = (const prog_char *)ifsh;
La manera de solucionarlo es editar el archivo HWSerial.cpp y modificar la linea que se indica mas abajo:
//const prog_char *p = (const prog_char *)ifsh; const char *p = (const char *)ifsh;
Una vez hecho esto ya podremos compilar el sketch y enviarlo a la placa.
Para testear que todo es correcto conectaremos la placa (*) y pulsaremos el boton S_PWR durante algunos segundos para activarla (se encendera el led STA) y enviaremos el sketch.
Abriremos el terminal serie e introduciremos los siguientes comandos AT (muestra del dialogo con el comando que introduzco y la salida):
AT OK AT+CPIN="****" OK Call Ready AT+COPS? +COPS: 0,0,"EUSKALTEL" OK
(*) El modulo SIM900 con el que cuenta el shield consume bastante asi que para evitar errores aleatorios que pueden volverte loco es recomendable proveer al conjunto con una fuente que pueda entregar al menos 1 amperio.