“ time_t ” 및 “ DateTime ”

온라인에서 찾은 두 개의 서로 다른 Arduino 타이머 프로젝트를 결합하는 데 문제가 발생했습니다.

두 프로젝트 모두 DS3231 RTC를 사용하고 있지만 내 코드에서는 DS1307 라이브러리를 잘 사용할 수있었습니다.

내가 선택한 첫 번째 코드 세트는 다음과 같습니다.

#include <DS1307RTC.h> 

결합하려는 두 번째 코드 세트에는이 “포함”이 없지만 대신 사용되었습니다.

RTC_DS1307 RTC; 

여기에 있음 :

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

초보 코더로서이 라이브러리를 호출하는 위의 두 가지 방법의 차이점이 무엇인지 잘 모르겠습니다. 하지만 RTC에서 현재 시간에 액세스하려면 두 번째 방법과는 반대로

RTC.get(); 

사용하는 “include”를 사용하는 첫 번째 방법을 알고 있습니다. 여기에는 다음이 필요합니다.

RTC.now(); 

또한 다음 코드를 사용하여 USB 케이블을 통해 RTC를 컴퓨터 시간에 동기화하는 문서를 쉽게 찾을 수있었습니다.

p>

// 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 } 

“# include DS1307RTC”를 사용하여 쉬운 대안을 찾을 수 없습니다.

처음에는 RTC.now ()와 RTC의 차이점을 생각했습니다. .get ()은 단어 대체의 문제였습니다. 그러나 나중에 “RTC_DS1307 RTC;”로 초기화 한 후 “time_t”호출을 사용하고 싶을 때 “DateTime을 변환 할 수 없습니다.”라는 오류가 발생합니다.

 time_t timeNOW = RTC.now(); 

to “time_t {aka long unsigned int}”in initialize “

그래서 한 메서드는”DateTime “을 사용하고 한 메서드는”time_t “를 사용한다고 가정합니다. 그러나 이것이 사실인지 확실하지 않습니다. , 그렇다면 “DateTime”값을 “time_t”값으로 변환하는 방법.

이 게시물을 작성하는 데 두 가지 목표가 있습니다.

1- 누군가에게 설명해 주시겠습니까? “#include DS1307RTC.h”와 “RTC_DS1307 RTC”의 차이점 그리고 그것이 내 코드에 미치는 영향.

2- “”RTC_DS1307 RTC; “를 계속 사용하고 싶습니다. 내 RTC를 내 컴퓨터에 동기화하는 것이 쉬워 보이기 때문입니다. 그러나 그렇게하면 위의 오류가 발생합니다. 누군가 “RTC now ()”호출을 “time_t”값으로 변환하는 방법을 알려주시겠습니까? 아니면 단순한 데이터 유형 간의 변환보다 문제가 더 복잡합니까?

답변

A DateTime는 많은 메소드가있는 전체 클래스입니다. time_t는 부호없는 long입니다.

time_t epoch (일반적으로 01/01/1970) 이후의 시간 (초)을 저장하는 데 사용됩니다.

Arduino Time 라이브러리는 time_tnow() 함수로-그러나 RTCLib는 DateTime 객체를 반환합니다.

DateTime 객체는 unixtime() 메서드는 DateTime 개체에 저장된 시간의 time_t 표현을 반환합니다.

그래서 할 수 있습니다. :

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

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다