4 Temporizadores usando millis() - sem delay()


#1

Senhores, bom base em alguns exemplos da internet desenvolvi esse Sketch, mas estou tendo algumas dificuldades, visto que sou novo a área, portanto peço ajuda de vocês.

Preciso adicionar o reconhecimento de um 2º PULSO vindo da mesma entrada do 1º PULSO e também adicionar um atraso - sem a função delay() para o 4º led (LED4).

Usando a função millis() consegui os temporizadores.

Se alguém puder me ajudar a resolver o problema, ou puder melhorar o que já foi feito, fico agradecido.

OBJETIVO:

2 BOTÕES.
4 LEDS

O 1º PULSO do BOTAO1 acionar o LED1
O 1º PULSO do BOTAO2 acionar o LED2
O 2º PULSO do BOTAO2 acionar o LED3

AGUARDAR 4 segundos

acionar o LED4.

Todos mantendo suas respectivos temporizações.

Desde já agradeço.

/*




TENTANDO IMPLEMENTAR O SEGUNDO PULSO.
TENTANDO IMPLEMENTAR O ATRASO (SEM delay() PARA O 4º LED.

OBJETIVOS:

COM 1º PULSO DE BOTÃO1 LIGAR LED1

COM 1º PULSO DE BOTÃO2 LIGAR LED2
COM 2º PULSO DE BOTÃO2 LIGAR LED3

AGUARDAR 4 SEGUNDOS E LIGAR LED4 (IMPLEMENTAR)

AGUARDAR TEMPORIZAÇÕES DE LED1, LED2, LED3 E LED4
DESLIGA-LOS

IMPLEMENTAR RESET

Hélio Rodrigues
Goianira/Go
Brazil
30/12/2017

Video do sistema ainda sem 2º PULSO e sem o ATRASO para o 4º LED (LED4).
https://youtu.be/AhQQgb2-QWQ

TODA E QUALQUER AJUDA É BEM VINDA.
h3lyofilho@gmail.com
WhatsApp: (62) 99458 1897




*/

#define TEMPO_LED1 2000 //PARA USO FINAL TEMPO SERA DE 3 OU 4 SEGUNDOS - SEM AJUSTE
#define TEMPO_LED2 90000 //PARA USO FINAL TEMPO SERA DE ATÉ 3 HORAS - COM AJUSTE
#define TEMPO_LED3 7000 //PARA USO FINAL TEMPO SERA DE ATÉ 30 MINUTOS - COM AJUSTE
#define TEMPO_LED4 4000 //PARA USO FINAL TEMPO SERA DE ATÉ 10 SEGUNDOS - COM AJUSTE

unsigned char BOTAO1 = 0;//INICIA TEMPO_LED1
unsigned char BOTAO2 = 2;//INICIA TEMPO_LED2, TEMPO_LED3, TEMPO_LED4

unsigned char LED1 = 8;
unsigned char LED2 = 9;
unsigned char LED3 = 10;
unsigned char LED4 = 11;

unsigned long AGORA = 0;
unsigned long EVENTO_LED1 = 0;
unsigned long EVENTO_LED2 = 0;
unsigned long EVENTO_LED3 = 0;
unsigned long EVENTO_LED4 = 0;

void setup()
{
pinMode(BOTAO1, INPUT_PULLUP);//SINAL DE ENTRADA COM RESISTOR INTERNO ATIVO
pinMode(BOTAO2,INPUT_PULLUP);//SINAL DE ENTRADA COM RESISTOR INTERNO ATIVO

pinMode(LED1,OUTPUT);//SINAL DE SAIDA
pinMode(LED2,OUTPUT);//SINAL DE SAIDA
pinMode(LED3,OUTPUT);//SINAL DE SAIDA
pinMode(LED4,OUTPUT);//SINAL DE SAIDA
}

void loop()
{
//LIGANDO…
//LIGANDO…
//LIGANDO…
//LIGANDO…
//LIGANDO…
//LIGANDO…
//==================================================================================
//==================================================================================
//==================================================================================
//==================================================================================

AGORA = millis(); //TEMPO DESDE QUE O ARDUINO FOI LIGADO

//LED1
if (digitalRead(BOTAO1) == 0)//SE O BOTAO1 FOR PRESSIONADO…
{
EVENTO_LED1 = millis();//…MARCAMOS O TEMPO DE INICIO DO LED1
digitalWrite(LED1,1);//LIGA O LIGA O LED1
}

//LED2
if (digitalRead(BOTAO2) == 0)//SE O BOTAO2 FOR PRESSIONADO…
{
EVENTO_LED2 = millis();//…MARCAMOS O TEMPO DE INICIO DO LED2
digitalWrite(LED2,1);//LIGA O LED2
}

//LED3
if (digitalRead(BOTAO2) == 0)//SE O BOTAO2 FOR PRESSIONADO…
{
EVENTO_LED3 = millis();//…MARCAMOS O TEMPO DE INICIO LED3
digitalWrite(LED3,1);//LIGA O LED3
}

//LED4
if (digitalRead(BOTAO2) == 0)//SE O BOTAO2 FOR PRESSIONADO…
{
EVENTO_LED4 = millis();//…MARCAMOS O TEMPO DE INICIO LED4
digitalWrite(LED4,1);//LIGA O LED4
}

//DESLIGANDO…
//DESLIGANDO…
//DESLIGANDO…
//DESLIGANDO…
//DESLIGANDO…
//DESLIGANDO…
//==================================================================================
//==================================================================================
//==================================================================================
//==================================================================================
if(AGORA - EVENTO_LED1 > TEMPO_LED1)//SE ACABOU O TEMPO DE LED1
{
EVENTO_LED1 = AGORA;//RESETA O LED1
digitalWrite(LED1,0);//E DESLIGA O LED1
}

if(AGORA - EVENTO_LED2 > TEMPO_LED2)//SE ACABOU 0 TEMPO DE LED2
{
EVENTO_LED2 = AGORA;//RESETA O TEMPO DE LED2
digitalWrite(LED2,0);//E DESLIGA O LED2
}

if(AGORA - EVENTO_LED3 > TEMPO_LED3)//SE ACABOU O TEMPO DE LED3
{
EVENTO_LED3= AGORA;//RESETA O TEMPO DE LED3
digitalWrite(LED3,0);//E DESLIGA O LED3
}

if(AGORA - EVENTO_LED3 > TEMPO_LED4)//SE ACABOU O TEMPO LED4
{
EVENTO_LED4 = AGORA;//RESETA O TEMPO DE LED4
digitalWrite(LED4,0);//E DESLIGA O LED4
}
}


#2

Você pode utilizar timers: