Olá a todos.
Estou estudando Arduino, sou novo na aréa e tenho varias duvidas.
Estou tentando implementar um sistema de contagem de pulsos que ative vários temporizadores.
A questão da contagem de pulsos parece que esta resolvida, pois simulando no ISIS parece estar ok. porem os Temporizadores tenho varias duvidas, pois não pretendo usar a função delay do Arduino
Segue o código caso alguém quera me ajudar usando o TIMER0 OU TIMER1 ou outra solução viável.
Preciso de Temporizações AJUSTÁVEIS via potenciômetros:
10 segundos (LED1)
3 horas (LED2)
30 minutos (LED3)
10 segundos (LED4) - com delay de uns 3s antes de iniciar.
/*
- CONTADOR DE PULSOS
- LIGA-DESLIGA
- IMPLEMENTAR TEMPORIZADORES
- VERIFICAR REPIQUES NO LED1
- VERIFICAR ERRO NO PRIMEIRO PULSO, SIMULADO NO ISIS.
- SIMPLIFICAR O CÓDIGO
- LIGA LED1 AO 1º TOQUE DO “BOTÃO”
- DESLIGA TODOS OS LEDS AO 2º TOQUE DO “BOTAÃO”
- AO 1º “PULSO” LIGA LED2 = ENTRADA DIGITAL “0”
- AO 2º PULSO LIGA LED3 = ENTRADA DIGITAL “2”
- AGUARDA 3 SEGUNDOS
- LIGA LED4
- AO 3º “PULSO” DESLIGA TODOS OS LEDS = ENTRADA DIGITAL “2”
- AO PRESSIONAR “ZERAR” DESLIGA TODOS OS LEDS
- Hélio Rodrigues
- 27/12/2017
*/
#define BOTAO 0
#define PULSO 2
#define ZERAR 7
#define LED1 10
#define LED2 11
#define LED3 12
#define LED4 13
volatile unsigned int CONTADOR = 0;
unsigned long INICIA_CONTADOR = 0;
void setup()
{
pinMode(BOTAO,INPUT_PULLUP); //DEFINE PINO 0 COMO ENTRADA E COM RESISTOR INTERNO PULL-UP
pinMode(PULSO,INPUT_PULLUP); //DEFINE PINO 2 COMO ENTRADA E COM RESISTOR INTERNO PULL-UP
pinMode(ZERAR,INPUT_PULLUP); //DEFINE PINO 7 COMO ENTRADA E COM RESISTOR INTERNO PULL-UP
pinMode(LED1, OUTPUT);//DEFINE PINO 10 COMO SAIDA
pinMode(LED2, OUTPUT);//DEFINE PINO 11 COMO SAIDA
pinMode(LED3, OUTPUT);//DEFINE PINO 12 COMO SAIDA
pinMode(LED4, OUTPUT);//DEFINE PINO 13 COMO SAIDA
attachInterrupt(0, CONTA_PULSOS, FALLING); //INTERRUPÇÃO // INT0 PINO 2 // FUNÇÃO // BORDA 5V PARA 0V
}
void loop()
{
if (digitalRead (BOTAO) == LOW){ // SE “BOTÃO” FOR PRESSIONADO LIGA LED1
digitalWrite(LED1, HIGH); // NO 1º TOQUE
}
if (digitalRead (ZERAR) == LOW){
digitalWrite(LED1, LOW);// SE PINO 7 FOR A LOW “ZERAR”, APAGA TODOS OS LEDS
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
}
if (digitalRead(LED1) == HIGH && digitalRead(BOTAO) == LOW){
digitalWrite(LED1, LOW); // SE LED1 ESTIVER ACESO E “BOTAO” FOR PRESSIONADO
digitalWrite(LED2, LOW);// APAGA TODOS OS LEDS.
digitalWrite(LED3, LOW);// (2º TOQUE DO “BOTÃO”)
digitalWrite(LED4, LOW);
}
}
void CONTA_PULSOS()
{
INICIA_CONTADOR = millis();
CONTADOR++;
if (CONTADOR == 2){ //NO 2º PULSO LIGA LED2 // NÃO CONSIGO COLOCAR NO 1º PULSO, DÁ ERRO
digitalWrite(LED2, HIGH);
}
if (CONTADOR == 3){ //NO 3º PULSO LIGA LED3
digitalWrite(LED3, HIGH);
}
if (CONTADOR == 4){ //NO 4º PULSO LIGA LED4.
digitalWrite(LED4, HIGH);
}
if (CONTADOR == 5){ //NO 5º PULSO DESLIGA TODOS OS LEDS, INCLUSIVE LED1.
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
CONTADOR = 0; // ZERA CONTADOR DE PULSOS
INICIA_CONTADOR =0; //INICIA CONTADOR DE PULSOS COM VALOR 0.
}
}