Go Down

Topic: Uhrzeit NTP Client erweitern + als Class schreiben?? (Read 1 time) previous topic - next topic

Hjae85

Hallo,

ich habe es geschafft danke leute. Bin nochmal ins grübbeln gekommen mit dieser Funktion in Methode Geschichte. Bin dann auf die Idee gekommen dafür eine eigene Methode zu schreiben sprich:


Code: [Select]
const int NTP_PACKET_SIZE= 48; // NTP Zeit Stempel ist in den ersten 48 bytes der Nachricht, deshalb begrenze auf 48 bytes.

byte packetBuffer[ NTP_PACKET_SIZE]; //Zwischenspeicher der ankommende und gehende Packete zwischenspeichert

EthernetUDP Udp; // Eine UDP Instanz die uns ein Empfangspacket über UDP senden lässt
unsigned long Zeitserver::sendNTPpacket(IPAddress& address)
{
  // Setze alle Bytes im Zwischenspeicher auf  0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialisierungseinheiten die zum formen der NTP Anfrage gebraucht werden
  // (siehe die URL oben für Details des Packets )
  packetBuffer[0] = 0b11100011; // LI, Version, Mode
  packetBuffer[1] = 0; // Schicht, oder Typ der Uhr
  packetBuffer[2] = 6; // Abfrage Interval
  packetBuffer[3] = 0xEC; // gucke auf die Uhr Präzision
  // 8 bytes von 0 für die Gesamtfehlereinschätzung
  packetBuffer[12]  = 49;
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;

  // alle NTP Felder haben die Werte jetzt gegeben
  //  Du kannst ein Packet senden um den Zeitstempel zu hinterfragen     
  Udp.beginPacket(address, 123); // eine NTP anfrage an den Port 123
  Udp.write(packetBuffer,NTP_PACKET_SIZE);
  Udp.endPacket();
}


Damit funktioniert es! Danke euch leute!

Hjae85

Hallo,

nach der if Bedingung folgt noch die besagte Problem Funtkion und dannach schließe ich die Methode ab.

Kann ich das so nicht machen? Habe schon versucht die Funktion mit in die Header zu schreiben, klappt jedoch auch nicht.

Danke

Udo Klein

Meiner Meinung fragt man sowas nicht im Forum. Stattdessen nimmt man einen Editor der zu jeder Klammer das entsprechende Gegenstück anzeigen kann. Dann stellen sich solche Fragen nicht mehr lange.
Check out my experiments http://blog.blinkenlight.net

rz259

#7
Apr 16, 2012, 04:31 pm Last Edit: Apr 16, 2012, 04:34 pm by rz259 Reason: 1
Hallo,

vielleicht habe ja ich Tomaten auf den Augen, aber ich hätte jetzt vermutet, dass

Code: [Select]

 if ( Udp.parsePacket() ) // Ein Paket wurde empfangen , lies die Daten heraus
 {    
   Udp.read(packetBuffer,NTP_PACKET_SIZE); // Daten werden in den Zwischenspeicher geschrieben

   // Der Zeitstempel startet beim 40. Byte des empfangenen Pakets und ist vier Bytes groß
   // oder zwei Worte lang. Extrahiere erst die beiden Worte.

   unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
   unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);  
   //  Wandle die 4 byte (zwei Worte) in einen langen Integer
   //  Das ist die NTP Zeit(seconds seit dem 1.Januar 1900):
   unsigned long secsSince1900 = highWord << 16 | lowWord;  
   sekundenseit1900=secsSince1900;
           

   // jetzt Konvertiere die NTP Zeit in die Tageszeit
   // UnixZeit startete am 1 Jan 1970 . In Sekunden, sind das 2208988800 Sekunden:
   const unsigned long seventyYears = 2208988800UL;    
   // extrahiere 70 Jahre heraus:
   unsigned long epoch = secsSince1900 - seventyYears;  
   // Speicher Unix Zeit:
   unixtime=epoch;                              


   // Berechne die Stunde , Minute und Sekunde:
stunde=((epoch  % 86400L) / 3600); // Berechne die Stunde (86400 äquivalent sekunden am Tag)
   minute=((epoch  % 3600) / 60); // Berechne die Minute (3600 sekunden pro Stunde)
   sekunde=(epoch %60); // Berechne die Sekunde
 }


die letzte Klammer zur if-Bedingung gehört. Wo ist dann aber die Klammer zur Abschluss der Methode?
Meiner Meinung nach muss da vor sendNTPpacket noch eine geschweifte Klammer hin.

Oder hast du den Sourcecode inzwischen geändert?

Hjae85

Hallo,

habe den Code jetzt 5mal durchgeguckt finde jedoch zu jeder öffnenden geschweiften Klammer auch eine schließende, habe ich vielleicht eine an der falschen stelle? Habe mal versucht die Methode vor der unsigned long sendNTPpacket... zu schließen bekomme dann jedoch, logischer weise viele Fehler wegen fehlenden Deklarationen.


Go Up