[Resolvido] - Duvida - como fazer para ativar o rele quando inicia a contagem do millis()

boa tarde, fiz um pequeno server para acionar uma bomba d'agua, ele funciona, mas a ideia seria ele acionar o pino por X minutos e aguardar X minutos,  utilizando millis(), no entanto não estou conseguindo fazer a bomba ligar quando ligo a placa, ela inicialmente aguarda X minutos.

já tentei inverter o status do pino, mas não funciona, ele primeiro conta para depois executar a ação.

teria como inverter isso?

A parte do código que controla a bomba é a função executeTimer();

Desde de já agradeço

Exibições: 279

Anexos

Responder esta

Respostas a este tópico

up

Boa noite TA,

Li seu descritivo, e depois dei uma olhada no seu sketch, mas fiquei sem entender sua necessidade e sua dificuldade.

RV

Rui, desculpe não ter sido claro, mas nesse código é para retirar água de um poço que tem baixa vazão nesta época do ano e a vazão da bomba é maior que a taxa de recarga do poço, neste caso á ideia é ligar a bomba por 5 minutos ou menos, e aguardar 10 minutos.

O problema é que no meu código, a placa esta aguardando 10 minutos e ligando 5 minutos, eu já inverti algumas partes, mas não consigo fazer a bomba ligar no inicio programa, isso a campo é um problema serio saber se a bomba esta funcionando ou não sem esperar o tempo de inicio.

O programa funciona, só preciso corrigir esse detalhe.

Bom dia TA,

ontem baixei o seu code, e reduzi para ficar só a parte de controle do rele sem nada de wifi.

Ai pude ver algumas partes que precisam de atenção:

1o. voce definiu algumas variáveis tais com:  bool Rele12state;   e  bool LED13state;

  mas não as inicializou, e em seguida ao iniciar o loop(0,  já faz uso delas:

            digitalWrite(13, LED13state);  digitalWrite(12, Rele12state);

  O "estado" delas é ainda indefinido.

 Depois na função "executeTimer" também faz testes com elas antes de as inicializar.

 Outra coisa, você quer usar millis(), mas enquanto o valor de millis não alcança o que

definiu, ele retorna ao loop, e ao chamar novamente a função, recarrega os valores novamente.

daí começam as contagens de tempo novamente 

Estudando seu code vi que você  testa se o rele está ligado,  if (rele == 1),

dai se ele estiver, você chama a função "  executeTimer(300000, 400000); " 

Depois você testa tempos e dai acende LEDs e muda " states"  , daí não entendi como

você liga e desliga este rele. pois precisa que o rele precisa esteja ligado para entrar na função.

Onde está definido e qual é o port do rele do motor?

RV

TA,

escrevi um code reduzido, fazendo só as funções de intervalar qdo a  variável rele

estiver em valor 1.

Ajuste ele ao seu code e acho que vai dar certo.

RV

Anexos

 RV, o seu exemplo funcionou perfeitamente, fiz pouquíssimas adequações, mas  ficou muito bom

Muito obrigado pela ajuda

Em anexo o código como ficou

Anexos

isso tudo é um mistério que funcionava rsrsrs,

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço