Estou fazendo um código pra acionar um relé e ao mesmo tempo medir o consumo de corrente no aparelho que estiver conectado no relé, mas não posso usar o delay pra temporizar pois ele para tudo.
Queria ajuda pra adicionar um temporizador pra ele ir contando o tempo enquanto o sensor mede a corrente.
Quais bibliotecas usar?
O código onde estou tentando colocar o timer é esse aqui:
Tags:
Você pode usar a função millis() e fazer operações usando os tempos.
Por exemplo, suponha que a Tarefa1() deva ser executada a cada 5 segundos, mas sem travar o resto do código durante esse intervalo. Você pode fazer:
unsigned long prev_time1 = 0;
unsigned long intervalo1 = 5000;
void setup()
{
}
void loop()
{
if(millis() - prev_time1 >= intervalo1 )
{
prev_time1 = millis();
Tarefa1();
}
//Restante do código
}
Boa noite colegas, estou com outra dúvida aqui:
Consegui fazer o que eu queria com a biblioteca TimerOne, botei pra imprimir o tempo no LCD e tudo mais, porém o tempo que ele imprime é em milisegundos e não estou conseguindo converter esse tempo para minutos:segundos.
Alguém tem alguma sugestão?
@Edit
Aproveitando, alguem pode revisar a linha do meu código por gentileza? Fiz umas alterações aqui e agora está imprimindo a linha tempo após o número do WattHora.
case 3:
lcd.clear();
lcd.home();
lcd.print("Vc escolheu:");
lcd.setCursor(0,1);
lcd.print("Banho Curto");
lcd.setCursor(0,0);
delay (5000);
lcd.clear();
//A partir daqui aciona o relé e começa a monitorar o consumo
while (time <= 3000){
digitalWrite(rele, HIGH); //Liga rele
lcd.print("Tempo="); // mostra texto
lcd.setCursor(0,1); // seleciona coluna 0, linha 1
lcd.print("WattHora="); // mostra texto
Irms = EnerMonitor.calcIrms(1480); // calculo da corrente RMS
lcd.setCursor(9,0); // seleciona coluna 9, linha 0
lcd.print(time); // mostra o tempo em milisegundos
lcd.setCursor(9,1); // seleciona coluna 9, linha 1
lcd.print(Irms*Vrede*(Tempo/3600)); // calculo de Watt/hora
Tempo++;
delay (100);
}
if(time > 3000){ //Quando o tempo passar de 5 minutos, o relé desarma e volta para o estado 2
digitalWrite(rele, LOW);
delay (15000);
estado = 2;
}
break;
Faça a conversão matematicamente, já que 1000ms = 1s, 60 seg = 1min... e etc. Basta ir fazendo a divisão e incrementando e zerando cada variável de forma adequada.
Sobre o erro na impressão, acredito que a biblioteca imprima o valor na última posição válida do cursor. Ou seja, como vc não especifica o (0,0) do "Tempo", ele imprime depois da impressão do Wh. Em alguns casos há o clear antes, então o cursor volta pro (0,0) e não ocorre esse problema.
A solução possivelmente é informar a posição do cursos antes de imprimir o "Tempo".
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por