“ time_t ”と“ DateTime ”

オンラインで見つけた2つの異なるArduinoタイマープロジェクトを組み合わせようとして問題が発生しました。

両方のプロジェクトでDS3231RTCを使用していますが、コードではDS1307ライブラリを問題なく使用できました。

最初に取得したコードセットは次のとおりです。

#include <DS1307RTC.h> 

結合しようとした2番目のコードセットには、この「インクルード」がなく、代わりに使用されました

RTC_DS1307 RTC; 

ここにあります:

https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/understanding-the-code

初心者のコーダーとして、このライブラリを呼び出す上記の2つの方法の違いが何であるかはよくわかりません。ただし、「include」を使用する最初の方法はわかっています。RTCで現在の時刻にアクセスする場合は、2番目の方法ではなく

RTC.get(); 

を使用します。必要なもの:

RTC.now(); 

そして、この便利なコードを使用して、USBケーブルを介してRTCをコンピューター時間に同期するためのドキュメントを見つけるのは簡単でしたが:

// Notify if the RTC isn"t running if (! RTC.isrunning()) { Serial.println("RTC is NOT running"); } // Get time from RTC DateTime current = RTC.get(); DateTime compiled = DateTime(__DATE__, __TIME__); if (current.unixtime() < compiled.unixtime()) { //CHECKS AGAINST COMPUTERTIME Serial.println("RTC is older than compile time! Updating"); RTC.adjust(DateTime(__DATE__, __TIME__)); //UPDATES FROM COMPUTER IF OLD TIME IS OFF } 

「#includeDS1307RTC」を使用した簡単な代替手段は見つかりません

RTC.now()とRTCの違いを最初に考えました.get()は、単語の置換の問題でした。しかし、後で「RTC_DS1307RTC;」で初期化した後に「time_t」呼び出しを使用したい場合

 time_t timeNOW = RTC.now(); 

「「DateTime」を変換できません」というエラーが表示されます「time_t {aka long unsignedint}」への初期化」

つまり、1つのメソッドが「DateTime」を使用し、1つのメソッドが「time_t」を使用すると仮定します。しかし、これが当てはまるかどうかはわかりません。 、もしそうなら、「DateTime」値を「time_t」値に変換する方法。

この投稿を書くことには2つの目標があります。

1-誰かに説明してもらえますか「#includeDS1307RTC.h」と「RTC_DS1307RTC」の違いを教えてください。

2-「RTC_DS1307RTC;」を使い続けたいのは、RTCをコンピュータに同期するのが簡単だと思われるからです。しかし、そうすると、上記のエラーが発生します。では、誰かが「RTCnow()」呼び出しを「time_t」値に変換する方法を教えてもらえますか?または、問題はデータ型間の単なる変換よりも複雑ですか?

回答

A DateTimeは、多くのメソッドを含む完全なクラスです。time_tは符号なしの長さです。

time_tは、エポック(通常は1970年1月1日)からの秒数を格納するために使用されます

Arduino Time ライブラリはtime_tからnow()関数へ-ただし、RTCLibはDateTimeオブジェクトを返します。

ただし、DateTimeオブジェクトにはunixtime()メソッド。DateTimeオブジェクトに格納されている時間のtime_t表現を返します。

これで次のことができます。 :

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です