Buenas, comparto una librería que he hecho para simplificar el uso de los timer con la función millis en Arduino.
La librería la tenia pensada como uso personal para un proyecto y simplificarme usar los millis, pero al ver, sobre todo en novatos, que no saben usar bien los temporizadores con millis y a veces lo engorroso que puede ser usarla en proyectos complejos pues me he atrevido a compartirla 
La podeis bajar desde github o desde el archivo adjunto. Viene con un ejemplo tipo blink pero con la librería.
Espero que os guste y os sea útil 
Ante cualquier optimización o si queréis alguna función mas podéis comentarla e intento añadirla 
Nota: He actualizado la librería con unos cambios que ha aportado Lucario y también he comentado el ejemplo que venia para que sea aun mas fácil entenderlo. El archivo adjunto ha sido actualizado y subido a github
PD: No me he parado a buscar alguna librería así, si existe, no conozco de su existencia y esta esta creada a gusto personal xD
MillisTimer-master.zip (2.44 KB)
Gracias. Siempre viene bien.
No la he probado aún, pero si a ti, que la has hecho, te funciona como necesitaste, te felicito.
Y gracias por el aporte!
Jopapa:
Gracias. Siempre viene bien.
Hector_A:
No la he probado aún, pero si a ti, que la has hecho, te funciona como necesitaste, te felicito.
Y gracias por el aporte!
Os animo a probarla y me comenteis que os parece y si hace falta añadir algo o si echáis de menos alguna cosa 
Un saludo desde Sevilla!!
¡Excelente librería! Hace justo lo que se explica en el ejemplo "BlinkWithoutDelay", pero simplificado

¡Muy buen trabajo!
Por otra parte, quería sugerirte unas cuantas modificaciones:
El atributo (variable global de la librería) interval debería ser de tipo unsigned long; porque si fuera de tipo int, entonces el intervalo estaría limitado a 32 segundos máximo (unsigned int solo lo extiende hasta 65 segundos). unsigned long extiende este límite hasta casi 50 días (el mismo tiempo que se tarda el contador de millis para volver a cero).
Te digo esto porque quizá, alguien utilizando tu librería, querrá un intervalo que dure varios minutos o hasta más :o
Lo mismo va para para las funciones que reciben una cantidad de tiempo:
- MillisTimer(int firstInterval);
- void setInterval(int newInterval);
Ya sabes, cambiar int por unsigned long.
Y para ir finalizando, una muy ligera optimización de código. En vez de:
boolean MillisTimer::checkTimer(){
boolean res=false;
unsigned long currentMillis=millis();
if(currentMillis - previousMillis >= interval){
res=true;
previousMillis=currentMillis;
}
return res;
}
¿Por qué no lo haces así?:
boolean MillisTimer::checkTimer(){
unsigned long currentMillis=millis();
if(currentMillis - previousMillis >= interval){
previousMillis=currentMillis;
return true;
}
return false;
}
Muy muy ligera optimización, tanto que si quieres tómalo o déjalo... :
Muchas gracias Lucario!! Ya esta la librería actualizada en github y cuando me deje editar el post principal añadiré la actualización 
En el tema de los int no se porque lo puse así, mas que nada por simplicidad y mejor conocimiento de int puede ser xD
Y la parte del boolean es costumbre, en la carrera, cuando empezamos a dar Java, los métodos que devolvían un boolean nos lo enseñaron así, nunca se me había ocurrido ponerlo así, la verdad.
Y muchas gracias por tu opinión, por tus cambios y optimizaciones! 
Un saludo!!
ToskaBNK:
En el tema de los int no se porque lo puse así, mas que nada por simplicidad y mejor conocimiento de int puede ser xD
Sí, es normal de hecho. int es el tipo de variable más usado por los novatos (ojo, no estoy diciendo que seas un novato). Ese tipo es para "uso general" así por decirlo.
Y la parte del boolean es costumbre, en la carrera, cuando empezamos a dar Java, los métodos que devolvían un boolean nos lo enseñaron así, nunca se me había ocurrido ponerlo así, la verdad.
Así es más fácil de comprender a como te lo enseñaron; sin embargo, con la práctica ya uno puede darse el lujo de "comprimir" el código sin alterar el resultado esperado.
PD: si dices que vienes de programación en Java, entonces ya tenemos algo en común 
Lo que me hace pensar que seguro creías que un int en Java era como un long en Arduino (variable de 4 bytes tratada con signo).
Personalmente, lo que siempre le he criticado a Java, es que TODOS los tipos "primitivos" siempre se tratan con signo; algo que es completamente innecesario en contextos como índice de un "array" (arreglo).