GPS shield

Buona sera ho acquistato da poco questa shield: http://www.aeasport.it/home/107-arduino-scheda-gps.html
Ho trovato sul sito dfrobot questo sketch di esempio ma non funziona

#if defined(ARDUINO) && ARDUINO >= 100 
#include "Arduino.h" 
#define WireSend(args) Wire.write(args) 
#define WireRead(args) Wire.read(args) 
#define printByte(args) Serial.write(args) 
#define printlnByte(args)  Serial.write(args),Serial.println() 
#else 
#include "WProgram.h" 
#define WireSend(args) Wire.send(args) 
#define WireRead(args) Wire.receive(args) 
#define printByte(args) Serial.print(args,BYTE) 
#define printlnByte(args)  Serial.println(args,BYTE) 
#endif 
  
#include <Wire.h> 
  
#define BUFFER_LENGTH 10//Define the buffer length 
  
int GPSAddress = 0x42;//GPS I2C Address 
  
double Datatransfer(char *data_buf,char num)//Data type converter?convert char type to float 
{                                           //*data_buf:char data array ;num:float length 
  double temp=0.0; 
  unsigned char i,j; 
  
  if(data_buf[0]=='-')
  { 
    i=1; 
    while(data_buf[i]!='.') 
      temp=temp*10+(data_buf[i++]-0x30); 
    for(j=0;j<num;j++) 
      temp=temp*10+(data_buf[++i]-0x30); 

    for(j=0;j<num;j++) 
      temp=temp/10; 

    temp=0-temp; 
  } 
  else  { 
    i=0; 
    while(data_buf[i]!='.') 
      temp=temp*10+(data_buf[i++]-0x30); 
    for(j=0;j<num;j++) 
      temp=temp*10+(data_buf[++i]-0x30); 
    for(j=0;j<num;j++) 
      temp=temp/10 ; 
  } 
  return temp; 
} 
void rec_init()//initial GPS 
{ 
  Wire.beginTransmission(GPSAddress); 
  WireSend(0xff);       
  Wire.endTransmission();  
  
  Wire.beginTransmission(GPSAddress); 
  Wire.requestFrom(GPSAddress,10); 
} 
char ID()//?????ID 
{ 
  char i = 0; 
  char value[7]={ 
    '

A me sembra strano visto che stiamo parlando dello stesso chip.,'G','P','G','G','A',','      };
  char buff[7]={
    '0','0','0','0','0','0','0'      };
 
  while(1)
  {
    rec_init();
    while(Wire.available())   
    { 
      buff[i] = WireRead();
      if(buff[i]==value[i])
      {
        i++;
        if(i==7)
        {
          Wire.endTransmission();
          return 1;
        }
      }
      else
        i=0;
    }
    Wire.endTransmission();
  }
}
void UTC(){
  char i = 0,flag=0;
  char value[7]={
    '


A me sembra strano visto che stiamo parlando dello stesso chip.,'G','P','G','G','A',','   }; 
  char buff[7]={ 
    '0','0','0','0','0','0','0'       }; 
  char time[9]={ 
    '0','0','0','0','0','0','0','0','0'    };
  double t=0.0; 
  
  while(1) 
  { 
    rec_init();     
    while(Wire.available())    
    {  
      if(!flag) 
      {  
        buff[i] = WireRead(); 
        if(buff[i]==value[i]) 
        { 
          i++; 
          if(i==7) 
          { 
            i=0; 
            flag=1; 
          } 
        } 
        else
          i=0; 
      } 
      else
      { 
        time[i] = WireRead(); 
        i++; 
        if(i==9) 
        { 
          t=Datatransfer(time,2);
          t=t+80000.00;
          Serial.println(t);
          Wire.endTransmission(); 
          return; 
        } 
      } 
    } 
    Wire.endTransmission();  
  } 
} 
void rec_data(char *buff,char num1,char num2)
{                                            //*buff???????????num1??????num2?????? 
  char i=0,count=0; 
  
  if(ID()) 
  { 
    while(1) 
    { 
      rec_init();     
      while(Wire.available())    
      {  
        buff[i] = WireRead(); 
        if(count!=num1) 
        {   
          if(buff[i]==',') 
            count++; 
        } 
        else
        { 
          i++; 
          if(i==num2) 
          { 
            Wire.endTransmission(); 
            return; 
          } 
        } 
      } 
      Wire.endTransmission(); 
    } 
  } 
} 
void latitude(){ 
  char lat[10]={ 
    '0','0','0','0','0','0','0','0','0','0' };
  rec_data(lat,1 ,10);
  Serial.println(Datatransfer(lat,5),5);
} 
void lat_dir(){
  char dir[1]={'0'};
  rec_data(dir,2,1);
  printlnByte(dir[0]);
} 
void  longitude(){ 
  char lon[11]={ 
    '0','0','0','0','0','0','0','0','0','0','0' }; 
  rec_data(lon,3,11);
  Serial.println(Datatransfer(lon,5),5);
} 
void lon_dir(){ 
  char dir[1]={'0'}; 
  rec_data(dir,4,1); 
  printlnByte(dir[0]);
} 
void altitude(){ 
  char i=0,count=0; 
  char alt[8]={ 
    '0','0','0','0','0','0','0','0' }; 
  
  if(ID()) 
  { 
    while(1) 
    { 
      rec_init();     
      while(Wire.available())    
      {  
        alt[i] = WireRead(); 
        if(count!=8) 
        {   
          if(alt[i]==',') 
            count++; 
        } 
        else
        { 
          if(alt[i]==',') 
          { 
            Serial.println(Datatransfer(alt,1),1); 
            Wire.endTransmission(); 
            return; 
          } 
          else
            i++; 
        } 
      } 
      Wire.endTransmission(); 
    } 
  } 
} 
void setup() 
{ 
  Wire.begin();
  Serial.begin(9600);
  Serial.println("DFRobot DFRduino GPS Shield v1.0"); 
  Serial.println("$GPGGA statement information: "); 
} 
void loop() 
{ 
  while(1) 
  { 
    Serial.print("UTC:"); 
    UTC(); 
    Serial.print("Lat:"); 
    latitude(); 
    Serial.print("Dir:"); 
    lat_dir(); 
    Serial.print("Lon:"); 
    longitude(); 
    Serial.print("Dir:"); 
    lon_dir(); 
    Serial.print("Alt:"); 
    altitude(); 
    Serial.println(' '); 
    Serial.println(' '); 
  } 
}

A me sembra strano visto che stiamo parlando dello stesso chip.

io vedo che

Il modulo Shield GPS è di base sul modulo ricevitore NEO-6M uBlox, utilizza due pin sulla porta seriale

quello che hai comprato tu, dialoga attraverso la UART ( una porta seriale )

e nello sketch che hai messo

int GPSAddress = 0x42;//GPS I2C Address

Dialoga attraverso l' I2C.

Come dire, voglio andar per mare e mi compro una biciletta

Si hai ragione... Effettivamente non avevo letto lo sketch lo davo per funzionante visto che me lo ha spedito lo stesso venditore. Comunque la UART essendo una porta seriale dovrò usare una softwareSerial? I pin sono 10 RX e 11 TX? Per quanto riguarda i metodi invece rimangono gli stessi?

pres961:
Comunque la UART essendo una porta seriale dovrò usare una softwareSerial? I pin sono 10 RX e 11 TX?

RX e TX li decidi tu ...
... per ragioni di compatibilità con un po' tutte le schede, dove il meccanismo di pinChangeInt (usato dalla SoftwareSerial) si comporta in modo differente, è consigliabile usare RX sul 10 e TX sul 11 ... ma non è una cosa obbligatoria.

I dettagli dei pin utilizzabili li trovi nella descrizione della SoftwareSerial.

Guglielmo