millis (): tudo que você precisa saber sobre a função Arduino

Arduino UNO funções millis

O Arduino tem um bom repertório de funções para trabalhar ao longo do tempo. Uma delas é millis (), uma instrução que fornece o tempo em milissegundos desde que a placa Arduino foi ligada. Pode parecer um absurdo, e que só serve para saber quando a placa foi ligada, mas a verdade é que tem muito mais aplicações práticas.

Por exemplo, pode ser usado para determinar o tempo decorrido entre dois ou mais eventos, evitar o debounce (salto) de um botão, etc. Também pode servir para mostrar o tempo de execução em etapas críticas do código, garantindo que o programa funcione em tempo real.

Função Millis ()

função millis Arduino

Como já mencionei, a função Arduino millis é usada para medir o tempo, e o faz em milissegundos (ms), daí seu nome. Em outras palavras, o valor numérico que esta função retorna quando você a inclui em seu esboço é um dado temporário expresso naquela unidade.

Você deve saber que o valor máximo desta variável é longo sem sinal, isto é, muito tempo sem sinal. Isso é importante porque, se um menor for usado, podem ocorrer problemas de lógica. Além disso, você deve saber que pode durar até 50 dias de tempo (4.320.000.000 ms), uma vez atingido esse valor irá reiniciar e reiniciar do zero.

Outra coisa que você precisa saber é que a função millis não usa parâmetros.

Outras funções temporárias do Arduino

O Arduino possui outras funções relacionadas ao tempo para você usar em seu código. Uma delas é o famoso atraso (), mas há mais:

  • delay (): É a mais usada e comum de todas as funções do Arduino. Ele também usa milissegundos como milis (). E também será do tipo unsigned long, além de não ter valor de retorno. É usado principalmente para introduzir pausas na execução de um programa, com várias aplicações.
  • delayMicroseconds (): é menos usado em sketches, neste caso ainda é longo sem sinal, sem valor de retorno, e neste caso usa microssegundos. Atualmente, um valor máximo pode ser alcançado com a precisão de 16383 e o mínimo de 3μs. Se você tiver que lidar com esperas mais longas do que isso, é recomendado usar delay ().
  • micros (): também retorna um valor numérico em microssegundos (μs) desde que a placa Arduino começou a executar o programa. Ou seja, é como millis (), mas com outra unidade. Na verdade, ele também usa o tipo longo sem sinal e também não usa parâmetros. Mas ele tem algumas diferenças adicionais, como que ele zera e começa do zero quando chega a 70 minutos. Quanto à sua resolução de 4 μs, ou seja, o valor que retorna será sempre um múltiplo de quatro (4, 8, 12, 16, ...). Lembre-se de que 1000 μs é igual a 1 ms e 1.000.000 é igual a 1 s.

Exemplos Millis () no Arduino IDE

Captura de tela do Arduino IDE

Todas são palavras, e a melhor visualização da função millis () é mostrar alguns exemplos de esboços simples no IDE do Arduino para que você possa ver alguns aplicativos e casos de uso. Então aqui estão alguns exemplos práticos...

Pode ser usado com todas as placas Arduino

1-Exemplo para explique o uso de 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
}

Meça o tempo entre duas mensagens seriais:

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

Fazer piscar um LED com 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
    }
}

Crie uma sequenciador simples para enviar texto através do monitor serial em diferentes intervalos de tempo usando 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 - ");
}

Você já sabe disso por mais informações você pode baixar o curso de programação Arduino grátis em PDF.


Seja o primeiro a comentar

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.