Aktuelles Datum herausfinden

Hallo erstmals

wie bekomme ich die aktuelle Uhrzeit und Datum über den Computer auf den Arduino?
Am besten im Sekundenformat

Vielen Dank im Voraus
Felix

Am einfachsten über die serielle Schnittstelle. Dein Sketch muss halt nur auf der Schnittstelle lauschen und Du musst Dir ein Format überlegen.
Mit Sekundenformat meinst Du vermutlich einen Timestamp im Unix-Format?
z.B. 1349344175 für Thu Oct 4 11:49:35 CEST 2012

Tschuldigung ich bin noch ein kompletter Anfänger

kannst du mir das genauer erklären wie das Funktioniert?

Z.B. So:

char input[20];
int index = 0;
unsigned long time = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  
  //schauen ob Daten vorliegen (start)
  if(Serial.available()>0) {
   //Zähl-index auf Null setzen 
   index = 0;
   char c = ' ';  
   //solange von der seriellen schnittstelle lesen bis entweder ein Newline kommt, 20 zeichen gelesen wurden
   while( c != '\n' && index < 20) {
    c = Serial.read();
    if(c == '\n') { 
        input[index] = 0; // Nullterminierung
    } else {
        input[index] = c; //Zeichen speichern 
    }
    index++;    // Index um 1 erhöhen
   }
   
   time = long(input); // Umwandeln in eine Zahl
   
   // Zusätzlich enthält der C-String input nun den Timestamp als Zeichenfolge.
  }
}

Wenn Du im seriellen Monitor einen Unix Timestamp eingibst und mit "Enter" abschickst, sollte der Sketch diesen als long int Zahl (time) und als C-String (input) erkennen.
Dieses einfach Beispiel fängt natürlich keine Fehler wie falsche Zeichen o.ä. ab. Aber es geht ja ums Prinzip.

Hallo Felix,
ich kenne zwar nicht deine Gedankengänge, aber denke auch daran, dass dein Arduinoboard nicht immer am PC hängt. So ist es auf jedem Fall besser, wenn du über einen Uhrenbaustein, DCF77-Modul oder ein Ethernet-Shield mit Internetzugang damit einbeziehst.
Gruß Gerd

Wie genau kann der ATMega die Uhrzeit denn selber weiterzählen, wenn er einmal das richtige Datum hatte?
Auf 1 sec/ Monat genau? Ist doch schliesslich quarzgesteuert :slight_smile:

der ATmega kaum, Wir reden hier von einer RTC.
Grüße Uwe

ich mache das immer so:

  	Serial.println("**************************");
  	Serial.println("*  Kucky Bot 3 ver 0.9 *");
  	Serial.print("*  ");Serial.print(__DATE__);Serial.print(" ");Serial.print(__TIME__);Serial.println("  *");
  	Serial.println("**************************");

direkt im setup, oder meintest Du was anderes?

Gruß Kucky

Dein

Serial.print(__DATE__);Serial.print(" ");Serial.print(__TIME__)

Liefert den Zeitpunkt zu dem Dein Sketch compiliert wurde. Das hat nichts mit der aktuellen Zeit zu tun. Woher soll denn Dein Arduino die Zeit wissen, wenn er ausgeschaltet wurde und nun plötzlich wieder läuft.
In den Code-Zeilen wird durch den Compiler (genauer durch den Präprozessor) das "DATE" und das "TIME" durch einen String mit dem entsprechendne Inhalt ersetzt.
Hier gibt es eine schöne Liste, welche Werte man noch verwenden kann:
http://www.rn-wissen.de/index.php/Avr-gcc/Interna#Builtin_Defines

o_lampe:
Ist doch schliesslich quarzgesteuert :slight_smile:

Ja, aber der Quarz schwingt in einer sehr unschönen Frequenz. Wer einmal versucht hat hardwarenah eine eigene Zeitbasis aus der Systemclock abzuleiten, weiß wie unangenehm dies ist.
Es wäre interessant zu wissen wofür du die Zeit brauchst, bzw. wie dein Projekt aussieht. Im Prinzip kannst du auch einen GPS Empfänger nehmen.

GPS klappt aber auch nur, wenn der Empfänger wenigstens einen Satelliten sieht. In geschlossenen Räumen ist das nicht immer gegeben.

Letzteres hängt aber auch vom verwendeten Empfänger ab. Deswegen ja auch die Frage nach der zukünftigen Anwendung des Boards.

der Quarz schwingt in einer sehr unschönen Frequenz

An sich ist 16 MHz eine schöne Zahl :wink:
Ist nur leider nicht so genau, wie man sich das bei einem Quarz vorstellt.

Mein UNO R3 liefert bei Zimmertemperatur und Versorgung durch USB 5V ca. 998 - 999 millis() / sec, oder eine Abweichung von etwa 1 Minute / Tag.
Das ist zwar wohl so stabil, dass man eine individuelle Kompensation bauen könnte, aber schlimmer noch ist, dass die Zeit mit jedem Reset komplett weg ist.

--> RTC liefert am einfachsten/sichersten/schnellsten die aktuelle Zeit nach Restart.

GPS , DCF77 oder Ethernet NTP wären meiner Meinung nach eher zusätzliche Zeitquellen, um nie mehr manuell die Zeit stellen zu müssen.

Aber die Original-Frage "wie bekomme ich die aktuelle Uhrzeit und Datum über den Computer auf den Arduino?"
ist schon am besten durch die erste Antwort (Serial) gelöst, wenn der Arduino immer am PC hängt. ( Leider haben wir, glaub ich, den OP schon lang vergrault )

Fast überall hast Du UKW-Radio Empfang. Kauf Dir einen Empfänger mit RDS der gibt auch die Zeit und das Datum aus.
Grüße Uwe

Sorry, habe ich wohl falsch verstanden

Ist nur leider nicht so genau, wie man sich das bei einem Quarz vorstellt.

Mein UNO R3 liefert bei Zimmertemperatur und Versorgung durch USB 5V ca. 998 - 999 millis() / sec, oder eine Abweichung von etwa 1 Minute / Tag.

Der UNO R3 hat auch keinen Quartz (für den ATmega328p zumindest nicht), sondern einen Keramikresonator, dessen Lauf-Ungenauigkeit im Promille-Bereich liegt, was Deine Abweichung durchaus erklären würde. Arduinos mit echten Quarzen sollten Abweichung von nur wenigen ppm (part per million) haben, pro Monat also höchsten ca. 10-15 Sekunden abweichen.