Problema com o tempo em relé

Olá, estou com problemas em manter um relé ativo durante um determinado tempo.
Passo a citar o código:

//Estores Sala…

if(digitalRead(in_Estore_Subir_Sala) == LOW)
{
if(estado_Estore_Subir_Sala == nao_pressionado && temporizador == 0)
{
estado_Estore_Subir_Sala = pressionado;
digitalWrite(out_Estore_Subir_Sala,!digitalRead(out_Estore_Subir_Sala));
temporizador = 1;
tempo = millis();

}

}
if ((millis() - tempo) >= 2000 && temporizador == 1)
{
digitalWrite(out_Estore_Subir_Sala, LOW);

}
else
{
estado_Estore_Subir_Sala = nao_pressionado;
temporizador = 0;
}

o problema está no tempo, ou seja, nao consigo fazer desligar o relé após os 2s (2000).
Alguem pode ajudar?
Obrigado…

rtek1000:
Olá,

Dicas:

  • Caso você se perca no código, reinicie do zero, se for muito grande, analise em partes.

  • Comece pelo acionamento da saída, faça o temporizador, como o pisca-pisca, então vá adicionando as condições de funcionamento.

Eu tentei analisar um pouco seu código, mas está um pouco confuso para min, eu acho que estou com a cabeça cheia no momento, se puder explicar como o código deve funcionar talvez ajude.

Ah, e por favor procure utilizar as ferramentas do forum, para citar o código de forma mais legível “</>”, a IDE do Arduino tem a função de auto formatação que ajuda muito (Ctrl+T):

 if (digitalRead(in_Estore_Subir_Sala) == LOW)

{
   if (estado_Estore_Subir_Sala == nao_pressionado && temporizador == 0)
   {
     estado_Estore_Subir_Sala = pressionado;
     digitalWrite(out_Estore_Subir_Sala, !digitalRead(out_Estore_Subir_Sala));
     temporizador = 1;
     tempo = millis();

}

}
 if ((millis() - tempo) >= 2000 && temporizador == 1)
 {
   digitalWrite(out_Estore_Subir_Sala, LOW);

}
 else
 {
   estado_Estore_Subir_Sala = nao_pressionado;
   temporizador = 0;
 }

Obrigado por responder.

A minha ideia é fazer subir e descer um estore elétrico

Dar ordem para subir (manter ligado durante 1min por exemplo e após esse tempo desligar) e vice versa.

codigo base:

"<
if (digitalRead(in_Estore_Subir_Sala) == LOW)
{

if (estado_Estore_Subir_Sala == nao_pressionado)
{
estado_Estore_Subir_Sala = pressionado;
digitalWrite(out_Estore_Subir_Sala, !digitalRead(out_Estore_Subir_Sala));
}
}
else
{
estado_Estore_Subir_Sala = nao_pressionado;
}

"

nao estou a conseguir implementar o tempo

 //Estores Sala...............................................................................
  if (digitalRead(in_Estore_Subir_Sala) == LOW)
  {

    if (estado_Estore_Subir_Sala == nao_pressionado)
    {
      estado_Estore_Subir_Sala = pressionado;
      digitalWrite(out_Estore_Subir_Sala, !digitalRead(out_Estore_Subir_Sala));
    }
  }
  else
  {
    estado_Estore_Subir_Sala = nao_pressionado;
  }
}

Posta o código completo, isso ajuda!

Pelo que entendi você quer manter algo ligado por 1min e depois inverter o sentido por 1 min e assim por diante, correto?

cria uma variável do tipo long onde ela receberá o valor do millis() e depois você calcula o delta time, e enquanto não chegar a 1 minuto o estado não muda: exemplo

....
long  tempoInicial = 0;
long deltaTime    = 60000;
boolean ativado = false;
...
void loop(){
...
if (tempoInicial == 0){
   tempoInicial = millis();
}
...
if ( millis() - tempoInicial == deltaTime){
 
   ativado = !ativado;

}

....

Agora basta você trabalhar com a booleana ativado.
Qualquer dúvida, posta aqui mas com o código todo.