DFRduino_GPS_Shield LEA 5H_(SKU_TEL0044) - jimaobian/DFRobotWiki GitHub Wiki
the lea-5h is a high performance stand-alone gps and galileo receiver module designed to allow easy, straightforward migration from its lea-4 predecessors. it features u-blox' kickstart weak signal acquisition technology, as well as flexible connectivity options. the lea-5h comes with built-in flash memory that enables firmware updates and the storage of specific configuration settings in a non-volatile ram. the built-in antenna supervisor supports external and active antennas, such as u-blox' ANN high performance GPS antenna.
u-blox KickStart provides accelerated startup at weak signals, and our featured SuperSense® Indoor GPS is capable of tracking and acquiring even extremely weak signals. This makes the LEA-5H suitable for solutions using small or covert antennas.
- Easy migration from LEA-4H and LEA-4P modules
- Accelerated startup at weak signals thanks to KickStart Technology
- Operating voltage: 2.7 - 3.6 V
- LEA-5H Reference design documentation available with ceramic or GeoHelix antenna, UART and USB
- 2 Hz position update rate
- Built-In Flash memory for fimware upgrades and storage of specific configuration settings
- Antenna supervisor and supply
- Antenna short and open circuit detection and protection for external antennas
- 1 UART, 1 USB and 1 DDC (I2C compliant) interface
- GALILEO-ready
- 50-channel u-blox 5 engine with over 1 million effective correlators
- Under 1 second Time-To-First-Fix for Hot and Aided Starts
- SuperSense® Indoor GPS: -160 dBm tracking sensitivity
- Supports AssistNow Online and AssistNow Offline A-GPS services; OMA SUPL compliant
- Supports SBAS (WAAS, EGNOS, MSAS, GAGAN)
- Operating temperature range: -40 to 85°C
- RoHS compliant (lead-free)
// # Editor : Lauren from DFRobot
// # Date : 22.02.2012
// # Product name: DFRduino GPS Shield-LEA-5H
// # Product SKU : TEL0044
// # Version : 1.0
// # Update the library and sketch to compatible with IDE V1.0 and earlier
// # Description:
// # The sketch for using the DFRduino GPS Shield-LEA-5H
// # Connection:
// # Directly connect the shield to the Arduino controller
// # If you'd like to drive the shield via UART interface, you may need to connect the jumpers on the board.
// #
#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]=='-')//The condition of the negative
{
i=1;
//The date in the array is converted to an integer and accumulative
while(data_buf[i]!='.')
temp=temp*10+(data_buf[i++]-0x30);
for(j=0;j<num;j++)
temp=temp*10+(data_buf[++i]-0x30);
//The date will converted integer transform into a floating point number
for(j=0;j<num;j++)
temp=temp/10;
//Converted to a negative number
temp=0-temp;
}
else//Positive case
{
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);//To send data address
Wire.endTransmission();
Wire.beginTransmission(GPSAddress);
Wire.requestFrom(GPSAddress,10);//Require 10 bytes read from the GPS device
}
char ID()//Receive the statement ID
{
char i = 0;
char value[7]={
'$','G','P','G','G','A',',' };//To receive the ID content of GPS statements
char buff[7]={
'0','0','0','0','0','0','0' };
while(1)
{
rec_init();//Receive data initialization
while(Wire.available())
{
buff[i] = WireRead();//Receive serial data
if(buff[i]==value[i])//Contrast the correct ID
{
i++;
if(i==7)
{
Wire.endTransmission();//End of receiving
return 1;//Receiving returns 1
}
}
else
i=0;
}
Wire.endTransmission();//End receiving
}
}
void UTC()//Time information
{
char i = 0,flag=0;
char value[7]={
'$','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' };//Storage time data
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);//Converts floating-point data
t=t+80000.00;//To convert time to Beijing time
Serial.println(t);//The time data output
Wire.endTransmission();
return;
}
}
}
Wire.endTransmission();
}
}
void rec_data(char *buff,char num1,char num2)//Receive data function
{ //*buff:Receive data array;num1:Number of commas ;num2:The length of the array
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()//Latitude information
{
char lat[10]={
'0','0','0','0','0','0','0','0','0','0' };//Store the latitude data
rec_data(lat,1 ,10);//Receive the latitude data
Serial.println(Datatransfer(lat,5),5);//output
}
void lat_dir()//Latitude direction information
{
char dir[1]={'0'};//Store latitude direction data
rec_data(dir,2,1);//Receive latitude direction data
printlnByte(dir[0]);//output latitude direction information
}
void longitude()//Longitude information
{
char lon[11]={
'0','0','0','0','0','0','0','0','0','0','0' };//Store longitude data
rec_data(lon,3,11);//Receive the longitude data
Serial.println(Datatransfer(lon,5),5);//out put date
}
void lon_dir()//Longitude direction information
{
char dir[1]={'0'};
rec_data(dir,4,1);
printlnByte(dir[0]);//output latitude direction information
}
void altitude()//Altitude information
{
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();//IIC Initialize
Serial.begin(9600);//set baud rate
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(' ');
}
}
Notice:When you use above code.Please unplug the jumper caps before you upload the code to Arduino.And when it has been finished, don't forget to plug it back.
shopping dfrduino gps shield for arduino (sku:tel0044) category: Product_Manual category: TEL_Series category: Modules category: shields category: source