Olá pessoal, como eu crio um cod para monitorar um pulso de 1hz, se o pulso sessar será ativada uma saida por 2 segundos depois desliga.
Já tentei algumas coisas só que o problema está sendo com o tempo de monitoração.
Você tem que usar uma interrupção e contar o tempo entre cada um dos pulsos, se passar mais de 2 segundos ele liga o pino por 2 segundos
volatile unsigned int UltimoPulso;
int Pino_PULSO = 2;
int Pino_Alerta = 3;
void FuncSensor()
{
UltimoPulso = millis();
}
void setup()
{
pinMode(Pino_PULSO, INPUT);
pinMode(Pino_Alerta, OUTPUT);
attachInterrupt(0, FuncSensor, RISING);
UltimoPulso = millis();
sei(); // habilita interrupção
}
void loop()
{
if ((UltimoPulso + 1000) < millis())
{
cli(); // desabilita Interrupção
digitalWrite(Pino_Alerta, HIGH);
delay(2000);
digitalWrite(Pino_Alerta, LOW);
UltimoPulso = millis();
sei(); // habilita Interrupção
}
}
Esse é o mínimo do mínimo para fazer.
PS Usei o delay apenas para encurtar o código
Não entendi a função do pino_Pulso, como ele está sendo usado no programa?
luisandrade:
Não entendi a função do pino_Pulso, como ele está sendo usado no programa?
Assim, o AttachInterrupt liga a Interrupção 0, que monitora o PINO 2, o PINO_PULSO está configurado apenas para fazer o pinMode.