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ả

iNut platform là gì?

Nhắc tới dòng mạch iNut dùng để lập trình, cái đầu tiên mà người ta thường nói tới chính là dòng iNut Cảm biến – một trong các mạch cho việc lập trình IoT. Hiện dòng mạch này đã phát triển tới thế hệ thứ 2 (iNut Sensor R2). Bạn sẽ bắt đầu đến với nền tảng iNut Platform thông qua mạch này. Bạn có thể dùng firmware iNut cảm biến cũng được nhưng bạn nên dùng bo mạch iNut Sensor R2 vì nó rất gọn và tương thức với Arduino Uno và Arduino Mega.

lên
4 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 

Cách đọc dữ liệu từ quang trở và xây dựng cảm biến ánh sáng

Quang trở là một loại "vật liệu" điện tử rất hay gặp và được sử dụng trong những mạch cảm biến ánh sáng. Có thể hiểu một cách dễ dàng rằng, quang trở là một loại ĐIỆN TRỞ có điện trở thay đổi theo cường độ ánh sáng. Nếu đặt ở môi trường có ít ánh sáng, có bóng râm hoặc tối thì điện trở của quang trở sẽ tăng cao còn nếu đặt ở ngoài nắng, hoặc nơi có ánh sáng thì điện trở sẽ giảm. Qua bài viết này, ta sẽ học đươc cách xây dựng một cảm biến ánh sáng sử dụng quang trở dựa trên nguyên lý hoạt động lý thú của nó!

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