millis (): mọi thứ bạn cần biết về hàm Arduino

Arduino UNO hàm mili

Arduino có một loạt các chức năng tốt để hoạt động theo thời gian. Một trong số đó là mili (), một hướng dẫn cung cấp cho bạn thời gian tính bằng mili giây kể từ khi bảng Arduino được bật. Điều này có vẻ vô lý và nó chỉ giúp biết được khi nào bếp được bật, nhưng sự thật là nó có nhiều ứng dụng thực tế hơn.

qua ejemplo, nó có thể được sử dụng để xác định thời gian đã trôi qua giữa hai hoặc nhiều sự kiện, tránh tình trạng nút bị xóa (thoát), v.v. Nó cũng có thể được sử dụng để hiển thị thời gian thực thi trong các giai đoạn quan trọng của mã, đảm bảo rằng chương trình hoạt động trong thời gian thực.

Hàm Millis ()

hàm mili Arduino

Như tôi đã đề cập, hàm mili Arduino được sử dụng để đo thời gian và nó làm như vậy trong mili giây (ms), do đó tên của nó. Nói cách khác, giá trị số mà hàm này trả về khi bạn đưa nó vào bản phác thảo của mình là dữ liệu tạm thời được biểu thị bằng đơn vị đó.

Bạn nên biết rằng giá trị lớn nhất của biến này là không ký lâu, tức là dài không dấu. Điều này rất quan trọng, bởi vì nếu một cái nhỏ hơn được sử dụng, các vấn đề logic có thể xảy ra. Ngoài ra, bạn nên biết rằng nó có thể kéo dài đến 50 ngày trong thời gian (4.320.000.000 ms), khi đã đạt đến giá trị đó, nó sẽ khởi động lại và bắt đầu lại từ con số không.

Một điều khác bạn phải biết là hàm mili không sử dụng các tham số.

Các chức năng Arduino tạm thời khác

Arduino có các chức năng khác liên quan đến thời gian để bạn sử dụng trong mã của mình. Một trong số đó là sự chậm trễ nổi tiếng (), nhưng có nhiều hơn:

  • sự chậm trễ(): Nó được sử dụng nhiều nhất và phổ biến nhất trong tất cả các chức năng của Arduino. Nó cũng sử dụng mili giây dưới dạng mili (). Và nó cũng sẽ thuộc loại không có dấu dài, ngoài việc không có giá trị trả về. Nó được sử dụng chủ yếu để giới thiệu các khoảng dừng trong quá trình thực thi một chương trình, với nhiều ứng dụng.
  • delayMicroseconds (): ít được sử dụng trong các bản phác thảo, trong trường hợp này, nó vẫn dài không dấu, không có giá trị trả về và trong trường hợp này, nó sử dụng micro giây. Hiện tại, giá trị tối đa có thể đạt được với độ chính xác là 16383 và nhỏ nhất là 3μs. Nếu bạn phải xử lý thời gian chờ lâu hơn, bạn nên sử dụng delay ().
  • micro (): cũng trả về một giá trị số tính bằng micro giây (μs) kể từ khi bảng Arduino bắt đầu thực thi chương trình. Đó là, nó giống như millis (), nhưng với một đơn vị khác. Trên thực tế, nó cũng sử dụng kiểu long unsigned và nó cũng không sử dụng các tham số. Nhưng nó có một số khác biệt bổ sung, chẳng hạn như nó đặt lại và bắt đầu từ 70 khi đạt đến 4 phút. Về độ phân giải của nó là 4 μs, hay nói cách khác, giá trị mà nó trả về sẽ luôn là bội số của bốn (8, 12, 16, 1000,…). Hãy nhớ rằng 1 μs bằng 1.000.000 ms và 1 bằng XNUMX s.

Ví dụ Millis () trong Arduino IDE

Ảnh chụp màn hình Arduino IDE

Đây là tất cả các từ và chế độ xem tốt nhất của hàm millis () là hiển thị một số ví dụ về các bản phác thảo Arduino IDE đơn giản để bạn có thể xem một số ứng dụng và trường hợp sử dụng. Vì vậy, đây là một số ví dụ thực tế...

Có thể được sử dụng với tất cả các bảng Arduino

1-Ví dụ cho giải thích việc sử dụng từ mili ():

unsigned long inicio, fin, transcurrido;  // Declarar las variables a usar
void setup(){
   Serial.begin(9600);  //Iniciar la comunicación serial
}
void loop(){
   inicio=millis();  //Consultar ms desde que inició la ejecución del sketch
   delay(1000);  //Espera 1 segundo
   fin=millis();  //Consultar ms fin del sketch
   transcurrido=fin-inicio;  //Calcula el tiempo desde la última lectura
   Serial.println(transcurrido);  //Muestra el resultado en el monitor serial
   delay(500);  //Esperar medio segundo
}

Đo thời gian giữa hai thông điệp nối tiếp:

unsigned long tiempo1 = 0;  //Declaramos las variables e iniciamos a 0
unsigned long tiempo2 = 0;
unsigned long diferenciaTiempo = 0;
void setup() {
  Serial.begin(9600);
  Serial.println("Envía la letra A/a por la terminal serial");
}

void loop() {
  if(Serial.available() > 0){
     char datoRecibido = Serial.read();
     if(datoRecibido == 'A' || datoRecibido == 'a'){
        tiempo1 = millis();
        Serial.println("Envía la letra B/b por la terminal Serial");
     }
     else if(datoRecibido == 'b' && datoRecibido == 'B'){
        tiempo2 = millis();
        diferenciaTiempo = tiempo1-tiempo2;
        Serial.print("El tiempo transcurrido entre el primer y último dato enviado es: ");
        Serial.print(diferenciaTiempo);
     }
   }
}

Làm nhấp nháy đèn LED với millis ():

int estadoLed;  //Almacena el estado del LED (Encendido o apagado)
int periodo = 100;  //Tiempo que está el LED encendido o apagado
unsigned long tiempoAnterior = 0;  //Almacena tiempo de referencia para comparar
void setup() {
    pinMode(13,OUTPUT);  //Configura el pin 13 como salida para el LED
}
void loop() {
  if(millis()-tiempoAnterior>=periodo){  //Evalúa si ha transcurrido el periodo programado
    estadoLed=!estadoLed;  //Cambia el estado del LED cada 100ms
    digitalWrite(13,estadoLed);  //Actualiza el estado del LED al actual
    tiempoAnterior=millis();  //Almacena el tiempo actual como referencia
    }
}

Tạo một trình tự đơn giản để gửi văn bản qua màn hình nối tiếp vào các khoảng thời gian khác nhau bằng cách sử dụng millis ():

#define INTERVALO_MENSAJE1 3000
#define INTERVALO_MENSAJE2 5000
#define INTERVALO_MENSAJE3 7000
#define INTERVALO_MENSAJE4 15000
 
unsigned long tiempo_1 = 0;
unsigned long tiempo_2 = 0;
unsigned long tiempo_3 = 0;
unsigned long tiempo_4 = 0;
 
void print_tiempo(unsigned long tiempo_millis);
 
void setup() {
    Serial.begin(9600);
}
 
void loop() {
    if(millis() > tiempo_1 + INTERVALO_MENSAJE1){
        tiempo_1 = millis();
        print_tiempo(tiempo_1);
        Serial.println("Soy");
    }
   
    if(millis() > tiempo_2 + INTERVALO_MENSAJE2){
        tiempo_2 = millis();
        print_tiempo(tiempo_2);
        Serial.println("Un mensaje");
    }
   
    if(millis() > tiempo_3 + INTERVALO_MENSAJE3){
        tiempo_3 = millis();
        print_tiempo(tiempo_3);
        Serial.println("De");
    }
   
    if(millis() > tiempo_4 + INTERVALO_MENSAJE4){
        tiempo_4 = millis();
        print_tiempo(tiempo_4);
        Serial.println("Esperanza");
    }
}
 
void print_tiempo(unsigned long tiempo_millis){
    Serial.print("Tiempo: ");
    Serial.print(tiempo_millis/1000);
    Serial.print("s - ");
}

Bạn đã biết điều đó cho thêm thông tin bạn có thể tải xuống khóa học lập trình Arduino miễn phí bằng PDF.


Hãy là người đầu tiên nhận xét

Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.