2013-02-20 35 views
0

在我的main.cpp文件中,我調用類的構造函數。在構造函數中,我從一些靜態函數中設置了這個類的變量。所有的問題都是關於從NTP服務器設置時間。構造函數和對象聲明的具體內容

作爲獲取者的靜態函數使用while循環來檢查標誌。如果未設置時間,則該標誌爲false;如果NTP服務器至少有一次響應,則該標誌爲真。如果標誌是假的,while循環必須嘗試永久獲得時間(因爲沒有理由繼續沒有時間),如果它是真的,它會返回時間。

構造函數按照我所說的通過調用getters來設置變量。

當我在main中聲明該類的對象時,程序不運行,因爲我沒有在串行打印上得到任何東西。如果我沒有注意到它的工作原理。此外,它不會像while內部的卡嗒聲一樣,因爲我在其中放置了一個序列打印,並且它也沒有出現。我給下面的代碼:

構造:

#import "DayTime.h" 
#include "NTP.h" 

DayTime::DayTime(){ 
    hour = NTP::getLCThour(); 
    minutes = NTP::getMin(); 
    seconds = NTP::getSec(); 
} 

main.cpp文件:

#include <Arduino.h> 
#include <SPI.h> 
#include "NTP.h" 
#include "DayTime.h" 
#include "DayNumber.h" 

DayTime DT; 
DayNumber DN; 

int main(void) 
{ 
    init(); 
    setup(); 
    for (;;) 
     loop(); 
    return 0; 
} 

void setup() { 
    Serial.begin(9600); 
    NTP::startEthernetAndUdp(); 
} 

void loop() { 
    NTP::getTime(); 
    // Serial.println(DT.hour); 
    // Serial.println(DT.getTimeToDec()); 
    delay(3000); 

這裏,如果我評論了名爲DT白天對象的聲明中的getTime功能工作。

的NTP.cpp部分:

1)第一吸氣劑:

int NTP::getLCThour(){ 
    while(timeNTPSet==false){ 
     Serial.print("kolaw"); 
     getTime(); 
    } 
    return lcthour; 
} 

2)標誌的上頭部中的聲明:

static bool timeNTPSet; 

這是一個公開的變量。

3)它在.cpp文件的開始定義:

bool NTP::timeNTPSet= false; 

這是在.cpp文件設置後,包括。

在那個設置標誌,以實現的功能的最後一部分:

NTP NTP::getTime(){ 

    if (testNtpServer()){ 
     timeNTPSet = true; 
     // We've received a packet, read the data from it 
     Udp.read((unsigned char*)packetBuffer, NTP_PACKET_SIZE); 

的testNTPServer功能只是試驗3-4不同NTP服務器,以便從一個來自至少獲得時間。此外,如果我如前所述評論DayTime對象的聲明,它工作正常。

我該怎麼做?

+0

什麼是錯誤? – 2013-02-20 13:40:36

+0

:)在你看到的getTime函數裏面有serial.prints。如果我不評論該聲明,我什麼也得不到。另外,如果我不這樣聲明,我在void循環中鍵入:DayTime DT = DayTime();它的工作原理。但我認爲聲明運行構造函數 – kyrpav 2013-02-20 13:47:15

回答

1

您聲明DayTime變量是一個全局變量。這意味着它的構造函數在調用函數之前調用。作爲串口,以及我猜測的網絡沒有設置,那麼它將無法工作。

您可以在DayTime類中創建一個初始化,它完成構造函數的工作,並在設置串口和網絡後調用它。

+0

確定與串口的這個概率,但在循環()我有函數gettime與DayTime類沒有任何關係。它不起作用,並提供其系列打印。此外DT對象之前調用它的構造函數,但在loop()中的串行打印,因爲你可以看到註釋沒有工作埃瑟,所以我可以讀取變量。這些設置在循環,所以在我的主。 – kyrpav 2013-02-20 13:52:13