在我的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對象的聲明,它工作正常。
我該怎麼做?
什麼是錯誤? – 2013-02-20 13:40:36
:)在你看到的getTime函數裏面有serial.prints。如果我不評論該聲明,我什麼也得不到。另外,如果我不這樣聲明,我在void循環中鍵入:DayTime DT = DayTime();它的工作原理。但我認爲聲明運行構造函數 – kyrpav 2013-02-20 13:47:15