|
|
发表于 2014-9-24 18:45:30
|
显示全部楼层
本帖最后由 504835618 于 2014-9-24 18:47 编辑
按照上面程序下载到ARDUINO里用串口检测,怎么没UTC时间呢?GPS模块在室外,用蓝牙传输的,GPS信号用的是硬串口Serial1,监视串口是Serial
下面是修改了的代码
//#include <SoftwareSerial.h>
#include <TinyGPS.h>
//SoftwareSerial gpsSerial(5, 4);// RX, TX
TinyGPS gps;
int utc_year, C_L, GMT;
byte utc_month, utc_day, utc_hour, utc_minute, utc_second;
byte MM, DD, HH;
int YY;
float lat, lon, alt;
void setup() {
Serial.begin(9600);
//gpsSerial.begin(9600);
Serial1.begin(9600);
}
/*void loop() {
while (gpsSerial.available()) {
if (gps.encode(gpsSerial.read())) {
gps.crack_datetime(&utc_year, &utc_month, &utc_day, &utc_hour, &utc_minute, &utc_second);
gps.f_get_position(&lat, &lon);*/
void loop() {
while (Serial1.available()) {
if (gps.encode(Serial1.read())) {
gps.crack_datetime(&utc_year, &utc_month, &utc_day, &utc_hour, &utc_minute, &utc_second);
gps.f_get_position(&lat, &lon);
}
}
YY= utc_year;
MM= utc_month;
DD= utc_day;
HH= utc_hour;
if (utc_year > 0)
{
if (YY % 400 == 0 || YY % 100 != 0 && YY % 4 == 0)
{
C_L = 0;
}
else {
C_L = 1;
}
if ((int)(lon + 0.5) % 15 < 7.5)
{
GMT = (int)(lon + 0.5) / 15;
}
else
{
GMT = ((int)(lon + 0.5) / 15) + 1;
}
if ((HH + GMT) < 24)//如果与格林尼治时间处于同一天则仅加小时
{
HH += GMT;
}
else//如果已经晚于格林尼治时间1天则进行日期处理
{
HH = HH + GMT - 24;//先得出时间
if (MM == 1 || MM == 3 || MM == 5 || MM == 7 || MM == 8 || MM == 10) //大月份(12月单独处理)
{
if (DD < 31) DD++;
else
{
DD = 1;
MM ++;
}
}
else if (MM == 4 || MM == 6 || MM == 9 || MM == 11)//小月份2月单独处理)
{
if (DD < 30) DD++;
else
{
DD = 1;
MM ++;
}
}
else if (MM == 2)//处理2月份
{
if ((DD == 29) || (DD == 28 && C_L == 0)) //本来是闰年且是2月29日 或者不是闰年且是2月28日
{
DD = 1;
MM ++;
}
else DD++;
}
else if (MM == 12) //处理12月份
{
if (DD < 31) DD++;
else //跨年最后一天
{
DD = 1;
MM = 1;
YY ++;
}
}
}
}
else
{
if (HH >= GMT) HH -= GMT; //如果与格林尼治时间处于同一天则仅减小时即可
else //如果已经早于格林尼治时间1天则进行日期处理
{
HH = HH + 24 - GMT; //先得出时间
if (MM == 2 || MM == 4 || MM == 6 || MM == 8 || MM == 9 || MM == 11) //上月是大月份(1月单独处理)
{
if (DD > 1) DD--;
else
{
DD = 31;
MM --;
}
}
else if (MM == 5 || MM == 7 || MM == 10 || MM == 12)//上月是小月份2月单独处理) //上月是小月份2月单独处理)
{
if (DD > 1) DD --;
else
{
DD = 30;
MM --;
}
}
else if (MM == 3) //处理上个月是2月份
{
if ((DD == 1) && C_L == 0)//不是闰年
{
DD = 28;
MM -- ;
}
else DD--;
}
else if (MM == 1) //处理1月份
{
if (DD > 1) DD--;
else //新年第一天
{
DD = 31;
MM = 12;
YY --;
}
}
}
}
Serial.print("UTC ");
Serial.print(YY);
Serial.print("/ ");
Serial.print(MM);
Serial.print("/ ");
Serial.print(DD);
Serial.print(" ");
Serial.print(HH);
Serial.print(':');
Serial.print(utc_minute);//分
Serial.print(':');
Serial.print(utc_second);//秒
Serial.println(' ');
}
|
|