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