Comunicazione ArduinoUNO+Shield GSM

Ciao,

sto provando a far funzionare lo shield GSM (quello venduto dallo store Arduino) con un arduino UNO R3, utilizzando l'IDE Arduino 1.0.5.

Utilizzando l'esempio GsmScanNetworks mi sembra che lo shield GSM non stia comunicando nel modo corretto con l'arduino UNO, infatti solo qualche volta mi restituisce il codice IMEI, l'operatore a cui sono collegato e l'intensità del campo.

Ho seguito esattamente tutti i passi riportati nel tutorial, ma niente. Ho provato ad usare il seguente codice per fare il restart dello shield GSM in modo ciclico quando il codice IMEI risulta diverso da quello della scheda.

#include <GSM.h>
#include <GSM3CircularBuffer.h>
#include <GSM3MobileAccessProvider.h>
#include <GSM3MobileCellManagement.h>
#include <GSM3MobileClientProvider.h>
#include <GSM3MobileClientService.h>
#include <GSM3MobileDataNetworkProvider.h>
#include <GSM3MobileMockupProvider.h>
#include <GSM3MobileNetworkProvider.h>
#include <GSM3MobileNetworkRegistry.h>
#include <GSM3MobileServerProvider.h>
#include <GSM3MobileServerService.h>
#include <GSM3MobileSMSProvider.h>
#include <GSM3MobileVoiceProvider.h>
#include <GSM3ShieldV1.h>
#include <GSM3ShieldV1AccessProvider.h>
#include <GSM3ShieldV1BandManagement.h>
#include <GSM3ShieldV1BaseProvider.h>
#include <GSM3ShieldV1CellManagement.h>
#include <GSM3ShieldV1ClientProvider.h>
#include <GSM3ShieldV1DataNetworkProvider.h>
#include <GSM3ShieldV1DirectModemProvider.h>
#include <GSM3ShieldV1ModemCore.h>
#include <GSM3ShieldV1ModemVerification.h>
#include <GSM3ShieldV1MultiClientProvider.h>
#include <GSM3ShieldV1MultiServerProvider.h>
#include <GSM3ShieldV1PinManagement.h>
#include <GSM3ShieldV1ScanNetworks.h>
#include <GSM3ShieldV1ServerProvider.h>
#include <GSM3ShieldV1SMSProvider.h>
#include <GSM3ShieldV1VoiceProvider.h>
#include <GSM3SMSService.h>
#include <GSM3SoftSerial.h>
#include <GSM3VoiceCallService.h>

/*
 
 GSM Scan Networks
 
 This example prints out the IMEI number of the modem,
 then checks to see if it's connected to a carrier. If so, 
 it prints the phone number associated with the card.
 Then it scans for nearby networks and prints out their signal strengths.
 
 Circuit:
 * GSM shield 
 * SIM card
 
 Created 8 Mar 2012
 by Tom Igoe, implemented by Javier Carazo
 Modified 4 Feb 2013
 by Scott Fitzgerald
 
 http://arduino.cc/en/Tutorial/GSMToolsGsmScanNetworks
 
 This example code is part of the public domain
 */

// libraries
#include <GSM.h>


// PIN Number
#define PINNUMBER ""

// initialize the library instance
//GSM gsmAccess;     // include a 'true' parameter to enable debugging
GSMScanner scannerNetworks;
GSMModem modemTest;

// Save data variables
String IMEI = "xx";
String OPERATORE_Corrente = "";
String OPERATORE_Campo ="xx";

// serial monitor result messages
String errortext = "ERROR";

void setup()
{
  // initialize serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  Serial.println("GSM networks scanner");
  scannerNetworks.begin();
  
  // connection state
 // boolean notConnected = true;
  //delay(1000);
  
  //notConnected = false;
  // Start GSM shield
  // If your SIM has PIN, pass it as a parameter of begin() in quotes
  /*while(notConnected)
  {
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)
      notConnected = false;
    else
    {
      Serial.println("Not connected");
      delay(1000);
    }
  }*/
  
  // get modem parameters
  // IMEI, modem unique identifier
  Serial.print("Modem IMEI: ");
  IMEI = modemTest.getIMEI();
  IMEI.replace("\n","");
  if(IMEI != NULL)
    Serial.println(IMEI);

 }

void loop()
{ 
  
  // scan for existing networks, displays a list of networks
  Serial.println("Scanning available networks. May take some seconds.");
  Serial.println(scannerNetworks.readNetworks());
  
    // currently connected carrier
  Serial.print("Current carrier: ");
  delay(100);
  //OPERATORE_Corrente = scannerNetworks.getCurrentCarrier();
  Serial.println(scannerNetworks.getCurrentCarrier());
  //OPERATORE_Corrente = "";
    delay(100);
  // returns strength and ber
  // signal strength in 0-31 scale. 31 means power > 51dBm
  // BER is the Bit Error Rate. 0-7 scale. 99=not detectable
  
  
  Serial.print("Signal Strength: ");
  delay(100);
  OPERATORE_Campo = scannerNetworks.getSignalStrength();
  Serial.println(scannerNetworks.getSignalStrength());
  delay(100);
  //Serial.println(" [0-31]");
  Serial.print("Modem IMEI: ");
  IMEI = "xx";
     IMEI = modemTest.getIMEI();
     IMEI.replace("\n","");
     if(IMEI != NULL)
      Serial.println(IMEI);
     else
      Serial.println("Errore codice IMEI: "+ IMEI);
     delay(1000);
  if(IMEI != "862170018296259")
    {
      while(IMEI != "862170018296259")
        {
          Serial.begin(9600);
          
          Serial.println("GSM networks scanner");
          scannerNetworks.begin();
          delay(10000);
          
              Serial.print("Modem IMEI: ");
               IMEI = "xx";
               IMEI = modemTest.getIMEI();
               IMEI.replace("\n","");
               if(IMEI != NULL)
                Serial.println(IMEI);
               else
                Serial.println("Errore codice IMEI: "+ IMEI);
               delay(1000);
         }
          
   }
   
     
   OPERATORE_Corrente = "xx";
   OPERATORE_Campo ="xx";
   delay (3000);
}

Ringrazio anticipatamente, per l'aiuto