Sự khác biệt giữa thời gian và thời gian trực tuyến


7

Tôi đã gặp phải một vấn đề khi cố gắng kết hợp 2 dự án hẹn giờ Arduino khác nhau mà tôi đã tìm thấy trực tuyến.

Đối với cả hai dự án tôi đang sử dụng DS3231 RTC, nhưng đã có thể sử dụng thư viện DS1307 trong mã của tôi.

Bộ mã đầu tiên tôi chọn bắt đầu bằng:

#include <DS1307RTC.h>

Bộ mã thứ hai tôi đã thử kết hợp không có 'bao gồm' này, mà thay vào đó được sử dụng

RTC_DS1307 RTC;

như được tìm thấy ở đây:

https://learn.adafbean.com/ds1307-real-time-clock-breakout-board-kit/under Hiểu-the-code

Là một lập trình viên mới làm quen, tôi không thực sự chắc chắn về sự khác biệt giữa hai cách trên để gọi thư viện này. Nhưng tôi biết cách đầu tiên sử dụng "bao gồm", nếu tôi muốn truy cập thời gian hiện tại trên RTC tôi sử dụng

RTC.get();

trái ngược với phương pháp thứ hai đòi hỏi:

RTC.now();

Và trong khi thật dễ dàng tìm thấy tài liệu để đồng bộ hóa RTC với thời gian của máy tính qua cáp USB bằng cách sử dụng đoạn mã tiện dụng này:

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

Tôi không thể tìm thấy sự thay thế dễ dàng bằng cách sử dụng "#include DS1307RTC"

Đầu tiên tôi nghĩ rằng sự khác biệt giữa RTC.now () và RTC.get () chỉ là vấn đề thay thế từ. Nhưng sau này khi tôi muốn sử dụng cuộc gọi "time_t" sau khi khởi tạo với "RTC_DS1307 RTC;"

 time_t timeNOW = RTC.now();

Tôi gặp lỗi "không thể chuyển đổi 'DateTime' thành 'time_t {aka dài không dấu int}' khi khởi tạo"

Vì vậy, tôi giả sử một phương thức sử dụng "DateTime" và một phương thức sử dụng "time_t". Nhưng tôi không chắc đây có phải là trường hợp không, và nếu vậy, làm thế nào để chuyển đổi giá trị "DateTime" thành giá trị "time_t".

Tôi có hai mục tiêu khi viết bài này.

1- Ai đó có thể vui lòng giải thích cho tôi sự khác biệt giữa "#include DS1307RTC.h" và "RTC_DS1307 RTC;" và cách nó ảnh hưởng đến mã của tôi.

2- Tôi muốn sử dụng "" RTC_DS1307 RTC; ", chỉ vì có thể dễ dàng đồng bộ hóa RTC của tôi với máy tính của tôi. Nhưng nếu tôi làm vậy, tôi gặp lỗi ở trên. một cuộc gọi "RTC now ()" tới giá trị "time_t"? Hay vấn đề phức tạp hơn chỉ là một chuyển đổi đơn thuần giữa các loại dữ liệu?

Câu trả lời:


9

A DateTimelà một lớp đầy đủ với rất nhiều phương thức cho nó - a time_tchỉ là một dấu dài.

time_tđược sử dụng để lưu trữ số giây kể từ kỷ nguyên (thường là 01/01/1970)

Thư viện Arduino Time trả về a time_tcho now()hàm - nhưng RTCLib trả về đối tượng DateTime.

Tuy nhiên, đối tượng DateTime có một unixtime()phương thức sẽ trả về một time_tđại diện cho thời gian được lưu trữ trong đối tượng DateTime.

Vì vậy, bạn có thể làm:

DateTime dt = RTC.now();
time_t time = dt.unixtime();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.