//actualización 23-09-2023 7:13pm
#include<LiquidCrystal.h>
const int sensorPin = 6;
#define relayIgnitor 2
#define relayMotor 3
#define relayValvula 5
#define pulsadorEmergencia 7
void(* resetFunc) (void) = 0; //declare reset function @ address 0
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 4;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
unsigned long long tiempoRelayMotor = 0;
void setup()
{
Serial.begin(9600); //iniciar puerto serie
lcd.begin(16, 2);
pinMode(relayIgnitor, OUTPUT);
pinMode(relayMotor, OUTPUT);
pinMode(relayValvula, OUTPUT);
pinMode(pulsadorEmergencia, INPUT_PULLUP);
pinMode(sensorPin, INPUT); //definir pin como entrada
digitalWrite(relayIgnitor, HIGH);
digitalWrite(relayMotor, HIGH);
digitalWrite(relayValvula, HIGH);
lcd.clear();
}
unsigned long t_relayIgnitor = 0;
bool tiempoRIgnit = true;
unsigned long t_relayMotor = 0;
bool tiempoMotor = true;
unsigned long t_Valvula = 0;
bool tiempoValvula = true;
void mi_relayIgnitor()
{
if (tiempoRIgnit)
{
t_relayIgnitor = millis();
tiempoRIgnit = false;
}
if((millis() - t_relayIgnitor) <= (5UL * 1000UL))
{
digitalWrite(relayIgnitor, LOW);
}
else // apagado
{
digitalWrite(relayIgnitor, HIGH);
}
if ((millis() - t_relayIgnitor) >= ((60UL * 1000UL) * 14UL)) //para volver encender
{
tiempoRIgnit = true;
}
}
bool lcdtiempoInversa = true;
void mi_relayMotor()
{
if (tiempoMotor)
{
t_relayMotor = millis();
tiempoMotor = false;
if (lcdtiempoInversa)
{
lcd.clear();
lcdtiempoInversa = false;
}
}
double aux = ((tiempoRelayMotor / 1000.0) / 60.0) - (((millis() - t_relayMotor) / 1000.0) / 60.0);
lcd.setCursor(0, 0);
if(aux>=0)
{
lcd.print(aux + String(" "));
}
else
{
lcd.print("0" + String(" "));
}
lcd.setCursor(0, 1);
lcd.print(" MINUTOS ");
if((millis() - t_relayMotor) < tiempoRelayMotor)
{
digitalWrite(relayMotor, LOW);
}
if ((millis() - t_relayMotor) >= tiempoRelayMotor) //para volver encender
{
// reset
resetFunc(); //call reset
}
}
void mi_relayValvula()
{
if (tiempoValvula)
{
t_Valvula = millis();
tiempoValvula = false;
}
if ((millis() - t_Valvula) <= ((60UL * 1000UL) * 12UL)) //para volver encender
{
digitalWrite(relayValvula, LOW);
}
else if ((millis() - t_Valvula) <= ((60UL * 1000UL) * 15UL)) //para volver encender
{
digitalWrite(relayValvula, HIGH);
tiempoValvula = true;
}
}
bool code1 = false;
bool tapaBool = true;
int contadorMonedas = 0;
bool monedaEntra = true;
bool vezFichamsg = true;
int pulsos = 0;
bool estadoPulsos = false;
bool otro = true;
void loop()
{
if (!digitalRead(pulsadorEmergencia))
{
if (vezFichamsg)
{
tapaBool = true;
lcd.clear();
lcd.print("Inserte fichas");
vezFichamsg = false;
}
int value = 0;
// Serial.println(analogRead(A8));
value = digitalRead(sensorPin ); //lectura digital de pin
if (code1)
{
if (otro)
{
estadoPulsos = true;
otro = false;
}
if (pulsos == 1)
{
pulsos = 0;
tiempoRIgnit = true;
}
mi_relayIgnitor();
mi_relayMotor();
mi_relayValvula();
// if (digitalRead(pulsadorEmergencia))
// {
// }
// Serial.println("reevaluando");
}
if (!value)
{
if (monedaEntra)
{
Serial.println("Detectado obstaculo");
code1 = true;
contadorMonedas++;
monedaEntra = false;
tiempoRelayMotor += (60000UL * 15UL);
}
}
else
{
monedaEntra = true;
}
}
else
{
if (tapaBool)
{
lcd.clear();
lcd.print("Cierre tapa");
tapaBool = false;
vezFichamsg = true;
digitalWrite(relayValvula, HIGH);
digitalWrite(relayIgnitor, HIGH);
digitalWrite(relayMotor, HIGH);
otro = true;
}
if (estadoPulsos)
{
pulsos++;
estadoPulsos = false;
}
}
delay(15);
}