Ajuda com código para intervalometro

Preciso de um código que periodicamente a cada X milisegundos execute uma tarefa com Y milisegundos de duração usando a função millis() .

Qual estrutura básica para isso ?

Estou meio perdido...

Agradeço algum exemplo

#define intervaloX   5000 //5 segundos
#define intervaloY   1000 //1 segundo

unsigned long int X = ; 
unsigned long int time_X = 0;
unsigned long int Y = ; 
unsigned long int time_Y = 0; 
unsigned char run = 0; 

if (millis() - time_X > intervaloX){
   time_X = millis(); 
   run = 1;
};
if (run == 1){
   //executa o código por tempo Y
   if (millis() - time_X > intervalo_Y) { //não é um erro usar time_X aqui.
      run=0;
   }
}

Muito obrigado pela ajuda. Resolveu meu problema. Fiz algumas modificações no código para simplificar o uso.
Assim checando o estado do "run" em qualquer lugar dentro do loop pode se executar uma tarefa ou outra . Veja o código simplificado:

#define intervaloX   1000 // intervalo do evento periodico
#define intervaloY   100 //duração do  evento
#define outputPin 3 // pino de saida

unsigned long int timeX = 0;
unsigned char run = 0;

void setup() {
  pinMode(outputPin, OUTPUT); // output for a command
  digitalWrite(outputPin, LOW);
}

void loop() {
intervalometro(); // inicia o temporizador

if (run == 0) digitalWrite(outputPin, LOW); // pode ser usado para executar uma tarefa
if (run == 1) digitalWrite(outputPin, HIGH); //  pode ser usado para executar uma outra tarefa 

}

void intervalometro(){
if (millis() - timeX > intervaloX){timeX = millis(); run = 1;} //intervalo periodico
if (run == 1){if (millis() - timeX > intervaloY) {run=0;}}// duraçao do evento
}

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.