//==================================== VARIAVEIS E FUNÇÕES =================================
// ----------------------------------- variaveis do escalonador de tarefas
unsigned long ultimoTempo_leituraEntradas = 0;
unsigned long ultimoTempo_controleSaidas = 0;
unsigned long ultimoTempo_comunicacaoMQTT = 0;
unsigned long ultimoTempo_controleMemoria = 0;
int estadoMaquina = 0;
//------------------------------------
//==================================== ENTRADAS =================================
#define entradaDigital_1 12
#define entradaDigital_2 14
#define entradaDigital_3 13
//==================================== SAIDAS =================================
#define saidaDigital_1 14
#define saidaDigital_2 15
#define saidaDigital_3 18
#define saidaDigital_4 19
//==================================== SETUP =================================
void setup() {
//----------------------------------------------------- SET dos pinos de entrada
pinMode(entradaDigital_1, INPUT_PULLUP);
pinMode(entradaDigital_2,INPUT_PULLUP);
pinMode(entradaDigital_3, INPUT_PULLUP);
//---------------------------------------------------- SET dos pinos de saida
pinMode(saidaDigital_1,OUTPUT);
pinMode(saidaDigital_2,OUTPUT);
pinMode(saidaDigital_3,OUTPUT);
pinMode(saidaDigital_4,OUTPUT);
}
//==================================== LOOP =================================
void loop() {
switch (estadoMaquina) {
case 0:
monitoramentoEntradas();
break;
case 1:
controleSaidas();
break;
case 2:
comunicacaoMQTT();
break;
case 3:
controleMemoria();
break;
}
estadoMaquina = (estadoMaquina + 1) % 4; // 4 é a quanidade de tarefas do round robin
delay(50);
}
//==================================== FUNÇÕES =================================
void monitoramentoEntradas(){
if (millis() - ultimoTempo_leituraEntradas >= 50) {
ultimoTempo_leituraEntradas= millis();
}
}
void controleSaidas(){
if (millis() - ultimoTempo_controleSaidas >= 5000) {
ultimoTempo_controleSaidas = millis();
}
}
void comunicacaoMQTT(){
if (millis() - ultimoTempo_comunicacaoMQTT >= 30000) {
ultimoTempo_comunicacaoMQTT = millis();
}
}
void controleMemoria(){
if (millis() - ultimoTempo_controleMemoria >= 10000) {
ultimoTempo_controleMemoria = millis();
}
}