Compartilhar um codigo com timers para usar no lugar de delay que permite outras atividades durante o tempo de execução do timer

#include <stdio.h>
#include <stdlib.h>

//int para definir pinos 2, 3 e 4 como ouput
int array_length = 3;

//Array para definir pinos 2 e 3 como output
int Outputs[] = {2, 3, 4};

//Entrada digital 5
int Pin5 = 5;

//variaveis para gerar pulso de 50 ms
unsigned long millis_aux1, millis_aux2, millis_aux3;
bool pulso_50_ms;
bool toogle_millis_aux1;

//variaveis para timer
int i, j, a, b;
bool timer;
byte timer_nr;

void setup()
{
// inicializar serial
Serial.begin(9600);
while (!Serial)
{
; //necessário para uso da serial usb
}
//inicializar pinos 2 e 3 como output
for(int i = 0; i < array_length; i++)
{
pinMode(Outputs[i], OUTPUT);
}
//inicializar ouputs como low
for(int i = 1; i < array_length; i++)
{
digitalWrite(Outputs[i], LOW);
}

//inicializar pino 5 como entrada
pinMode(Pin5, INPUT);
//inicializar variaveis pulso 50 ms como zero
millis_aux1 = 0;
millis_aux2 = 0;
millis_aux3 = 0;
pulso_50_ms = 0;
toogle_millis_aux1 = 0;
timer_nr = 0;
i = 0;
j = 0;
timer = 0;

}

//função timer
void timer_function(int a, int b)
{
j = b;
i = 1;
timer_nr = a;
}

//timer reset
void timer_reset()
{
i = 0;
timer_nr = 0;
timer = 0;
}

void loop() {
//logica dos 50 ms
millis_aux3 = millis_aux2 - millis_aux1;
if(toogle_millis_aux1 == 0)
{
millis_aux1 = millis();
toogle_millis_aux1 = 1;
pulso_50_ms = 0;
}else if(abs(millis_aux3) < 50)
{
millis_aux2 = millis();
}else
{
pulso_50_ms = 1;
toogle_millis_aux1 = 0;
}

//função timer
if(i != 0)
      {
         if(j > 0)
          {
            j -= pulso_50_ms;
          }
         
         if(j == 0)
          {
            timer = 1;
          }
      }


if(timer_nr == 0)
  timer_function(1, 20);

//imprimindo timer_1_s
if(timer == 1 && timer_nr == 1)
  {
    digitalWrite(Outputs[1], LOW);
    digitalWrite(Outputs[0], HIGH);
    Serial.println("Timer 1 s");
    timer_reset();
  }

if(timer_nr == 0)
  timer_function(2, 40);


//imprimindo timer_2_s
if(timer == 1 && timer_nr == 2)
  {
    digitalWrite(Outputs[0], LOW);
    digitalWrite(Outputs[i], HIGH);
    Serial.println("Timer 2 s");
    timer_reset();
  }

if(digitalRead(Pin5) == 1)
  {
    digitalWrite(Outputs[2], HIGH);
  }else
    {
      digitalWrite(Outputs[2], LOW);
    }

}

Olá @marques1!
Por favor dá uma olhada a How to use this forum - please read. para estar a par da etiqueta do forum.
O código postado deveria estar formatado como tal e não existe uma explicação concisa do que pretendes alcançar com o post.
Não deixes que isto the desencorage, procurar ajuda é sempre bom especialmente porque se nota que tambêm estas empenhado na resolução mas melhorando estes aspetos faz com que seja mais fácil para a comunicade de te ajudar.

Ok, pensei que os comentários seriam suficientes. Me esforçarei nos próximos posts. Obrigado Marques1

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