Diferencia entre revisiones de «millis()»
De ArduWiki
(→Comentario) |
(→Ejemplo) |
||
Línea 45: | Línea 45: | ||
== Ejemplo == | == Ejemplo == | ||
− | < | + | 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: | ||
} | } | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
== Vea también == | == Vea también == |
Revisión del 16:15 27 feb 2019
Contenido
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
}
}