Bài 14/31-1: Hàm Arduino Millis (không delay) và hàm map | SunFounder Robojax
Hướng dẫn này giới thiệu hàm millis() của Arduino, một công cụ cơ bản cho các dự án dựa trên thời gian yêu cầu thực thi mã không chặn. Không giống như delay(), làm dừng toàn bộ chương trình, millis() theo dõi thời gian đã trôi qua kể từ khi bo mạch khởi động, cho phép Arduino của bạn đa nhiệm hiệu quả. Bạn có thể sử dụng kỹ thuật này để xây dựng:
- Đèn LED nhấp nháy không chặn chạy trong khi mã khác thực thi.
- Các sự kiện hẹn giờ được kích hoạt bởi cảm biến hoặc nút nhấn, chẳng hạn như đèn tắt 5 giây sau khi nhấn nút.
- Hệ thống ghi dữ liệu đơn giản ghi lại giá trị cảm biến theo khoảng thời gian đều đặn.
- Hệ thống giao diện người dùng phản hồi đầu vào mà không bị đóng băng.
Hiểu về hàm millis()
Hàm millis() là một lệnh Arduino tích hợp trả về số mili giây kể từ khi bo mạch Arduino bắt đầu chạy chương trình hiện tại. Nó bắt đầu từ số không khi bật nguồn và tăng lên mỗi mili giây. Bạn có thể gọi hàm này tại bất kỳ điểm nào trong mã của mình để lấy giá trị "thời gian hoạt động" hiện tại. Ví dụ: sau 1 giây, nó trả về 1000; sau 5 giây, nó trả về 5000. Ưu điểm chính là nó không tạm dừng mã của bạn, vì vậy bạn có thể kiểm tra thời gian trong khi các tác vụ khác tiếp tục chạy.
Tại sao nên tránh delay()?
Hàm delay() là một cách đơn giản để tạm dừng chương trình, nhưng nó là một hàm chặn. Khi bạn gọi delay(5000), Arduino ngừng thực thi tất cả mã khác trong 5 giây, làm đóng băng mọi thành phần được kết nối. Điều này gây vấn đề cho các dự án cần phản hồi đầu vào hoặc cập nhật đầu ra liên tục. Sử dụng millis() cho phép bạn kiểm tra xem một khoảng thời gian nhất định đã trôi qua hay chưa mà không dừng phần còn lại của chương trình, làm cho nó trở nên lý tưởng cho việc đa nhiệm.
Phần cứng cần thiết
- Bo mạch Arduino (Uno, Mega, v.v.)
- Cáp USB để lập trình và cấp nguồn
Hướng dẫn đấu dây
Ví dụ này không yêu cầu đấu dây bên ngoài. Arduino chỉ cần được kết nối với máy tính của bạn qua USB để tải mã lên và xem đầu ra màn hình nối tiếp.
Giải thích mã
Ví dụ đầu tiên này là một minh họa đơn giản về cách millis() hoạt động. Mã khởi tạo màn hình nối tiếp và in giá trị của millis() trong một vòng lặp vô hạn.
void setup() {
Serial.begin(9600);//khởi tạo màn hình nối tiếp
Serial.println("Giới thiệu về millis");
delay(2000);
}
void loop() {
Serial.println(millis());
}
Hàm setup() bắt đầu truyền thông nối tiếp ở tốc độ 9600 baud và in một thông điệp chào mừng. delay(2000) ở đây chỉ để minh họa cho thấy rằng millis() bắt đầu đếm từ thời điểm chương trình chạy. Hàm loop() liên tục in giá trị hiện tại của millis(). Khi bạn mở Màn hình nối tiếp, bạn sẽ thấy thời gian tính bằng mili giây tăng lên nhanh chóng. Điều này minh họa rằng millis() là một bộ đếm không bao giờ dừng, cung cấp một tham chiếu thời gian liên tục cho chương trình của bạn.
Đây là khối xây dựng cơ bản. Trong video, giảng viên trình bày cách sử dụng giá trị này để kích hoạt các hành động sau một khoảng thời gian đã đặt, như kiểm tra xem 5000 mili giây (5 giây) đã trôi qua chưa trước khi thực thi một khối mã cụ thể. Điều này được thực hiện bằng cách lưu giá trị millis() hiện tại vào một biến và sau đó so sánh nó trong vòng lặp chính.
Điều khiển đèn LED với giá trị phần trăm bằng hàm map() được trình bày trong Bài 14/31-4: Ví dụ 1 về mã Arduino map().
Trình diễn dự án trực tiếp
Trong video, giảng viên tải mã này lên và mở Màn hình nối tiếp. Bạn có thể thấy đầu ra bắt đầu sau độ trễ ban đầu 2 giây, hiển thị giá trị gần 1999. Các con số sau đó tăng lên nhanh chóng, minh họa việc đếm liên tục mili giây. Chế độ xem trực tiếp này xác nhận rằng hàm đang hoạt động và cung cấp sự hiểu biết trực quan rõ ràng về cách thời gian được theo dõi.
Các dự án liên quan từ video này
- Bài 14/31-2: Ví dụ 2 về mã Arduino millis() với sự kiện
- Bài 14/31-3: Ví dụ 3 về mã Arduino millis() với nút nhấn
- Bài 14/31-4: Ví dụ 1 về mã Arduino map()
- Bài 14/31-5: Ví dụ 2 về mã Arduino map()
Các chương
- [00:00] Giới thiệu về millis()
- [01:19] millis() là gì và tại sao sử dụng nó
- [03:06] Trình diễn thực tế về millis()
- [05:46] Sử dụng millis() để kích hoạt một sự kiện hẹn giờ
- [08:29] Ví dụ với nút nhấn
- [12:14] Ví dụ nâng cao về hẹn giờ với nút nhấn
- [17:20] Giới thiệu về hàm map()
- [19:47] Ví dụ mã cho map() với đèn LED
- [22:41] Tạo hàm map tùy chỉnh
/*
Lesson 14/31: Arduino coding millis() example 1
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/*
* Example-1 of using millis() with Arduino
* Written by Ahmad Shamshiri on July 27, 2019
* in Ajax, Ontario, Canada
* Watch video instructio for millis() :https://youtu.be/u2HsiTS8niQ
*/
void setup() {
Serial.begin(9600);//initialize serial monitor
Serial.println("Introduction to millis");
delay(2000);
}
void loop() {
Serial.println(millis());
}// loop end
Common Course Links
Common Course Files
Nghĩ bạn có thể cần
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Tài nguyên & tài liệu tham khảo
-
Tài liệuDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
Bên ngoàiPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Tập tin📁
Thư viện Arduino (tệp nén)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB