Hola a todos. Soy nuevo en esto y quería controlar un depósito que lleva un agitador, un nivel de máximo y mínimo y una electroválvula de llenado.
Tengo una duda con el temporizado del agitador. Lo hago con millis, pero me encuentro con la incertidumbre de que pasará cuando millis se desborde y empiece otra vez, no se si me dejará de funcionar el código. Porque, si no lo he entendido mal, millis no se puede igualar a 0 y en aproximadamente 50 días, se desborda.
Os lo pego a ver que os parece.
/*** Global variables ***/
int estadoAgitador;
long intervaloEncendido=150000;
long intervaloApagado=480000;
long intervaloArranque=600000;
int retardoAlarma=400;
long tiempoAnteriorEncendido=0;
long tiempoAnteriorApagado=0;
String Paso1;
String Paso2;
int (electrovalvula) = 3;
void setup() {
estadoAgitador=true;
pinMode(2,OUTPUT); //Contactor Agitador
pinMode(8,INPUT); //Nivel Bajo
pinMode(12,INPUT); //Pulsador anulación Alarma
pinMode(4,OUTPUT); //Alarma
pinMode(10,INPUT); //Pulsador Llenado
pinMode (3,OUTPUT); //Electroválvula
pinMode(5,OUTPUT); //Led Llenado
pinMode(9,INPUT); //Nivel Alto
pinMode(11,INPUT); //Pulsador Agitador
}
void loop() {
Paso1; {
if ((millis()-tiempoAnteriorEncendido>=intervaloEncendido)&&estadoAgitador==true) {
estadoAgitador=false;
digitalWrite(2,estadoAgitador);
tiempoAnteriorApagado=millis();
}
if ((millis()-tiempoAnteriorApagado>=intervaloApagado)&&estadoAgitador==false) {
estadoAgitador=true;
digitalWrite(2,estadoAgitador);
tiempoAnteriorEncendido=millis();
}
}
Paso2; {
if (digitalRead(8) == false) { //consulta el estado del nivel bajo
if (digitalRead(12) == true) { //consulta el pulsador de la alarma
retardoAlarma=0; //fija la variable del retardo de la alarma en 0
digitalWrite(4,LOW); //apaga la alarma
}
}
if (retardoAlarma >= 400) { //si se ha superado el número fijado en el retardo de la alarma
digitalWrite(4,HIGH); //enciende la alarma
}else { //de lo contrario
retardoAlarma ++; //suma 1 al retardo de la alarma
}
}
if (digitalRead(10) == true) { //consulta el pulsador de llenado
digitalWrite(2,HIGH); //activa el agitador
digitalWrite(3,HIGH); //activa la electrovalvula
digitalWrite(5,HIGH); //activa el led de llenado
digitalWrite(4,LOW); //desactiva la alarma
}
if (digitalRead(9) == false) { //consulta el nivel alto
digitalWrite(2,LOW); //desactiva el agitador
digitalWrite(3,LOW); //desactiva la electrovalvula
digitalWrite(5,LOW); //desactiva el led de llenado
digitalWrite(4,LOW); //desactiva la alarma
}
if (digitalRead(10) == true) { //consulta el pulsador de llenado
if (electrovalvula == true) { //si la electrovalvula esta activada
digitalWrite(2,LOW); //desactiva el agitador
digitalWrite(3,LOW); //desactiva la electrovalvula
digitalWrite(5,LOW); //desactiva el led de llenado
digitalWrite(4,LOW); //desactiva la alarma
}
}
if (digitalRead(11) == true) { //consulta el pulsador del agitador
intervaloArranque+=millis(); //suma millis a intervaloArranque
digitalWrite(2,HIGH); //activa el agitador
}
if (millis() >= intervaloArranque) { //si millis es mayor que el intervalo de arranque
digitalWrite(2,LOW); //desactiva el agitador
Paso1; //salta al paso 1
}else { //de lo contrario
Paso2; //salta al paso 2
}
}
Seguramente haya cosas mejorables y agradezco los consejos que me podáis dar.
Un saludo y gracias