//Agustín Senen Gonzalez
#define PIN_BOMBA 14
#define CONFIG_BOMBA pinMode(PIN_BOMBA, OUTPUT)
#define EncenderBomba digitalWrite(PIN_BOMBA, HIGH)
#define ApagarBomba digitalWrite(PIN_BOMBA, LOW)
#define PIN_TQ_VACIO 9
#define CONFIG_TQ_VACIO pinMode(PIN_TQ_VACIO, INPUT)
#define TanqueVacio digitalRead(PIN_TQ_VACIO)
#define PIN_TQ_LLENO 8
#define CONFIG_TQ_LLENO pinMode(PIN_TQ_LLENO, INPUT)
#define TanqueLleno digitalRead(PIN_TQ_LLENO)
#define PIN_CISTERNA_VACIA 10
#define CONFIG_CISTERNA_VACIA pinMode(PIN_CISTERNA_VACIA, INPUT)
#define CisternaVacia digitalRead(PIN_CISTERNA_VACIA)
#define PIN_FORZAR_LLENADO 11
#define CONFIG_FORZAR_LLENADO pinMode(PIN_FORZAR_LLENADO, INPUT)
#define ForzarLlenado digitalRead(PIN_FORZAR_LLENADO)
#define PIN_LED_TEST 13
#define CONFIG_LED_TEST pinMode(PIN_LED_TEST, OUTPUT)
#define EncenderLed digitalWrite(PIN_LED_TEST, HIGH)
#define ApagarLed digitalWrite(PIN_LED_TEST, LOW)
#define TApagado 5000
#define TEncendido 50
#define TLlenado 5000
bool modoAutomatico = true;
bool bombaEncendida = false;
unsigned long tiempoInicioBomba = 0;
void setup() {
CONFIG_BOMBA;
CONFIG_TQ_LLENO;
CONFIG_TQ_VACIO;
CONFIG_CISTERNA_VACIA;
CONFIG_FORZAR_LLENADO;
CONFIG_LED_TEST;
Serial.begin(9600);
Serial.println("Nombre: Agustin");
Serial.println("Apellido: Senen Gonzalez");
}
void loop()
{
LedTest();
CtrlEncendido();
CtrlApagado();
rxSerie();
}
void CtrlEncendido() {
bool tanqueVacio = TanqueVacio;
bool cisternaVacia = CisternaVacia;
bool forzarLlenado = ForzarLlenado;
if ((modoAutomatico && tanqueVacio && !cisternaVacia) || forzarLlenado) {
bombaEncendida = true;
tiempoInicioBomba = millis();
txSerie("Inició el Llenado");
}
if (bombaEncendida) {
EncenderBomba;
} else {
ApagarBomba;
}
}
void CtrlApagado() {
if (TanqueLleno || CisternaVacia || (millis() - tiempoInicioBomba > TLlenado)) {
if (bombaEncendida) {
bombaEncendida = false;
ApagarBomba;
unsigned long tiempoLlenado = (millis() - tiempoInicioBomba) / 1000;
txSerie("Finalizó el llenado. Tardó " + String(tiempoLlenado) + " segundos en llenarlo.");
}
if (millis() - tiempoInicioBomba > TLlenado) {
modoAutomatico = false;
txSerie("Tiempo de seguridad alcanzado. Pasando a modo MANUAL.");
}
}
}
void rxSerie() {
if (Serial.available()) {
char comando = Serial.read();
if (comando == 'A' || comando == 'a') {
modoAutomatico = true;
txSerie("Modo AUTOMÁTICO activado.");
} else if (comando == 'M' || comando == 'm') {
modoAutomatico = false;
txSerie("Modo MANUAL activado.");
} else if (comando == 'X' || comando == 'x') {
bombaEncendida = true;
tiempoInicioBomba = millis();
}
}
}
void txSerie(String mensaje) {
Serial.println(mensaje);
}
void LedTest() {
static unsigned long millis_ant = 0;
static bool estado_led = false;
static int ms_espera = TApagado;
if (millis() - millis_ant < ms_espera) return;
millis_ant = millis();
estado_led = !estado_led;
digitalWrite(PIN_LED_TEST, estado_led);
ms_espera = estado_led ? TEncendido : TApagado;
}