millis()

De ArduWiki
Revisión del 16:15 27 feb 2019 de Kike GL (Discusión | contribuciones) (Ejemplo)

Saltar a: navegación, buscar

Descripción

Devuelve el número de milisegundos desde que la placa Arduino empezó a ejecutar el programa actual. Este número se desbordará (volverá a cero), después de aproximadamente 50 días.

Sintaxis

millis();

Parámetros

Nada.

Retornos

Número de milisegundos desde que el programa se inició. Numero tipo unsigned long.

Comentario

Se puede resetear el temporisador de millis() ?

extern volatile unsigned long timer0_millis;
unsigned long nuevo_valor = 0;

void setup(){
  //Algo
}

void loop(){
  //Algo
  //--------

  //Change Millis
  setMillis(nuevo_valor);
}

void setMillis(unsigned long nuevo_valor){
  uint8_t oldSREG = SREG;
  cli();
  timer0_millis = nuevo_valor;
  SREG = oldSREG;
}

Advertencias

  • Tenga en cuenta el tipo de valor que retorno millis() es unsigned long y pueden producirse errores lógicos si hacer operaciones aritméticas con otros tipos de datos más pequeños como: byte o int, incluso los long con signo pueden producir errores de calculo.
  • millis() funciona mediante una interrupción (la misma de micros()); por lo tanto, su valor dejará de incrementar durante una rutina de servicio de interrupción (ej.: posterior a attachInterrupt()), o mientras no se llame a interrupts() después de llamar a noInterrupts().

Ejemplo

Parpadeo sin usar delay()

unsigned long hora = 0;                     //Es muy importante respetar el tipo de dato
void setup() {
   pinMode(13, OUTPUT);
}
void loop() {
   if (milis() - hora >= 500){
      hora = millis();                     //Guarda a hora de cada cambio
      digitalWrite(13, !digitalRead(13));  //Invierte valor del pin
   }
}

Vea también

Referencias