オンラインで見つけた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();