Cuando en mis programas tengo que hace uso intensivo de temporizadores, utilizo una clase (en una pestaña) , que los hace mas legibles.
Esta consta de tres funciones y una propiedad.
Funciones; Cumplido, iniciar,parar y reiniciar.
Propiedad: tiempo
Se puede colocar en una pestaña que se llama : Temporizador.h
class Temporizador { //Clase temporizador
private: //variables y funciones no disponibles para el usuario final
unsigned long tiempoAnterior;
bool contando = 0;
public: //variables y funciones disponibles para el usuario final
unsigned long tiempo; //seteo del temporizador
//-----------------
Temporizador() { //constructor
}
//-----------------
bool cumplido() { //comprueba si paso el tiempo
if ((millis() - tiempoAnterior >= tiempo) && contando == 1 ) {
return true; //Retorna true si paso el tiempo
} else {
return false;//Retorna False no si paso el tiempo
}
}
//-----------------
bool iniciar() {
if (contando == 0) { //solo inicia si no estamos contando en ese momento
tiempoAnterior = millis();
contando = 1;//levantamos la bandera que estamos contando
}
}
//-----------------
void reiniciar() { //resetea el contador
contando = 0; //dejamos de contar
iniciar() ;//Llamamos a la funcion iniciar
}
void parar() { //resetea el contador
contando = 0; //dejamos de contar
}
};
De esta manera se pueden crear temporizadores fácilmente con poco código, por ejemplo se puede reescribir el ejemplo Blink como
#include "Temporizador.h" //incluimos el archivo que tenemos en la otra pestaña
Temporizador T1; //creamos los temporizadores
Temporizador T2;
const int ledPin = LED_BUILTIN;// El numero donde se encuentra el led
void setup() {
pinMode(ledPin, OUTPUT); //Seteamos el pin como salida
T1.tiempo = 1000; //tiempo en milisegundos que esta apagado el Led
T2.tiempo = 100; //tiempo en milisegundos que esta encendido el Led
}
void loop() {
T1.iniciar(); //iniciamos el temporizador uno
if (T1.cumplido()) { //Cuando se cumple el tiempo uno
digitalWrite(ledPin, HIGH); //encendemos el led
T2.iniciar() ;//iniciamos el temporizador dos, que nos dara el tiempo que et encendido el led
}
if (T2.cumplido()) { //Cuando se cumple el tiempo dos (led encendido)
digitalWrite(ledPin, LOW); //Apagamos el led
T1.parar(); //paramos los temporizadores
T2.parar(); //paramos los temporizadores
}
}
El código completo (sin pestañas)
class Temporizador { //Clase temporizador
private: //variables y funciones no disponibles para el usuario final
unsigned long tiempoAnterior;
bool contando = 0;
public: //variables y funciones disponibles para el usuario final
unsigned long tiempo; //seteo del temporizador
//-----------------
Temporizador() { //constructor
}
//-----------------
bool cumplido() { //comprueba si paso el tiempo
if ((millis() - tiempoAnterior >= tiempo) && contando == 1 ) {
return true; //Retorna true si paso el tiempo
} else {
return false;//Retorna False no si paso el tiempo
}
}
//-----------------
bool iniciar() {
if (contando == 0) { //solo inicia si no estamos contando en ese momento
tiempoAnterior = millis();
contando = 1;//levantamos la bandera que estamos contando
}
}
//-----------------
void reiniciar() { //resetea el contador
contando = 0; //dejamos de contar
iniciar() ;//Llamamos a la funcion iniciar
}
void parar() { //resetea el contador
contando = 0; //dejamos de contar
}
};
Temporizador T1; //creamos los temporizadores
Temporizador T2;
const int ledPin = LED_BUILTIN;// El numero donde se encuentra el led
void setup() {
pinMode(ledPin, OUTPUT); //Seteamos el pin como salida
T1.tiempo = 1000; //tiempo en milisegundos que esta apagado el Led
T2.tiempo = 100; //tiempo en milisegundos que esta encendido el Led
}
void loop() {
T1.iniciar(); //iniciamos el temporizador uno
if (T1.cumplido()) { //Cuando se cumple el tiempo uno
digitalWrite(ledPin, HIGH); //encendemos el led
T2.iniciar() ;//iniciamos el temporizador dos, que nos dara el tiempo que et encendido el led
}
if (T2.cumplido()) { //Cuando se cumple el tiempo dos (led encendido)
digitalWrite(ledPin, LOW); //Apagamos el led
T1.parar(); //paramos los temporizadores
T2.parar(); //paramos los temporizadores
}
}