Diferencia entre revisiones de «millis()»

De ArduWiki
Saltar a: navegación, buscar
(Comentario)
(Ejemplo)
Línea 45: Línea 45:
  
 
== Ejemplo ==
 
== Ejemplo ==
<pre>
+
Parpadeo sin usar [[delay()]]
unsigned long hora=0;                    //Es muy importante respetar el tipo de dato
+
 
 +
<syntaxhighlight lang="c++">
 +
unsigned long hora = 0;                    //Es muy importante respetar el tipo de dato
 
void setup() {
 
void setup() {
 
   pinMode(13, OUTPUT);
 
   pinMode(13, OUTPUT);
Línea 56: Línea 58:
 
   }
 
   }
 
}
 
}
</pre>
+
</syntaxhighlight>
  
 
== Vea también ==
 
== Vea también ==

Revisión del 12:15 27 feb 2019

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