millis() devuelve el número de milisegundos desde que el PLC Arduino empezó a ejecutar el programa actual, como un unsigned long. Compara dos lecturas para medir tiempo o para ejecutar acciones a intervalos regulares sin detener el programa con delay().
Esta función es muy útil cuando quieres controlar un proceso comparando tiempos: tiempos de espera, lecturas periódicas, salidas que se encienden y se apagan, y varias tareas en el mismo loop.
La función millis()
| Sintaxis | time = millis(); |
|---|---|
| Parámetros | Ninguno |
| Retorno | unsigned long: milisegundos desde que empezó el programa |
| Desbordamiento | El valor vuelve a 0 después de unos 49,7 días (232 ms) |
El desbordamiento no es un problema si siempre comparas tiempos con una resta, millis() - start >= interval, y los guardas en variables unsigned long. La resta sin signo da el resultado correcto aunque el contador haya vuelto a 0.
Requisitos
- Un PLC Arduino de Industrial Shields, por ejemplo un M-Duino 21, un M-Duino 58 o un Ardbox Analog. Todos los modelos de la familia M-Duino sirven.
- Las placas de Industrial Shields instaladas en el Arduino IDE: cómo instalar las placas de Industrial Shields.
Ejemplo: hacer parpadear una salida digital cada segundo
Este ejemplo enciende y apaga la salida digital Q0.0 cada segundo con millis(). El loop nunca se detiene, así que el programa puede hacer otras tareas entre cambios.
unsigned long actualtime = 0;
unsigned long beforetime = 0;
unsigned long deltatime = 1000; // 1000 ms = 1 s
bool laststate = true;
void setup() {
Serial.begin(9600);
pinMode(Q0_0, OUTPUT);
}
void loop() {
// Save the current time (ms since the program started)
actualtime = millis();
// Check if one second has passed
if (actualtime - beforetime >= deltatime) {
if (laststate) {
// Digital output Q0.0 HIGH
digitalWrite(Q0_0, HIGH);
laststate = false;
}
else {
// Digital output Q0.0 LOW
digitalWrite(Q0_0, LOW);
laststate = true;
}
// Save the time of this change, in milliseconds
beforetime = actualtime;
}
}
deltatime es el intervalo en milisegundos. Cada vez que la diferencia entre el tiempo actual y beforetime llega a 1000 ms, la salida cambia de estado y beforetime guarda el momento del cambio. Q0.0 es una salida digital en los PLC M-Duino; en otro modelo, usa una salida digital de tu PLC.
El ejemplo compila para el M-Duino 21, el M-Duino 21+ y el M-Duino 58+ con el paquete de placas AVR de Industrial Shields 1.2.1.