Buenos días, lo primero de todo, pedir disculpas si he incumplido alguna norma del foro, me las he leído y creo que lo he hecho bien, pero en caso de que no, pido perdón.
Soy un novato y tengo el código que veréis aquí abajo, instalado en un Arduino uno.
El caso es que yo necesito, que cuando activo el pulsador, el ciclo de las válvulas, comience, pero que si en medio de este ciclo de las válvulas, le vuelvo a dar, se pare, es decir, que todas se quedaran en LOW (como están en el else.)
He probado con otro tipo de funciones además de con el if, pero no lo consigo.
Como puedo hacer para interrumpir el ciclo de las válvulas volviendo a presionar el pulsador???
P.d: Para que el ciclo pueda comenzar tanto vacuostato como presostato, deben ser menores a 500.
Muchas gracias.
Espero vuestra ayuda.
Un abrazo fuerte para tod@s
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//Entradas
int Vacuostato=A0; //Señal analogica de 0 o 5v que nos indica si el tanque de vacio esta cargado o no
int Presostato=A1; //Señal analogica de 0 o 5v que nos indica si el tanque de presion de aire esta cargado o no
int Potenciometro=A3; //Potenciometro que fija el tiempo que dura el proceso de vacio
int Botoninicio=5; //Pulsador con resistencia pull down que inicia o detiene el ciclo
//Salidas
int Cilindrotapa=4; //Rele que abre y cierra la tapa de la camara de vacio
int Entradavacio=3; //Rele que hace vacio en la camara
int Escapevacio=2; //Rele que libera vacio en la camara
//Pantalla A4 SDA y A5 SCL
//Variables
long ValorVacuostato; //Variable raw Vacuostato (0 a 1023)
long ValorPresostato; //Variable raw Presostato (0 a 1023)
long ValorPotenciometro; //Guardamos el valor del potenciometro (0 a 1023)
float TiempoVacio; //Guarda el tiempo configurado por el potenciometro
int SegundosVacio; //Tiempo en segundos
int Segundos=1000;
int ValorBoton;
LiquidCrystal_I2C lcd(0x27,20,4);
void setup() {
Serial.begin(9600);
pinMode(Vacuostato, INPUT);
pinMode(Presostato, INPUT);
pinMode(Potenciometro, INPUT);
pinMode(Botoninicio, INPUT);
pinMode(Cilindrotapa, OUTPUT);
pinMode(Entradavacio, OUTPUT);
pinMode(Escapevacio, OUTPUT);
//Iniciar LCD
lcd.init();
lcd.init();
//Imprimir mensaje LCD
lcd.backlight();
lcd.setCursor(1,0);
lcd.print("*****************");
lcd.setCursor(5,1);
lcd.print("BLACKONION");
lcd.setCursor(5,2);
lcd.print("INDUSTRIES");
lcd.setCursor(1,3);
lcd.print("******************");
delay(3000);
lcd.clear();
}
void loop() {
//Seteo de datos
ValorBoton=digitalRead(Botoninicio);
Serial.println(ValorBoton);
ValorVacuostato=analogRead(Vacuostato); //Realizar lectura vacuostato
ValorPresostato=analogRead(Presostato); //Realizar lectura presostato
ValorPotenciometro=analogRead(Potenciometro); //Realizar lectura potenciometro
//Función tiempo en segundos
TiempoVacio=map(ValorPotenciometro,0,1023,60000,600000); //Mapeo datos potenciometro
SegundosVacio=(TiempoVacio/Segundos); //Paso de valores potenciometro a segundos
Serial.println(SegundosVacio);
lcd.backlight();
lcd.setCursor(9,0);
lcd.print("TIME:");
lcd.setCursor(14,0);
lcd.print(SegundosVacio);
//Configuración vacuostato
if(ValorVacuostato<=500){
Serial.println("Vacio:OK");
lcd.backlight();
lcd.setCursor(0,1);
lcd.print("VAC:OK");
}else{
Serial.println("Vacio:BAD");
lcd.backlight();
lcd.setCursor(0,1);
lcd.print("VAC:BAD");
}
//Configuración presostato
if(ValorPresostato<=500){
Serial.println("Presion:OK");
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("PRE:OK");
}else{
Serial.println("Presion:BAD");
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("PRE:BAD");
}
//********************************************************
//Condición inicio loop
if((ValorVacuostato<=500&&ValorPresostato<=500&&ValorBoton)==1){
//********************************************************
//Ciclo de las valvulas
digitalWrite(Cilindrotapa, HIGH);
delay (2000);
digitalWrite(Cilindrotapa, HIGH);
digitalWrite(Entradavacio, HIGH);
delay (TiempoVacio); //Tiempo potenciometro
digitalWrite(Cilindrotapa, HIGH);
digitalWrite(Entradavacio, LOW);
digitalWrite(Escapevacio, HIGH);
delay(10000);
digitalWrite(Cilindrotapa, LOW);
digitalWrite(Entradavacio, LOW);
digitalWrite(Escapevacio, LOW);
//********************************************************
}else{
digitalWrite(Cilindrotapa, LOW);
digitalWrite(Entradavacio, LOW);
digitalWrite(Escapevacio, LOW);
}
}