Mục lục:

Lập biểu đồ / ghi nhật ký ngày / giờ trong Arduino sử dụng Millis () và PfodApp: 11 bước
Lập biểu đồ / ghi nhật ký ngày / giờ trong Arduino sử dụng Millis () và PfodApp: 11 bước

Video: Lập biểu đồ / ghi nhật ký ngày / giờ trong Arduino sử dụng Millis () và PfodApp: 11 bước

Video: Lập biểu đồ / ghi nhật ký ngày / giờ trong Arduino sử dụng Millis () và PfodApp: 11 bước
Video: [Lập Trình Arduino] Bài 13: Millis 2024, Tháng mười một
Anonim
Lập biểu đồ / ghi nhật ký ngày / giờ Arduino sử dụng Millis () và PfodApp
Lập biểu đồ / ghi nhật ký ngày / giờ Arduino sử dụng Millis () và PfodApp

Không cần lập trình Arduino hoặc Android. Các mô-đun RTC và GPS cũng được hỗ trợ. Tự động sửa múi giờ, độ trôi RTC và giây nhảy thiếu GPS

Giới thiệu

Hướng dẫn này chỉ cho bạn cách sử dụng dấu thời gian Arduino millis () để vẽ dữ liệu theo ngày và giờ trên thiết bị di động Android của bạn bằng pfodApp.

Không cần lập trình Arduino hoặc Android. pfodApp cũng ghi lại đầy đủ dữ liệu để sau này bạn có thể tái tạo các lô ngày / giờ trong bảng tính.

KHÔNG cần mô-đun RTC hoặc GPS, tuy nhiên, nếu dự án Arduino của bạn có RTC (Đồng hồ thời gian thực) hoặc mô-đun GPS thì chúng cũng có thể được sử dụng. Trong những trường hợp đó, các biểu đồ pfodApp sẽ tự động sửa cho múi giờ, độ lệch RTC và giây nhuận thiếu GPS. Không có mã Arduino đặc biệt nào được yêu cầu cho những chỉnh sửa này. Như mọi khi với pfodApp, dữ liệu nhận được được ghi lại chính xác như cũ, chưa được sửa chữa, tuy nhiên, tệp nhật ký cũng chứa đầy đủ thông tin để cho phép bạn tự áp dụng các chỉnh sửa này khi tải nhật ký xuống máy tính của mình. Xem bên dưới để biết ví dụ về quá trình xử lý sau này.

Nhiều định dạng trục X ngày và giờ được hỗ trợ, tất cả đều được kiểm soát hoàn toàn bằng các chuỗi văn bản ngắn trong bản phác thảo Arduino của bạn. Không cần lập trình Android.

pfodApp sẽ kết nối qua WiFi, Bluetooth Classic, BLE và SMS. PfodDesigner miễn phí tạo ra các bản phác thảo Arduino hoàn chỉnh để lập biểu đồ / ghi nhật ký ngày / giờ để kết nối với nhiều loại bo mạch. Không cần lập trình Arduino.

Hướng dẫn này sẽ sử dụng Adafruit Feather52 làm bảng Arduino mẫu, kết nối qua BLE.

Hướng dẫn này bao gồm ba trường hợp: - 1) Dự án bộ vi xử lý của bạn chỉ có dấu thời gian mili giây - millis () 2) Dự án bộ vi xử lý của bạn có Đồng hồ thời gian thực (RTC) - pfodApp tự động sửa lỗi trôi. 3) Dự án bộ vi xử lý của bạn có mô-đun GPS - pfodApp tự động sửa trong giây nhuận khi chúng xảy ra (hiện tại là 18 giây vào năm 2018).

Bước 1: Sử dụng Arduino Millisecond Timestamps, Millis ()

Có hai phần để sử dụng mili giây cho ngày và giờ. Một là để vẽ dữ liệu dựa trên thời gian hoặc ngày / giờ đã trôi qua và phần khác là tạo lại ngày và giờ từ các dấu thời gian mili giây rawdata đã ghi. pfodApp không sửa đổi dữ liệu thô nhận được từ pfodDevice (vi Arduino). Nó chỉ ghi lại chính xác số byte nhận được.

Trước tiên, hãy sử dụng pfodDesigner miễn phí để tạo một bản phác thảo Arduino cho vi mô của bạn. Bản phác thảo này sẽ gửi mili giây và các phép đo dữ liệu đến pfodApp để vẽ biểu đồ / ghi nhật ký. Ví dụ này tạo một menu cho bảng Adafruit Feather 52 BLE đọc A0. Hướng dẫn về Adafruit Feather nRF52 LE - Điều khiển tùy chỉnh với pfodApp đi qua các bước pfodDesigner để tạo menu cho Feather nRF52 bao gồm nút Biểu đồ, vì vậy hãy xem để biết thêm chi tiết. Trong hướng dẫn này, chúng tôi sẽ chỉ thêm một nút biểu đồ và sử dụng các tùy chọn định dạng trục X mới để vẽ biểu đồ đọc A0 dựa trên thời gian và ngày / giờ đã trôi qua.

Phần đầu tiên của hướng dẫn này sẽ sử dụng pfodDesigner miễn phí để tạo biểu đồ ngày / giờ mẫu trên thiết bị di động Android của bạn. Khi bạn hài lòng với màn hình, bạn có thể tạo bản phác thảo Arduino sẽ tái tạo điều đó khi bạn kết nối với pfodApp. Không cần lập trình Android và vì pfodDesigner tạo ra các bản phác thảo Arduino hoàn chỉnh cho nhiều loại bảng Arduino, nên cũng không cần lập trình Arduino.

Bước 2: Thêm biểu đồ vào menu

Thêm biểu đồ vào menu
Thêm biểu đồ vào menu
Thêm biểu đồ vào menu
Thêm biểu đồ vào menu
Thêm biểu đồ vào menu
Thêm biểu đồ vào menu
Thêm biểu đồ vào menu
Thêm biểu đồ vào menu

Tải xuống ứng dụng pfodDesigner từ Google Play, mở ứng dụng và nhấp vào “Bắt đầu trình đơn mới”

Nhấp vào “Target Serial” và sau đó vào nút “Bluetooth Low Energy” để hiển thị danh sách một số bảng BLE (cuộn xuống để xem các lựa chọn khác). Chọn trên Adafruit Bluefruit Feather52.

Quay lại menu Chỉnh sửa và nhấp vào “Lời nhắc Chỉnh sửa” và đặt lời nhắc phù hợp cho menu này, ví dụ: “Feather52” và chữ in đậm và kích thước +7. Màu nền được để là 'mặc định' Trắng

Quay lại và nhấp vào “Thêm mục menu”, cuộn xuống và chọn “Nút biểu đồ” để mở màn hình chỉnh sửa nút biểu đồ. Bạn có thể thực hiện bất kỳ thay đổi nào đối với giao diện của nút tại đây. Trong trường hợp này, văn bản của nút được thay đổi thành “Biểu đồ ngày / giờ của A0” và các giá trị mặc định khác được giữ nguyên.

Thao tác này cung cấp cho bạn một nút trên menu sẽ mở màn hình biểu đồ.

Bước 3: Chỉnh sửa nguồn và bảng lô đất

Chỉnh sửa nguồn và bảng lô đất
Chỉnh sửa nguồn và bảng lô đất
Chỉnh sửa nguồn và bảng lô đất
Chỉnh sửa nguồn và bảng lô đất
Chỉnh sửa nguồn và bảng lô đất
Chỉnh sửa nguồn và bảng lô đất
Chỉnh sửa nguồn và bảng lô đất
Chỉnh sửa nguồn và bảng lô đất

Nhấp vào nút “Ngày / Giờ của ô A0” để mở màn hình Chỉnh sửa Lô, nơi bạn có thể truy cập nhãn biểu đồ, định dạng trục X, khoảng dữ liệu của ô và (bằng cách cuộn xuống) chính các cài đặt của ô. Chỉnh sửa Nhãn biểu đồ thành thứ gì đó phù hợp, ví dụ: “A0 Volts”.

Cuộn xuống và đối với Ô 2 và 3, hãy mở Chỉnh sửa Ô và nhấp vào Ẩn Ô để xóa chúng khỏi màn hình biểu đồ.

Sau đó nhấp vào “Chỉnh sửa lô 1” và đặt nhãn lô (ví dụ: A0), đơn vị yAxis (ví dụ: Volts), hiển thị tối đa 3,6V và kết nối với chân I / O A0.

Cuộn trở lại và nhấp vào “Xem trước biểu đồ” đến 0 điểm dữ liệu mẫu gần đây nhất, với khoảng thời gian 1 giây, được vẽ theo thời gian đã trôi qua tính bằng phút: giây.

Đối với tất cả các ô thời gian đã trôi qua, các đơn vị số 0 phía trước không được hiển thị nên trong biểu đồ này chỉ những thời gian> 1 phút mới hiển thị số phút hàng đầu.

Bước 4: Chọn Định dạng Ngày / Giờ

Chọn định dạng ngày / giờ
Chọn định dạng ngày / giờ
Chọn định dạng ngày / giờ
Chọn định dạng ngày / giờ
Chọn định dạng ngày / giờ
Chọn định dạng ngày / giờ

Đối với các biểu đồ thời gian đã trôi qua, đơn vị hàng đầu sẽ tiếp tục tăng khi thời gian trôi qua. Để xem ví dụ về điều này, hãy quay lại màn hình “Chỉnh sửa lô” và tăng khoảng thời gian Dữ liệu lô lên 15 phút (cuối màn hình này)

Sau đó nhấp vào Xem trước biểu đồ để hiển thị cùng một dữ liệu mẫu nhưng bây giờ với khoảng cách 15 phút giữa các mẫu. Như bạn có thể thấy phần phút của mm: ss tiếp tục tăng.

Bây giờ quay lại và nhấp vào nút trục X để hiển thị một lựa chọn nhỏ của tất cả các định dạng thời gian / dữ liệu trục X có thể có (cuộn xuống để biết thêm)

Trên đây là lựa chọn các bản xem trước biểu đồ sử dụng các định dạng trục X khác nhau.

Các lô ngày / giờ được hiển thị ở đây theo múi giờ 'địa phương'. Ngoài ra còn có các tùy chọn định dạng để vẽ ngày / giờ theo UTC. Để có tập hợp đầy đủ các tùy chọn định dạng ngày / giờ khả thi, hãy xem pfodSpecification.pfd.

Bước 5: Tạo và kiểm tra bản phác thảo Arduino

Tạo và kiểm tra bản phác thảo Arduino
Tạo và kiểm tra bản phác thảo Arduino
Tạo và kiểm tra bản phác thảo Arduino
Tạo và kiểm tra bản phác thảo Arduino

Khi bạn hài lòng với định dạng và khoảng dữ liệu của biểu đồ, bạn có thể chuyển đến màn hình “Trình đơn chỉnh sửa_1” và cuộn xuống và “Tạo mã” cho bảng mục tiêu mà bạn đã chọn. Đây là bản phác thảo mẫu cho Adafruit Feather52 sử dụng khoảng dữ liệu 1 giây và định dạng thời gian đã trôi qua mm: ss, pfodFeather52_timeplot.ino

Trên đây là âm mưu của A0 từ Feather52

Thay đổi định dạng thành Giờ trong tuần: phút: giây (~ E HH: mm: ss) và tạo lại mã (pfodFeather52_dateplot.ino) sẽ tạo ra một âm mưu như thứ hai ở trên.

Bạn có thể chỉnh sửa định dạng trục X trực tiếp trong bản phác thảo Arduino của mình, như được mô tả tiếp theo.

Bước 6: PfodApp vẽ ngày / giờ từ Millis () như thế nào?

Khi pfodApp kết nối, nó ghi nhớ thời gian 'cục bộ' và UTC của nó và yêu cầu dấu thời gian dữ liệu cốt truyện hiện tại của pfodDevice (bảng Arduino). Bằng cách sử dụng thông tin này, pfodApp có thể vẽ biểu đồ thời gian mili giây dưới dạng thời gian đã trôi qua, tức là chuyển đổi mili giây thành giờ phút giây, v.v. hoặc vẽ biểu đồ ngày và giờ mà dấu thời gian mili giây thể hiện liên quan đến thời điểm kết nối được thực hiện và thời gian hiện tại của pfodDevice được yêu cầu.

Nhìn trong bản phác thảo do Arduino tạo (ví dụ: pfodFeather52_dateplot.ino), có ba bit mã nhỏ xử lý phía Arduino của các ô.

Phần mã loop () xử lý yêu cầu thời gian hiện tại {@} của pfodApp

// xử lý {@} request} else if ('@' == cmd) {// pfodApp đã yêu cầu thời gian 'hiện tại' plot_mSOffset = millis (); // nắm bắt mili hiện tại dưới dạng dấu thời gian dữ liệu thô bù đắp parser.print (F ("{@` 0} ")); // trả về 0 dưới dạng dữ liệu thô 'hiện tại' mili giây

Bạn chỉ có thể trả về giá trị hiện tại của millis (), nhưng millis () lại quay về 0 sau mỗi 49,7 ngày, điều này sẽ làm cho cốt truyện nhảy ngược lại. Vì vậy, thay vào đó, mã ghi nhớ giá trị millis () hiện tại khi {@} yêu cầu được thực hiện và trả về {@ `0} tức là dấu thời gian mili giây hiện tại bằng 0. Sau đó, khi gửi các điểm rawdata, bản phác thảo sẽ sử dụng

plot_1_var = analogRead (A0); // đọc dữ liệu đầu vào cho âm mưu // âm mưu plot_2_var Ẩn nên không có dữ liệu nào được gán ở đây // âm mưu plot_3_var Ẩn nên không có dữ liệu nào được gán ở đây // gửi dữ liệu âm mưu ở định dạng CSV parser.print (millis () - plot_mSOffset); // thời gian tính bằng mili giây ….

để dấu thời gian mili giây được gửi cùng với dữ liệu bắt đầu từ 0 và tăng lên đến 49,7 ngày. Nếu bạn duy trì kết nối liên tục trong 49,7 ngày thì bạn sẽ thấy cốt truyện nhảy ngược lại ~ 50 ngày. Việc ngắt kết nối và kết nối lại sau 49,7 ngày một lần sẽ tránh được điều này.

Phần thứ ba của cốt truyện ngày / giờ là thông điệp cốt truyện.

} else if ('A' == cmd) {// người dùng đã nhấn - 'Biểu đồ ngày / giờ của A0' // trong Menu chính của Menu_1 // trả về tin nhắn biểu đồ. parser.print (F ("{= A0 Volts ~ E HH: mm: ss | date | A0 ~~~ Volts ||}"));

Khi người dùng nhấn vào nút “Biểu đồ ngày / giờ của A0”, pfodApp sẽ gửi {A} cmd tới pfodDevice và pfodDevice phản hồi bằng thông báo cốt truyện, {=… {= A0 Volts ~ E HH: mm: ss | date | A0 ~~~ Volts ||} chứa định dạng trục X E HH: mm: ss

Các định dạng Java SimpleDateFormat được chấp nhận ở đây. pfodApp Ghi dữ liệu và Lập sơ đồ và pfodSpecification.pdf có thêm chi tiết về thông điệp cốt truyện.

Bước 7: Sao chép lại các ô ngày / giờ trên máy tính của bạn

Sao chép các ô ngày / giờ trên máy tính của bạn
Sao chép các ô ngày / giờ trên máy tính của bạn
Sao chép các ô ngày / giờ trên máy tính của bạn
Sao chép các ô ngày / giờ trên máy tính của bạn
Sao chép các ô ngày / giờ trên máy tính của bạn
Sao chép các ô ngày / giờ trên máy tính của bạn

Theo mặc định, pfodApp ghi tất cả dữ liệu thô đến vào một tệp nhật ký trên thiết bị di động của bạn, trừ khi bạn đã tắt tính năng đăng nhập này trong màn hình chỉnh sửa kết nối, hãy xem pfodAppForAndroidGettingStarted.pdf

Khi bạn chỉnh sửa pfodApp, một thông báo ngắn gọn hiển thị với vị trí và tên của tệp nhật ký, ví dụ: /pfodAppRawData/pfod_bluefruit52.txt Tệp đó ở định dạng CSV, được phân tách bằng dấu phẩy và sau khi chuyển nó vào máy tính của bạn (xem pfodAppForAndroidGettingStarted.pdf để biết các tùy chọn chuyển), bạn có thể mở nó trong bảng tính để vẽ dữ liệu.

Đây là vài dòng đầu tiên của tệp nhật ký.

// pfodApp V3.0.360, giờ địa phương, UTC, mS mỗi ngày, pfod bluefruit52 giờ hiện tại (mS), pfod bluefruit52 giờ hiện tại, // được kết nối lúc, 2019/04/20 11:32: 50.238, 2019/04/20 01: 32: 50.238, 86400000, 0, 366, 0,25,, 1366, 0,29,, 2366, 0,31,, 3366, 0,33,, 4366, 0,33,

Ở trên, bạn có thể thấy thời gian 'cục bộ' và UTC mà pfodApp đã kết nối với Feather52 và thời gian hiện tại trong mS mà Feather52 đã báo cáo qua phản hồi {@..}. Cột cuối cùng để trống, vì không có RTC hoặc GPS và do đó, Feather52 không báo cáo thời gian hiện tại theo thời gian yyyy / MM / dd.

Để vẽ dữ liệu theo thời gian đã trôi qua, hãy lấy dấu thời gian mili giây trừ đi thời gian hiện tại (mS) rồi chia cho giá trị mS mỗi ngày. Đây là bảng tính với công thức được thêm vào và kết quả được vẽ. Bảng tính, bên dưới, (pfod_bluefruit52.xls) là một bảng tính OpenOffice được lưu ở định dạng Excel.

Trong OpenOffice, biểu đồ là biểu đồ phân tán và trục x của biểu đồ được định dạng theo HH: MM: SS Lưu ý: các định dạng ngày / giờ của bảng tính KHÔNG giống với các định dạng biểu đồ được pfodApp sử dụng. Ví dụ trong pfodApp, MM là tháng và mm là phút.

Để vẽ biểu đồ theo ngày và giờ, bạn chỉ cần thêm thời gian kết nối vào thời gian của bảng tính và vẽ lại. (pfod_bluefruit52_date.xls)

Lưu ý: Giờ địa phương và UTC đã được nhập dưới dạng văn bản trong bảng tính của tôi, vì vậy tôi cần loại bỏ 'hàng đầu' trước khi sử dụng chúng trong một công thức.

Bước 8: Làm thế nào để tránh giới hạn 49,7 triệu ngày () và tại sao bạn không nên

Như đã đề cập ở trên trong Cách pfodApp vẽ Ngày / Giờ từ millis () ?, nếu bạn vẫn kết nối liên tục trong hơn 49,7 ngày thì dấu thời gian mili giây sẽ quay trở lại 0. Một vài dòng mã có thể tránh được điều này nhưng nó không được khuyến khích.

Đầu tiên làm thế nào để tránh bị quấn quanh. Thêm một biến int không dấu khác để theo dõi số lần dấu thời gian quấn quanh và in kết quả kết hợp trong HEX.

uint_t mSwrapCount = 0; uint32_t lastTimeStamp = 0;

… Plot_1_var = analogRead (A0); // đọc đầu vào cho âm mưu // âm mưu plot_2_var Ẩn nên không có dữ liệu nào được gán ở đây // âm mưu plot_3_var Ẩn nên không có dữ liệu nào được gán ở đây // gửi dữ liệu âm mưu ở định dạng CSV uint32_t timeStamp = millis () - plot_mSOffset; if (timeStamp <lastTimeStamp) {// timeStamp được đưa về 0 mSwrapCount ++; // thêm một vào đếm} lastTimeStamp = timeStamp; parser.print ("0x"); parser.print (msWrapCount, HEX); parser.print (timeStamp, HEX); // thời gian tính bằng mili giây trong HEX….

Khi trả về phản hồi {@.., hãy xóa cả mSwrapCount.

// xử lý {@} request} else if ('@' == cmd) {// pfodApp đã yêu cầu thời gian 'hiện tại' plot_mSOffset = millis (); // nắm bắt mili hiện tại dưới dạng dấu thời gian dữ liệu thô bù đắp mSwrapCount = 0; // xóa số bọc. parser.print (F ("{@` 0} ")); // trả về 0 dưới dạng dữ liệu thô 'hiện tại' mili giây

Dấu thời gian bây giờ sẽ cung cấp giá trị 'đúng' cho 40,7 ngày tiếp theo * 65536 ~ = 7308 năm.

pfodApp sẽ tự động chuyển đổi các dấu thời gian hex để vẽ và ghi lại chúng chính xác như đã nhận, tức là ở dạng hex. Trong bảng tính (OpenOffice), bạn sử dụng công thức này để chuyển đổi chuỗi hex, trong A2, thành mS (trong đó A1 là bất kỳ ô trống nào) = HEX2DEC (REPLACE (A2; 1; 2; A1))

Tại sao bạn không muốn làm điều này

Như được hiển thị ở trên, có thể dễ dàng mở rộng dấu thời gian mS lên lâu hơn 50 ngày. Tuy nhiên, bạn có thể không muốn làm điều đó vì chúng ngày càng chính xác. Một tinh thể 16Mhz điển hình được sử dụng để tạo ra kết quả mili () trong vi mô có độ chính xác ~ 50ppm (phần triệu). Điều này có nghĩa là sau 49,7 ngày, dấu thời gian mili giây có thể dài ra 3 ½ phút và điều đó bỏ qua ảnh hưởng của nhiệt độ lên độ chính xác của tinh thể.

Trong khoảng thời gian kết nối ngắn, độ chính xác này không phải là vấn đề vì phản hồi {@.. đồng bộ hóa lại dấu thời gian mili giây với ngày / giờ của thiết bị di động trên mỗi lần kết nối lại. Tuy nhiên, nếu bạn muốn duy trì kết nối trong thời gian dài (ngày) và liên tục ghi dữ liệu, thì bạn nên sử dụng thứ gì đó chính xác hơn mili () tích hợp sẵn, chẳng hạn như mô-đun RTC hoặc GPS.

Bước 9: Sử dụng RTC (Đồng hồ thời gian thực)

Sử dụng RTC (Đồng hồ thời gian thực)
Sử dụng RTC (Đồng hồ thời gian thực)
Sử dụng RTC (Đồng hồ thời gian thực)
Sử dụng RTC (Đồng hồ thời gian thực)

Có một số mô-đun RTC có sẵn, một trong những mô-đun chính xác hơn là DS3231, ví dụ: Mô-đun DS3231 của Adafruit. Độ chính xác đã nêu là +/- 2ppm trên 0 đến 40C. tức là ~ +/- 5 giây / tháng.

Nếu bạn muốn vẽ biểu đồ dữ liệu có dấu thời gian ngày / giờ, ví dụ: 2019/04/19 20: 4: 34, sau đó bạn cần sửa đổi {@ response để trả về ngày / giờ hiện tại, ví dụ: {@ `0 ~ 2019/4/19 3: 33: 5}. Dưới đây là một số thay đổi mã mẫu để áp dụng cho bản phác thảo do pfodDesigner tạo để sử dụng mô-đun RTC, giả sử bạn đang sử dụng thư viện RTClib và đã thêm mã khởi tạo mô-đun RTC.

// xử lý {@} request} else if ('@' == cmd) {// pfodApp đã yêu cầu thời gian 'hiện tại' plot_mSOffset = millis (); // nắm bắt mili hiện tại dưới dạng dấu thời gian dữ liệu thô bù đắp parser.print (F ("{@` 0 "}); // trả về` 0 dưới dạng dữ liệu thô 'hiện tại' mili giây parser.print ('~'); // chuỗi bắt đầu của date / time DateTime now = rtc.now () sendDateTime (& now); // gửi yyyy / M / d / H: m: s tới parser.print, chuyển địa chỉ & as arg. parser.print ('}'); // kết thúc của {@ phản hồi, ví dụ: {@ `0 ~ 2019/4/19 3: 33: 5}….

// gửi ngày giờ đến trình phân tích cú pháp printvoid sendDateTime (DateTime * dt) {parser.print (dt-> year (), DEC); parser.print ('/'); parser.print (dt-> month (), DEC); parser.print ('/'); parser.print (dt-> day (), DEC); parser.print (''); parser.print (dt-> giờ (), DEC); parser.print (':'); parser.print (dt-> phút (), DEC); parser.print (':'); parser.print (dt-> second (), DEC); }

void sendData () {if (plotDataTimer.isFinishing ()) {plotDataTimer.repeat (); // khởi động lại bộ đếm thời gian dữ liệu biểu đồ, không trôi // gán giá trị cho các biến biểu đồ từ các biến vòng lặp của bạn hoặc đọc đầu vào ADC plot_1_var = analogRead (A0); // đọc đầu vào cho âm mưu // âm mưu plot_2_var Bị ẩn nên không có dữ liệu nào được gán ở đây // âm mưu plot_3_var Ẩn nên không có dữ liệu nào được gán ở đây // gửi dữ liệu âm mưu ở định dạng CSV DateTime now = rtc.now (); sendDateTime (& now); // gửi yyyy / M / d / H: m: s tới parser.print, truyền địa chỉ & as arg. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // Ô 2 bị ẩn. Không có dữ liệu nào được gửi. parser.print (','); // Ô số 3 bị ẩn. Không có dữ liệu nào được gửi. parser.println (); // kết thúc bản ghi dữ liệu CSV}}

Phần ~ 2019/4/19 3: 33: 5 của phản hồi {@ cho phép pfodApp biết pfodDevice nghĩ là ngày và giờ hiện tại. Sau đó, bản phác thảo của bạn có thể gửi dữ liệu với dấu thời gian yMd Hms và pfodApp sẽ vẽ chúng theo thời gian đã trôi qua kể từ thời điểm kết nối HOẶC dưới dạng ngày và giờ, tùy thuộc vào định dạng trục X mà bạn chỉ định.

Khi lập biểu đồ theo ngày và giờ, quy trình biểu đồ của pfodApp sẽ sửa mọi 'độ lệch' trong RTC bằng cách so sánh thời gian hiện tại được báo cáo của pfodDevice với thời gian hiện tại của thiết bị di động. Việc chỉnh sửa này cũng xử lý việc RTC được đặt thành múi giờ khác với múi giờ địa phương trên điện thoại di động của bạn. Dấu thời gian millis () tiếp tục hoạt động như trong Sử dụng dấu thời gian mili giây của Arduino, Bước 5 ở trên.

Đây là một bảng tính ví dụ về nhiệt độ phòng trong khoảng thời gian 8 ngày, Office_Temp.xls Khi tệp nhật ký được nhập, cột đầu tiên được đánh dấu là YMD để chuyển đổi văn bản thành ngày / giờ. Bạn vẫn cần xóa biểu mẫu hàng đầu 'các mục nhập thời gian hiện tại theo giờ địa phương, UTC và Office Temp để bảng tính diễn giải chúng thành ngày và giờ.

Để có được cùng một âm mưu mà pfodApp hiển thị, bạn cần phải tính toán "Ngày / giờ đã sửa". Trong trường hợp này, thời gian RTC chậm hơn 2 giây so với giờ địa phương của thiết bị di động, do đó, vào mỗi dấu thời gian RTC được thêm vào (giờ địa phương - Office Temp hiện tại) để có được giờ địa phương thực.

Đối với các biểu đồ thời gian đã trôi qua, hãy tạo một cột mới có chứa (dấu thời gian ngày / giờ - thời gian hiện tại của Giờ Văn phòng) và sử dụng nó làm trục X trong biểu đồ (Office_TempElapsed.xls) Trên thực tế, trong trường hợp này, pfodApp tạo ra các biểu đồ thời gian đã trôi qua đẹp hơn trong ngày giờ: phút: giây.

Bước 10: Sử dụng Mô-đun GPS

Sử dụng mô-đun GPS tương tự như sử dụng mô-đun RTC, ngoại trừ mô-đun GPS có sẵn mili giây, năm bắt đầu từ 2000 và thời gian thiếu giây nhuận UTC (xem https://tycho.usno.navy.mil/leapsec.html) Ngày và giờ GPS hiện trước UTC 18 giây, kể từ tháng 1 năm 2018.

Thư viện Adafruit GPS dành cho Adafruit Ultimate GPS, không giống như RTClib, không thêm chênh lệch 2000 năm vào năm GPS, vì vậy cần phải thêm vào khi bạn gửi dấu thời gian ngày và giờ. Ngoài ra, mặc dù thư viện GPS cung cấp mili giây có độ chính xác lâu dài rất tốt, nhưng chúng không chính xác lắm. Cập nhật thời gian GPS chỉ một lần mỗi 100mS và sau đó có thêm độ trễ khi nhận dữ liệu nối tiếp ở tốc độ 9600 baud chậm và một độ trễ khác trong quá trình phân tích cú pháp. Tất cả đều tăng thêm độ chính xác đến từng mili giây khi ghi dấu thời gian đọc dữ liệu.

Dưới đây là một số thay đổi mã mẫu để áp dụng cho bản phác thảo do pfodDesigner tạo để sử dụng mô-đun GPS, giả sử bạn đang sử dụng thư viện GPS của Adafruit và đã thêm mã để nhận và phân tích cú pháp tin nhắn thành một đối tượng GPS.

// xử lý {@} request} else if ('@' == cmd) {// pfodApp đã yêu cầu thời gian 'hiện tại' plot_mSOffset = millis (); // nắm bắt mili hiện tại dưới dạng dấu thời gian dữ liệu thô bù đắp parser.print (F ("{@` 0 "}); // trả về` 0 dưới dạng dữ liệu thô 'hiện tại' mili giây parser.print ('~'); // chuỗi bắt đầu của date / time sendDateTime (& GPS); // gửi yyyy / M / d / H: m: s tới parser.print, chuyển địa chỉ & as arg. parser.print ('}'); // end of {@ response ví dụ: {@ `0 ~ 2019/4/19 3: 33: 5}….

// gửi ngày giờ đến trình phân tích cú pháp printvoid sendDateTime (Adafruit_GPS * gps) {parser.print (F ("20"); // 20.. year parser.print (gps-> year, DEC); parser.print ('/ '); parser.print (gps-> month, DEC); parser.print (' / '); parser.print (gps-> day, DEC); parser.print (' '); parser.print (gps- > giờ, DEC); parser.print (':'); parser.print (gps-> phút, DEC); parser.print (':'); parser.print (gps-> giây, DEC); // parser.print ('.'); nếu gửi mili giây // nếu bạn muốn gửi mS, bạn cần đệm giá trị gps-> mili giây bằng các số 0 ở đầu // tức là 3 cần được đệm thành 003}

void sendData () {if (plotDataTimer.isFinishing ()) {plotDataTimer.repeat (); // khởi động lại bộ đếm thời gian dữ liệu biểu đồ, không trôi // gán giá trị cho các biến biểu đồ từ các biến vòng lặp của bạn hoặc đọc đầu vào ADC plot_1_var = analogRead (A0); // đọc đầu vào cho âm mưu // âm mưu plot_2_var Ẩn nên không có dữ liệu nào được gán ở đây // âm mưu plot_3_var Ẩn nên không có dữ liệu nào được gán ở đây // gửi dữ liệu âm mưu ở định dạng CSV sendDateTime (& GPS); // gửi yyyy / M / d / H: m: s tới parser.print, truyền địa chỉ & as arg. parser.print (','); parser.print (((float) (plot_1_var - plot_1_varMin)) * plot_1_scaling + plot_1_varDisplayMin); parser.print (','); // Ô 2 bị ẩn. Không có dữ liệu nào được gửi. parser.print (','); // Ô số 3 bị ẩn. Không có dữ liệu nào được gửi. parser.println (); // kết thúc bản ghi dữ liệu CSV}}

Khi lập biểu đồ so với ngày và giờ, pfodApp sẽ tự động sửa theo giây nhuận. Vào tháng 1 năm 2018, thời gian GPS đi trước UTC 18 giây. pfodApp khắc phục điều này bằng cách so sánh ngày / giờ do GPS trả về khi kết nối, thông qua {@ response, với ngày và giờ UTC của thiết bị di động. Tạo các ô trong bảng tính từ tệp nhật ký pfodApp cũng giống như đối với các mô-đun RTC ở trên. Việc thêm (giờ địa phương - thời gian hiện tại của Office Temp) vào dấu thời gian GPS sẽ sửa cho các giây nhuận.

Dấu thời gian millis () tiếp tục hoạt động như trong Sử dụng dấu thời gian mili giây của Arduino, Bước 5 ở trên.

Bước 11: Kết luận

Sử dụng pfodApp trên thiết bị di động Android cho phép bạn vẽ biểu đồ dữ liệu theo ngày và giờ hoặc thời gian đã trôi qua, chỉ sử dụng hàm millis () của Arduino. Sử dụng tệp nhật ký pfodApp, bạn có thể tạo lại các biểu đồ ngày / giờ này trong bảng tính. Nếu dự án Arduino của bạn có mô-đun RTC, bạn có thể ghi nhật ký và vẽ ngày tháng cũng như dấu thời gian thời gian RTC, tự động sửa lỗi RTC 'trôi dạt'. Nếu dự án Arduino của bạn có mô-đun GPS, bạn có thể ghi lại và vẽ các dấu thời gian chính xác cao của nó và pfodApp sẽ tự động sửa các giây nhuận bị thiếu của GPS.

Trong mọi trường hợp, dữ liệu thô từ dự án Arduino của bạn được ghi lại chính xác như đã nhận, chưa được sửa. Tuy nhiên, tệp nhật ký pfodApp bao gồm dữ liệu bổ sung để cho phép bạn tạo lại các chỉnh sửa này trong bảng tính từ tệp nhật ký đã tải xuống.

Không cần mã hóa Android. Tất cả các định dạng cốt truyện đều được chỉ định bởi các chuỗi văn bản nhỏ trong bản phác thảo Arduino của bạn. PfodDesigner miễn phí tạo ra các bản phác thảo và ghi dữ liệu Arduino hoàn chỉnh cho nhiều loại bảng Arduino kết nối qua WiFi, Bluetooth cổ điển, BLE và SMS

Đề xuất: