本帖最后由 zs1621 于 2014-2-8 15:34 编辑
参考 https://www.dfrobot.com.cn/commun ... d=631&highlight=gps 此贴后无果, 没办法 再发个帖子, 求解
代码参考
- // Product name: GPS/GPRS/GSM Module V3.0
- // # Product SKU : TEL0051
- // # Version : 0.1
-
- // # Description:
- // # The sketch for driving the gps mode via the Arduino board
-
- // # Steps:
- // # 1. Turn the S1 switch to the Prog(right side)
- // # 2. Turn the S2 switch to the Arduino side(left side)
- // # 3. Take off the GSM/GPS jumper caps from the Uart select
- // # 4. Upload the sketch to the Arduino board
- // # 5. Turn the S1 switch to the comm(left side)
- // # 6. Remove the jumpers(old version) or set the UART select switch to middle.
- // # 7. RST the board
-
- // # If you get 'inf' values, go outdoors and wait until it is connected.
- // # wiki link- http://www.dfrobot.com/wiki/index.php/GPS/GPRS/GSM_Module_V3.0_(SKU:TEL0051)
-
- double Datatransfer(char *data_buf,char num)//convert the data to the float type
- { //*data_buf:the data array
- double temp=0.0; //the number of the right of a decimal point
- unsigned char i,j;
-
- if(data_buf[0]=='-')
- {
- i=1;
- //process the data array
- while(data_buf[i]!='.')
- temp=temp*10+(data_buf[i++]-0x30);
- for(j=0;j<num;j++)
- temp=temp*10+(data_buf[++i]-0x30);
- //convert the int type to the float type
- for(j=0;j<num;j++)
- temp=temp/10;
- //convert to the negative numbe
- temp=0-temp;
- }
- else//for the positive number
- {
- 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;
- }
-
- char ID()//Match the ID commands
- {
- char i=0;
- char value[6]={
- '
-
- 我在 ID() 函数中输出了 Serial.available(), 这个值一直为0, 这个值为0能说明什么?
-
-
-
-
- ,'G','P','G','G','A' };//match the gps protocol
- char val[6]={
- '0','0','0','0','0','0' };
-
- while(1)
- {
- if(Serial.available())
- {
- val[i] = Serial.read();//get the data from the serial interface
- if(val[i]==value[i]) //Match the protocol
- {
- i++;
- if(i==6)
- {
- i=0;
- return 1;//break out after get the command
- }
- }
- else
- i=0;
- }
- }
- }
-
- void comma(char num)//get ','
- {
- char val;
- char count=0;//count the number of ','
-
- while(1)
- {
- if(Serial.available())
- {
- val = Serial.read();
- if(val==',')
- count++;
- }
- if(count==num)//if the command is right, run return
- return;
- }
-
- }
- void UTC()//get the UTC data -- the time
- {
- char i;
- char time[9]={
- '0','0','0','0','0','0','0','0','0'
- };
- double t=0.0;
-
- if( ID())//check ID
- {
- comma(1);//remove 1 ','
- //get the datas after headers
- while(1)
- {
- if(Serial.available())
- {
- time[i] = Serial.read();
- i++;
- }
- if(i==9)
- {
- i=0;
- t=Datatransfer(time,2);//convert data
- t=t+80000.00;//convert to the chinese time GMT+8 Time zone
- Serial.println(t);//Print data
- return;
- }
- }
- }
- }
- void latitude()//get latitude
- {
- char i;
- char lat[10]={
- '0','0','0','0','0','0','0','0','0','0'
- };
-
-
- if( ID())
- {
- comma(2);
- while(1)
- {
- if(Serial.available())
- {
- lat[i] = Serial.read();
- i++;
- }
- if(i==10)
- {
- i=0;
- Serial.println(Datatransfer(lat,5),5);//print latitude
- return;
- }
- }
- }
- }
- void lat_dir()//get dimensions
- {
- char i=0,val;
-
- if( ID())
- {
- comma(3);
- while(1)
- {
- if(Serial.available())
- {
- val = Serial.read();
- Serial.write(val);
- Serial.println();
- i++;
- }
- if(i==1)
- {
- i=0;
- return;
- }
- }
- }
- }
- void longitude()//get longitude
- {
- char i;
- char lon[11]={
- '0','0','0','0','0','0','0','0','0','0','0'
- };
-
- if( ID())
- {
- comma(4);
- while(1)
- {
- if(Serial.available())
- {
- lon[i] = Serial.read();
- i++;
- }
- if(i==11)
- {
- i=0;
- Serial.println(Datatransfer(lon,5),5);
- return;
- }
- }
- }
- }
- void lon_dir()//get direction data
- {
- char i=0,val;
-
- if( ID())
- {
- comma(5);
- while(1)
- {
- if(Serial.available())
- {
- val = Serial.read();
- Serial.write(val); //Serial.println(val,BYTE);
- Serial.println();
- i++;
- }
- if(i==1)
- {
- i=0;
- return;
- }
- }
- }
- }
- void altitude()//get altitude data
- {
- char i,flag=0;
- char alt[8]={
- '0','0','0','0','0','0','0','0'
- };
-
- if( ID())
- {
- comma(9);
- while(1)
- {
- if(Serial.available())
- {
- alt[i] = Serial.read();
- if(alt[i]==',')
- flag=1;
- else
- i++;
- }
- if(flag)
- {
- i=0;
- Serial.println(Datatransfer(alt,1),1);//print altitude data
- return;
- }
- }
- }
- }
- void setup()
- {
- pinMode(3,OUTPUT);//The default digital driver pins for the GSM and GPS mode
- pinMode(4,OUTPUT);
- pinMode(5,OUTPUT);
- digitalWrite(5,HIGH);
- delay(1500);
- digitalWrite(5,LOW);
-
- digitalWrite(3,LOW);//Enable GSM mode
- digitalWrite(4,HIGH);//Disable GPS mode
- delay(2000);
- Serial.begin(9600);
- delay(5000);//GPS ready
-
- Serial.println("AT");
- delay(2000);
- //turn on GPS power supply
- Serial.println("AT+CGPSPWR=1");
- delay(1000);
- //reset GPS in autonomy mode
- Serial.println("AT+CGPSRST=1");
- delay(1000);
-
- digitalWrite(4,LOW);//Enable GPS mode
- digitalWrite(3,HIGH);//Disable GSM mode
- delay(2000);
-
- 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(' ');
- }
- }
复制代码
我在 ID() 函数中输出了 Serial.available(), 这个值一直为0, 这个值为0能说明什么?
|