2016-03-17 40 views
0

我正在研究这个Arduino测试应用程序作为一个更大的项目的一部分。我已将Arduino连接到Grove RTC(实时时钟DS1307)模块,该模块现在将日期和时间吐出到串行监视器中。然而,一年是错误的。如下图所示,它显示年份字段中的值46。Arduino与RTC得到错误的一年

Serial monitor

下面是两种方法,我使用获取日期和时间,然后打印出来。我从tmElements结构的Year字段获取年份值。 tmElements类型驻留在时间库中。

// Gets date and time and prints out in "DD/MM/YYYY - HH:MM:SS" format. 
void getTime(){ 
    tmElements_t tm; 
    if (RTC.read(tm)){ 
    getFormattedValue(tm.Day); 
    Serial.print("/"); 
    getFormattedValue(tm.Month); 
    Serial.print("/"); 
    Serial.print(tm.Year); 
    Serial.print(" - "); 
    getFormattedValue(tm.Hour); 
    Serial.print(":"); 
    getFormattedValue(tm.Minute); 
    Serial.print(":"); 
    getFormattedValue(tm.Second); 
    Serial.println(); 
    } 
} 

// Formats the time value to two digits. Example: if hour is 7 it will be formatted as 07. 
void getFormattedValue(int number) { 
    if (number >= 0 && number < 10) { 
    Serial.write('0'); 
    } 
    Serial.print(number); 
} 

我怎么会得到这个错误的价值?有人能指导我正确的方向吗?

回答

0

啊..自己已经发现了这个问题。问题是我没有使用tmYearToCalendar()方法。

所以不是:

Serial.print(tm.Year); 

它必须是:现在

Serial.print(tmYearToCalendar(tm.Year)); 

就像一个魅力。只是想我会分享给大家。

+0

只需详细说明,tmYearToCalendar()方法只是将1970年添加到tm.Year的值。那是因为tm.Year是自1970年以来的年数。 – RonRonDK