Soru:
"Time_t" ve "DateTime" arasındaki fark
Vinterwoo
2015-11-10 07:26:12 UTC
view on stackexchange narkive permalink

Çevrimiçi bulduğum 2 farklı Arduino zamanlayıcı projesini birleştirmeye çalışırken bir sorunla karşılaştım.

Her iki proje için de bir DS3231 RTC kullanıyorum, ancak DS1307 kitaplığını kodumda gayet iyi kullanabildim.

Aldığım ilk kod seti şununla başladı:

  #include <DS1307RTC.h>  

Birleştirmeye çalıştığım ikinci kod setinde bu 'include' yoktu, bunun yerine kullanıldı

  RTC_DS1307 RTC;  

burada bulunan:

https://learn.adafruit.com/ds1307-real-time- clock-breakout-board-kit / kodu-anlama

Acemi bir kodlayıcı olarak, bu kitaplığı adlandırmak için yukarıdaki iki yol arasındaki farkın ne olduğundan emin değilim. Ancak "include" kullanmanın ilk yolunu biliyorum, RTC'de geçerli saate erişmek istersem

RTC.get(); 

aşağıdakileri gerektiren ikinci yöntemin aksine:

  RTC.now ();  

RTC'yi senkronize etmek için dokümantasyon bulmak kolay olsa da bu kullanışlı kodu kullanarak USB kablosu üzerinden bilgisayara zaman ayırın:

  // (! RTC.isrunning ()) {Serial.println ("RTC çalışmıyor"); } // RTC DateTime'dan zamanı al current = RTC.get (); Derlenen DateTime = DateTime (__ DATE__, __TIME__); if (current.unixtime () < compiled.unixtime ()) {// BİLGİSAYAR ZAMANINA KARŞI KONTROLLER Serial.println ("RTC derleme zamanından daha eski! Güncelleniyor"); RTC.adjust (DateTime (__ DATE__, __TIME__)); // ESKİ ZAMAN KAPALIYSA BİLGİSAYARDAN GÜNCELLEME} 

"#include DS1307RTC" yi kullanarak kolay bir alternatif bulamıyorum

İlk önce RTC arasındaki farkı düşündüm. now () ve RTC.get () sadece bir kelime ikamesi meselesiydi. Ancak daha sonra, "RTC_DS1307 RTC;" ile başlattıktan sonra "time_t" çağrısı kullanmak istediğimde;

  time_t timeNOW = RTC.now ();  

"Başlatma sırasında 'DateTime' öğesini 'time_t {aka long unsigned int}' olarak değiştiremiyorum" hatası alıyorum

Dolayısıyla, bir yöntemin "DateTime" ve bir yöntemin "time_t" kullandığını varsayıyorum. Ancak durumun bu olup olmadığından ve öyleyse "DateTime" değerini "time_t" değerine nasıl dönüştüreceğimden emin değilim.

Bu yazıyı yazarken iki amacım var.

1- Birisi bana "#include DS1307RTC.h" ve "RTC_DS1307 RTC" arasındaki farkı açıklayabilir mi? ve kodumu nasıl etkilediği.

2- "" RTC_DS1307 RTC "kullanmaya devam etmek istiyorum, çünkü RTC'mi bilgisayarımla senkronize etmek kolay görünüyor. Ama eğer yaparsam Yukarıdaki hatayı alın. Öyleyse birisi bana bir "RTC now ()" çağrısını "time_t" değerine nasıl dönüştürebileceğimi söyleyebilir mi? Yoksa sorun, veri türleri arasındaki dönüşümden daha karmaşık mı?

Bir cevap:
Majenko
2015-11-10 15:53:27 UTC
view on stackexchange narkive permalink

DateTime , birçok yöntemi olan tam bir sınıftır - time_t yalnızca imzasız bir uzunluktur.

time_t epoch (normalde 01/01/1970)

Arduino Time kitaplığı epoch 'dan bu yana geçen saniye sayısını saklamak için kullanılır. code> time_t now () işlevine - ancak RTCLib bir DateTime nesnesi döndürür.

DateTime nesnesinin bir unixtime () time_t gösterimini döndürecek / code> yöntemi.

Böylece şunları yapabilirsiniz:

  DateTime dt = RTC.now (); time_t zaman = dt.unixtime ();  


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...