millis()

Giới thiệu

millis() có nhiệm vụ trả về một số - là thời gian (tính theo mili giây) kể từ lúc mạch Arduino bắt đầu chương trình của bạn. Nó sẽ tràn số và quay số 0 (sau đó tiếp tục tăng) sau 50 ngày.

Tham số

không

Trả về

một số nguyên kiểu unsigned long là thời gian kể từ lúc thương trình Arduino được khởi động

Ví dụ

unsigned long time;

void setup(){
  Serial.begin(9600);
}
void loop(){
  Serial.print("Time: ");
  time = millis();
  // in ra thời gian kể từ lúc chương trình được bắt đầu 
  Serial.println(time);
  // đợi 1 giây trước khi tiếp tục in
  delay(1000);
}

Lưu ý quan trọng:

Các hàm về thời gian trong Arduino gồm millis() và micros() sẽ bị tràn số sau 1 thời gian sử dụng. Với hàm millis() là khoảng 50 ngày. Tuy nhiên, do là kiểu số nguyên không âm (unsigned long) nên ta dễ dàng khắc phục điều này bằng cách sử dụng hình thức ép kiểu.

unsigned long time;
byte ledPin = 10;
void setup()
{
    // khởi tạo giá trị biến time là giá trị hiện tại
    // của hàm millis();
    time = millis();
    pinMode(ledPin, OUTPUT);
    digitalWrite(ledPin, LOW);
}

void loop() 
{
    // Lưu ý các dấu ngoặc khi ép kiểu
    // đoạn chương trình này có nghĩa là sau mỗi 1000 mili giây
    // đèn Led ở chân số 10 sẽ thay đổi trạng thái
    if ( (unsigned long) (millis() - time) > 1000)
    {
    
        // Thay đổi trạng thái đèn led
        if (digitalRead(ledPin) == LOW)
        {
            digitalWrite(ledPin, HIGH);
        } else {
            digitalWrite(ledPin, LOW);
        }
        
        // cập nhật lại biến time
        time = millis();
    }
}

Thông thường, nếu ta có 2 số A, B và B lớn hơn A ( B > A) thì phép trừ thu được A-B là một số âm. Nhưng khi ép kiểu unsigned long là kiểu số nguyên dương, không có số âm nên giá trị trả về là 1 số nguyên dương lớn.

Ví dụ: kết quả của phép trừ:

unsigned long ex = (unsigned long) (0 - 1); 

là 4294967295, con số này chính là giá trị lớn nhất của kiểu số unsigned long. Giống như bạn đạp xe 1 vòng và quay về vạch xuất phát vậy.

Reference Tags: 
lên
18 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Tự làm khung xe mica - dễ hay khó?

Một khi đã bắt tay vào nghiên cứu Arduino, chúng ta đề chắc đều muốn làm một dự án nào đó thật "cool", phải không nào? Nhưng để làm một cái gì đó thật "cool" ngay từ lúc mới bắt đầu thì không hề dễ dàng. Nếu bạn đang muốn làm một chiếc xe điều khiển từ xa, một chiếc xe dò line (MCR),... bất kỳ dự án gì liên quan tới xe thì việc ngán nhất mà các bạn phải làm đó là chế tạo khung xe.

lên
9 thành viên đã đánh giá bài viết này hữu ích.

Cảm biến mưa với Arduino

Chúng ta có thể dễ dàng nhận biết mưa bằng mắt thường hoặc cảm nhận ở da. Với tư tưởng ấy, các hệ thống điện tử phát hiện mưa cũng chia ra làm hai loại: thứ nhất là dùng camera để nhận biết và loại thứ hai là dùng cảm biến (tương tự da của con người). Vậy Arduino có thể phát hiện mưa bằng cách nào ?

lên
15 thành viên đã đánh giá bài viết này hữu ích.