Galera estou fazendo um projeto em que um sensor de nível controla se a bomba da água fica ligada ou desligada.

Quando o sensor de nível estiver com sinal um, a bomba liga com um padrão, 5 minutos ligada e 15 desligada.

Quando o sensor de nível estiver em zero a bomba desliga por completo e só volta a funcionar quando sensor nível voltar a ser um.

Para controlar o tempo  da bomba ligada e desligada estou usando o delay, porém  usando ele, se o sensor de nível mudar  para o estado zero durante a ação do delay, ele só vai parar a bomba por completo quando o tempo do delay acabar, e isso é um problema. Vi muitos usando o millis para fazer isso mas não consegui coloca-lo no meu codigo. Alguém pode me ajudar?

Segue o código que estou usando agora, com o delay. Como ficaria o código usando millis?

// Pino ligado ao sensor de nivel de liquido
int pinosensor = 3;
// Led verde
int pino_led_cheio = 6;
// Led vermelho
int pino_led_vazio = 7;
// Ligar o buzzer (Som) no pino 10
int BUZZER = 10;


void setup()
{
Serial.begin(9600);
pinMode(pinosensor, INPUT);
pinMode(pino_led_cheio, OUTPUT);
pinMode(pino_led_vazio, OUTPUT);
pinMode(BUZZER,OUTPUT); // define o pino do buzzer como saída.
}

void loop()
{


int estado = digitalRead(pinosensor);
Serial.print("Estado sensor : ");
Serial.println(estado);
switch(estado)
{


case 0: //Reservatoirio Vazio
digitalWrite(pino_led_vazio, HIGH);
digitalWrite(pino_led_cheio, LOW);

delay(500);
tone(10,100,400); //aqui sai o som
delay(500);
tone(10,900,400); //aqui sai o som
delay(500);

break;

case 1: //Reservatorio Cheio
// digitalWrite(pino_led_vazio, HIGH);
// digitalWrite(pino_led_cheio, LOW);
digitalWrite(pino_led_vazio, LOW);
digitalWrite(pino_led_cheio, HIGH);
delay(300000); // 5 minutos
digitalWrite(pino_led_cheio, LOW);
delay(900000); 15 minutos

break;
}


delay(100);
}

Exibições: 437

Responder esta

Respostas a este tópico

Mudei um pouco o case 1 do meu programa, consegui realizar a interrupção, caso o sensor de nível mude de estado 1 para 0, o bomba será paralisada, porem se o sensor d nível voltar ao nível 1 novamente, ele vai demorar todo o ciclo do millis para voltar a funcionar. Não há uma forma de o funcionamento ser instantâneo? Algo como zerar o millis seria interessante, mas me parece q não é muito recomendável.

segue o código:

case 1: //Reservatorio Cheio

if (millis() >= timeHigh) {

digitalWrite(pino_led_vazio, LOW);
digitalWrite(pino_led_cheio, HIGH);

timeHigh = millis() + 1200000;
timeLow = millis() + 300000;
}
if (millis() >= timeLow && timeLow != 0) {
digitalWrite(pino_led_cheio, LOW);
}
break;
}
delay(100);
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço