Time

Time Functions trong Arduino

Arduino cung cấp một số hàm để làm việc với thời gian, giúp lập trình viên thực hiện các tác vụ liên quan đến độ trễ hoặc đo thời gian. Dưới đây là các hàm thời gian cơ bản trong Arduino:

1. delay()

Mô tả:
  • Hàm delay() dùng để tạm dừng chương trình trong một khoảng thời gian nhất định (tính bằng mili giây).
  • Chương trình sẽ ngừng thực thi và không thực hiện bất kỳ tác vụ nào khác trong suốt thời gian delay.
Cú pháp:
delay(ms);
  • ms: Số mili giây (1 giây = 1000 mili giây) mà chương trình sẽ tạm dừng.
Ví dụ:
void setup() {
  Serial.begin(9600);
  Serial.println("Start");
  delay(1000);  // Delay 1 giây (1000 mili giây)
  Serial.println("End");
}

void loop() {
  // Chương trình sẽ in "Start", chờ 1 giây và sau đó in "End"
}
Chức năng:
  • Dừng chương trình trong một khoảng thời gian cố định.

2. delayMicroseconds()

Mô tả:
  • Hàm delayMicroseconds() tạm dừng chương trình trong khoảng thời gian tính bằng micro giây (1 micro giây = 1/1,000,000 giây).
  • Phù hợp khi bạn cần độ chính xác cao hơn so với delay().
Cú pháp:
delayMicroseconds(us);
  • us: Số micro giây (1 giây = 1,000,000 micro giây) mà chương trình sẽ tạm dừng.
Ví dụ:
void setup() {
  Serial.begin(9600);
  Serial.println("Start");
  delayMicroseconds(500);  // Delay 500 micro giây
  Serial.println("End");
}

void loop() {
  // Chương trình sẽ in "Start", chờ 500 micro giây và sau đó in "End"
}
Chức năng:
  • Dừng chương trình trong thời gian rất ngắn, đạt độ chính xác cao hơn delay().

3. micros()

Mô tả:
  • Hàm micros() trả về số lượng micro giây đã trôi qua từ khi Arduino bắt đầu chạy (tính từ khi board được reset).
  • Hàm này hữu ích cho việc đo lường các khoảng thời gian ngắn mà không làm tạm dừng chương trình.
Cú pháp:
unsigned long micros();
  • Trả về số lượng micro giây dưới dạng giá trị kiểu unsigned long.
Ví dụ:
void setup() {
  Serial.begin(9600);
  unsigned long startTime = micros();  // Lấy thời gian bắt đầu
  delay(1000);  // Đợi 1 giây
  unsigned long elapsedTime = micros() - startTime;  // Tính thời gian đã trôi qua
  Serial.print("Elapsed time: ");
  Serial.println(elapsedTime);  // In ra thời gian trôi qua (tính bằng micro giây)
}

void loop() {
  // In thời gian trôi qua kể từ khi chương trình bắt đầu
}
Chức năng:
  • Đo khoảng thời gian ngắn và trả về số lượng micro giây đã trôi qua.

4. millis()

Mô tả:
  • Hàm millis() trả về số lượng mili giây đã trôi qua kể từ khi chương trình bắt đầu (kể từ khi board được reset).
  • Đây là một hàm rất hữu ích khi bạn muốn theo dõi thời gian trôi qua mà không cần làm gián đoạn chương trình, đặc biệt trong các ứng dụng liên quan đến thời gian.
Cú pháp:
unsigned long millis();
  • Trả về số lượng mili giây dưới dạng giá trị kiểu unsigned long.
Ví dụ:
void setup() {
  Serial.begin(9600);
  unsigned long startTime = millis();  // Lấy thời gian bắt đầu
  delay(1000);  // Đợi 1 giây
  unsigned long elapsedTime = millis() - startTime;  // Tính thời gian đã trôi qua
  Serial.print("Elapsed time: ");
  Serial.println(elapsedTime);  // In ra thời gian trôi qua (tính bằng mili giây)
}

void loop() {
  // In thời gian trôi qua kể từ khi chương trình bắt đầu
}
Chức năng:
  • Theo dõi thời gian trôi qua từ khi chương trình bắt đầu mà không làm gián đoạn các tác vụ khác trong chương trình.

Tóm tắt và Ứng dụng

Hàm Mô tả Ví dụ sử dụng
delay() Tạm dừng chương trình trong một khoảng thời gian tính bằng mili giây. Tạm dừng 1 giây, sau đó thực thi chương trình.
delayMicroseconds() Tạm dừng chương trình trong khoảng thời gian tính bằng micro giây. Tạm dừng 500 micro giây.
micros() Trả về số micro giây đã trôi qua từ khi bắt đầu chương trình. Đo thời gian từ khi bắt đầu chương trình đến thời điểm hiện tại.
millis() Trả về số mili giây đã trôi qua từ khi bắt đầu chương trình. Đo thời gian đã trôi qua kể từ khi chương trình bắt đầu mà không gián đoạn.