CCCPaste

Agustín Senen Gonzalez

//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;
}