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.