Hola.
Soy un novato en el mundo arduino, llevo solo 2 meses jugando a ratos libres.
Estoy en un proyecto para controlar el vaciado de una depuradora y una luz por bluetooth. Voy a seguir añadiendo funciones, como riego controlado por electrovalvulas, mas luces, etc...
Tengo ya la aplicación para android diseñada y el software para el arduino con delay, y funciona perfectamente, salvo que cuando se ejecuta el delay no puedo hacer nada mas hasta que finalice, y por ese motivo necesito poner temporizadores como encender el rele de la depuradora durante 5min y que se apague, al igual que la luz.
Aquí os pongo el código que me funciona perfectamente:
void setup()
{
pinMode(8, OUTPUT); // depuradora pin 8
pinMode(7, OUTPUT); // luz depuradora pin 7
Serial.begin(9600);
}
void loop()
{
while (Serial.available())
{
char dato = Serial.read();
digitalWrite(7, LOW);
digitalWrite(8, LOW);
switch (dato)
{
case 'A': // enciendo depuradora
{
digitalWrite(8, HIGH);
Serial.println("Rele1 encendido");
break;
}
case 'B': // apago depuradora
{
digitalWrite(8, LOW);
Serial.println("Rele1 apagado");
break;
}
case 'E': // enciendo depuradora durante 5 min
{
digitalWrite(8, HIGH);
Serial.println("Rele1 encendido");
delay(300000);
digitalWrite(8, LOW);
break;
}
case 'C': // enciendo luz depuradora
{
digitalWrite(7, HIGH);
Serial.println("Rele2 encendido");
break;
}
case 'D': // apago luz depuradora
{
digitalWrite(7, LOW);
Serial.println("Rele2 apagado");
break;
}
case 'F': // enciendo luz depuradora durante 15 min
{
digitalWrite(7, HIGH);
Serial.println("Rele2 encendido");
delay(900000);
digitalWrite(7, LOW);
break;
}
case 'G': // enciendo luz depuradora durante 30 min
{
digitalWrite(7, HIGH);
Serial.println("Rele2 encendido");
delay(1800000);
digitalWrite(7, LOW);
break;
}
}
}
}
Esta es la aplicación que he diseñado:
He intentado usar este código que encontré, añadiendo lo que yo pienso que necesito, pero no consigo que funcione:
#define ON HIGH // Cambiar para logica positiva/negativa
#define OF LOW // Cambiar para logica positiva/negativa
byte Pinentrada=10;
byte Pinled=7;
unsigned long T_Control=0; // Para controlar el tiempo consumido
unsigned long T_Apagar=2000; // Tiempo de funcionamiento
bool EstadoPin=false;
bool AnteriorEstadoPin=false;
void setup()
{
pinMode(Pinled, OUTPUT);
pinMode(Pinentrada, INPUT);
digitalWrite (Pinled, OF);
}
void loop()
{
EstadoPin=digitalRead(Pinentrada); // Leer pin
if (AnteriorEstadoPin != EstadoPin) // Estado ha variado?
{
T_Control=millis()+T_Apagar; // Valor de millis para apagar
digitalWrite (Pinled, ON); // Encender
}
AnteriorEstadoPin=EstadoPin;
if (millis()>T_Control && T_Control>0)// Finalozo el tiempo y lo estamos controlando?
{
digitalWrite (Pinled, OF); // Apagar
T_Control=0; // Dejamos de controlar
}
}
Podéis ayudarme a sustituir los delay, no termino de entender bien la función millis.
Muchas gracias.