온라인에서 찾은 두 개의 서로 다른 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_t
를 now()
함수로-그러나 RTCLib는 DateTime 객체를 반환합니다.
DateTime 객체는 unixtime()
메서드는 DateTime 개체에 저장된 시간의 time_t
표현을 반환합니다.
그래서 할 수 있습니다. :
DateTime dt = RTC.now(); time_t time = dt.unixtime();