millis():您需要了解的有關Arduino功能的所有信息

Arduino UNO 毫函數

隨著時間的流逝,Arduino具有很好的功能。 其中之一是 毫(),該指令可為您提供自Arduino開發板打開以來的時間(以毫秒為單位)。 這似乎很荒謬,它只能用來知道何時打開滾刀,但事實是它具有許多實際應用。

通過 例子,它可用於確定兩個或多個事件之間經過的時間,避免按鈕的反跳(跳動)等。 它還可以用來顯示代碼關鍵階段的執行時間,從而確保程序實時運行。

Millis()函數

millis函數Arduino

正如我已經提到的,Arduino millis函數用於測量時間,它在 毫秒(毫秒),因此得名。 換句話說,當您將其包含在草圖中時,該函數返回的數值是用該單位表示的臨時數據。

您應該知道此變量的最大值是 無符號長,也就是說,很長沒有標誌。 這很重要,因為如果使用較小的邏輯,則可能會發生邏輯問題。 此外,您應該知道它最多可以持續50天(4.320.000.000 ms),一旦達到該值,它將重新啟動並從零開始。

您必須知道的另一件事是,毫秒函數 不使用參數.

其他臨時Arduino功能

Arduino還有其他與時間相關的功能供您在代碼中使用。 其中之一是 著名的延遲(),但還有更多:

  • 延遲():它是所有Arduino功能中使用最普遍的。 它還使用毫秒作為毫秒()。 它也將是unsigned long類型,並且沒有返回值。 它主要用於在許多應用程序中引入程序執行的暫停。
  • delayMicroseconds():在草圖中使用較少,在這種情況下,它仍然是無符號的長整數,沒有返回值,並且在這種情況下,它使用的是微秒。 目前,可以以16383的精度實現最大值,而最小值為3μs。 如果您必須等待更長的等待時間,建議使用delay()。
  • 微米():自Arduino板開始執行程序以來,還返回一個以微秒(μs)為單位的數值。 也就是說,它類似於millis(),但帶有另一個單位。 實際上,它也使用unsigned long類型,也不使用參數。 但是它還有一些其他差異,例如,達到70分鐘後會重置並從零開始。 關於其4μs的分辨率,換句話說,它返回的值將始終是4的倍數(8、12、16、1000…)。 請記住,1μs等於1.000.000 ms,1等於XNUMX s。

Arduino IDE中的Millis()示例

Arduino IDE的屏幕截圖

這些都是單詞,而Millis()函數的最佳視圖是通過在Arduino IDE中顯示一些簡單草圖的示例,以便您可以看到一些應用程序和用例。 所以這是一些 實際例子...

1-示例 解釋使用 來自millis():

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
}

測量兩個串行消息之間的時間:

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);
     }
   }
}

使LED閃爍 與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
    }
}

創建一個 簡單音序器 使用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 - ");
}

你已經知道了 MAS INFORMACION 您可以下載 PDF的免費Arduino編程課程.


成為第一個發表評論

發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。