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

你已经知道了 更多资料 您可以下载 PDF的免费Arduino编程课程.


成为第一个发表评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。