Para implementar MEF en Arduino debemos estudiar un concepto clave y es el tiempo relativo.
El concepto de tiempo relativo no permite sabe cuanto tiempo a pasado desde un evento anterior a través de una sustracción.
En Arduino existen dos funciones que están relacionadas con el tiempo:
millis() que retorna el tiempo en milisegundos que el Arduino lleva encendido.micros() que retorna el tiempo en microsegundos que el Arduino lleva encendido.Estás funciones nos permiten tener encuenta retardo sin frenar la ejecución del código. Para usar el tiempo relativo necesitamos $3$ variables:
unsigned long tini; Tiempo de inicio, esta variable se actualiza cuando ocurre el inicio del evento para el cual queremos contar tiempo.unsigned long tact; Tiempo actual, esta variable se actualiza en cada ciclo de ejecución (en el loop())unsigned long trel; Diferencia de tiempo entre el tiempo actual y el tiempo de inicio, esta variable se actualiza a discresión de las necesidades del programa.💾 Código Parpadeo con tiempo relativo
// Definimos etiquetas
#define L1 2 // Etiquetamos el LED conectado al pin 2 como "L1"
// Declaramos constantes
const unsigned long TBlink = 500; // Constante para el tiempo de parpadeo de 500ms
// Declaramos variables
bool encendido = false;
unsigned long tini, tact, trel;
void setup() {
// Configuramos los pines
pinMode(L1, OUTPUT); // Definimos L1 como una salida
// Limpieza de la salida por seguridad
digitalWrite(L1, LOW); // Apagamos L1
tini = millis(); // Iniciamos la marca de tiempo
}
void loop() {
tact = millis(); // Tomamos el tiempo actual
trel = tact-tini; // Calculamos el tiempo que a pasado desde tini
if(trel > TBlink){ // Si ha pasado más tiempo que TBlink
tini = tact; // Actualizamos el tini
encendido = !encendido; // Cambiamo el estado de encendido
}
digitalWrite(L1, encendido); // Enviamos información a L1
/* 1: Declaración de libreria */ #include <SFEMP3Shield.h>
/* 2.1: Definición de ESTADOS */ #define SOFF 0
/* 2: Definición de etiquetas */ #define LEDPIN 3
/* 3: Declaración de constantes */ const unsigned int contMax = 10;
/* 4: Declaración de variables */ float temperature = 0;
/* 5: Declaración de subrutinas */ void readSensor(){
int y = analogRead(1);
temperature = 100.0*y/1023.0;
}
/* 6: Declaración de funciones */ int sum(int x, int y){
return x + y;
}
/* 7: Subrutina de configuración */ void setup(){...}
/* 8: Subrutina de ejecución inf. */ void loop(){...
/* 8.1: Se define dentro de loop
la MEF en un Switch Case */ switch(state){}
}
Hacer un MEF que mantenga un "bombillo" apagada mientras haya suficiente luz ambiente, en caso de faltar luz, el "bombillo" parpadeará con el siguiente patrón : 2 segundos encendido y 1 segundo apagado.