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ả

Lập trình Arduino trên mây với Arduino Create - Sự thay thế tạm thời cho Codebender

Như chúng ta đã biết, Arduino là một board mạch lập trình giúp những người yêu thích vọc vạch điện tử có thể làm nên những dự án ý nghĩa mà không cần qua bất cứ trường lớp chuyên môn nào cả. Vậy, ngoài việc lập trình trên máy tính trước đây, liệu có cách nào giúp chúng ta lập trình Arduino trên mây được hay không? Nếu là một người theo dõi Arduino.vn thường xuyên, thì chắc hẳn bạn biết đến Codebender. Tuy nhiên, vì các lý do về kinh phí hoạt động, codebender của chúng ta sẽ không còn cho phép biên dịch code miễn phí online vào cuối tháng 11/2016 nữa. Vậy, liệu đó có phải là dấu chấm hết cho cộng đồng chúng ta khi muốn biên dịch Arduino online? Câu trả lời là không, và tôi xin giới thiệu với bạn Arduino Create, một trình biên dịch Arduino IDE online của Arduino(dot)cc được phát triển sau codebender và cũng mới đi vào hoạt động trong năm 2016.

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

Nạp firmware cho Arduino bằng Xloader - Nạp chương trình cho Arduino bằng Xloader

Trong một số trường hợp bạn chỉ có File hex không có file chương trình hay muốn nạp cho nhiều mạch ứng dụng, dùng phần mềm Arduino IDE sẽ hơi bất tiện và mất nhiều thời gian hơn. Hoặc đơn giản hơn, bạn muốn bảo vệ source code của mình khi gửi cho khách. Đó là lý do chúng ta biên dịch ra file hex và gửi file hex thay vì gửi chương trình.

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