Problemas pausar o abortar AJAX

La arquitectura actual de mi equipo es la siguiente ARDUINO MEGA, W5500, DS3231, DHT11.
El sistema controla una granja avícola en relación con la entrega de alimento, iluminación y entrega de agua. La aplicación muestra en una primera página web los datos actualizados de los diferentes sensores, luego para cambiar los parámetros de uso utilizo una segunda página web.
El problema que tengo es el siguiente: Al grabar en la SD, el Arduino manipula los puertos 4 y 10 a través de SPI. Estos puertos controlan SD (puerto 4) y ETHERNET (puerto 10). La característica específica de uso por parte del fabricante indica que se debe usar uno al tiempo y no ambos. Por otro lado, la aplicación, cada vez que se genera una acción, queda registrada en un arreglo que posteriormente sera grabado en la SD en un archivo con el que se realizan los análisis posteriores. Mientras no haya usuario WEB no hay problema, toda la acción del ARDUINO es perfecta.
Sin embargo, cuando un cliente está activo, AJAX funciona, devolviendo los parámetros a mostrar, cuando ocurre la acción externa de alimentar a las aves, se genera un registro y cuando procedo a registrar en el archivo, el servidor WEB se bloquea, por lo que antes se explicó. .
Declaré una variable que me dice que está lista para grabar en la SD y he hecho varios intentos de pausar o detener AJAX a través de JAVASCRIPT.
¿Alguna recomendación?
Nota: en el archivo el colocado como comentario en algunos void "omitido" debido a la cantidad de caracteres para realizar el post.

//----------------------- LIBRARIES ------------------------//
#include <Arduino.h>
#include <SPI.h>                  // Manejo del bus SPI que usa el ethernet shield para comunicarse con Arduino.
#include <SD.h>
#include <Ethernet.h>             // Manejo del puerto ethernet 
#include <DS3231.h>
#include <Wire.h>
#include <DHT.h>

DS3231 rtc;

//----------------------- CONSTANTS DHT 11 ---------------------//
#define DHTPIN 3     // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11

//----------------------- CONSTANTS SD ---------------------//
#define SS_SD_CARD 4            // SD Card CS pin
#define SS_ETHERNET 10          //Control de Ethernet

//----------------------- CONSTANTS ------------------------//
#define VERSION "2.0"
#define DEBUG 0
#define APRETADO    0
#define SUELTO      1
#define APRETANDOLO 2
#define SOLTANDOLO  3

#ifdef DEBUG
    #define Sprint(a) (Serial.print(a))
    #define Sprintln(a) (Serial.println(a))
    #define Sbegin(a) {Serial.begin(a); while (!Serial) delay(1000);}
#else
    #define Sprint(a)  (Serial.print(a))
    #define Sprintln(a) (Serial.println(a))
    #define Sbegin(a) Serial.begin(a) 
#endif

//----------------------- VARIABLES RED ------------------------//
byte mac[] = { 0xA1, 0xC2, 0xBE, 0xEF, 0xFE, 0x05 };
IPAddress subnet(255, 255, 255, 0);
IPAddress ip(192, 168, 86, 177);
IPAddress gateway(192, 168, 86, 1);
IPAddress dns_server(192, 168, 86, 1);
EthernetServer server = EthernetServer(80);

char nombrefichero[ ] = "ARC0000.TXT"; 
char backupfichero[ ] = "BAC0000.TXT"; 
char archPrincipal[ ] = "PARAM_03.TXT";
char archivLectura[ ] = "ARC0000.TXT";  

int pDump = 7;            // Lectura de de entrada
int pLed8 = 8;            // SE ACTIVA CUANDO SE ESTA SIRVIENDO ALIMENTO
int pLed9 = 9;            //LED de lectura en SD
int pin15 = 15;           // Balanza
int pin16 = 16;           // Evalua el RELÉ que maneja la apertura de la tolva 
int pin17 = 17;           // Cuenta los DUMP
int pkw = 18;             // Luces del local
int bReset = 5;

int v_pLed8 = 0;          //sE ACTIVA CUANDO SE ESTA SIRVIENDO ALIMENTO
int v_pLed9 = 0;          //uso variado, led amarillo, puede usarse a discreción
int v_pin15 = 1;
int v_pin16 = 1;
int v_pin17 = 1;
int v_pkw = 1;
int v_pDump = 0;

//----------------------- CONTROL DE PULSACION ---------------------//
class BotonSimple {
    private:
        unsigned char pin;
        unsigned char anterior, valor;
        unsigned char estado;

        unsigned long temporizador;
        unsigned long tiempoRebote;
    public:
        BotonSimple(unsigned char _pin, unsigned long _tiempoRebote);
        void actualizar();
        int  leer();
};

BotonSimple::BotonSimple(unsigned char _pin, unsigned long _tiempoRebote=50) {
    pin = _pin;
    tiempoRebote = _tiempoRebote;
    pinMode(pin, INPUT_PULLUP);
    valor=HIGH; anterior=HIGH; estado=SUELTO;
}

int BotonSimple::leer() { 
    return estado;
}

BotonSimple boton(pDump);

//----------------------- OTRAS VARIABLES DE CONTROL ----------------------------//
int tiempo_inicial;                 // Controla el tiempo conectado del ARDUINO
int umbral;                         // Valor por defecto de DUMP obtenido del último dato cargado
int v_umbral_b;                     // Valor de respaldo mientras se edital la cantidad de DUMP por ejecutar
int v_umbral_c;                     // Valor de respaldo mientras se edital la cantidad de DUMP por ejecutar, se compara para validar si hubo cambio
int umbral1;                        // Valor por defecto de DUMP obtenido del último dato cargado, mantiene el anterior
int val_dump;                       // Cantidad de DUMP programados
int alim_ser;                       // Cantidad expresada en porcentaje de alimento a servir
int hora_ini;                       // Hora de inicio de Actividades
int hora_fin;                       // Hora final de Actividades

boolean inicioActivida = 0;         // Identifica el inicio de actividades en el día
boolean archivoVacio = 0;           // Variable boolean global para saber si existen registros
boolean century = false;            // Control para el Siglo XXII
boolean h12Flag;                    // Variable para distinguir formato de 12 horas
boolean pmFlag;                     // Variable para saber si es am o pm
boolean v_b_bSalvar = 0;            // Variable que activa salvar en la pagina parameter
boolean v_b_bUndo = 0;              // Variable que activa revertir en la pagina parameter
boolean d_o_n = 0;                  // Indicativo si es de día segun horario de parametros generales
boolean manual = 0;                 // Situación actual entre Automatico y manual. Permite manipular luces y Número de DUMP
boolean arc_enc;                    // Determina cuando se ha encontrado al archivo de Backuo en OTHER
boolean saveChange = 0;             // Se activa para grabar datos en la SD luego de terminar el ciclo CLIENT de Datos Generales
boolean saveActividad = 0;          // Se activa para grabar datos en la SD luego de terminar el ciclo CLIENT de Trabajo   
boolean horario_activo;             // Horario programado para entrega de alimento
boolean validaCiclo = 0;            // Valida si el ciclo de alimentación esta activo
boolean clienteActivo = 0;          // Indicativo de cliente haciendo alguna petición
boolean clienteDisponible = 0;      // Indicativo de cliente haciendo alguna petición
boolean control_de_paso = false;    // Controla el calculo del tiempo para el proximo ciclo de actividades
boolean control_de_paso1 = false;   // Controla el calculo del tiempo para el proximo ciclo de actividades
boolean unsolopasoweb2 = true;      // Permite cargar los datos a mostrar en la web2
boolean unsolopasoweb3 = true;      // Permite cargar los datos a mostrar en la web3

File archivo;                       // Variable tipo file para manejar archivos obtenidos de la SD

String fecha_act;                   // Variable que almacena la fecha actual
String arrayDG[4];                  // Arreglo que contiene los valores de datos generales iniciales
String ultimo_ciclo;                // Hora del ultimo registro diario. Necesario para el calculo del tiempo entre DUMP'S
String val_hora_ant;                // Backup de hora ultimo_ciclo
String f_ultimo_ciclo;              // Fecha del ultimo registro diario. Necesario para el calculo del tiempo entre DUMP'S
String v_status;                    // Variable para mensajes del Pantalla Principal
String v_status2;                   // Variable para mensajes del Pantalla Parametros
String v_status3;                   // Variable para mensajes del Pantalla Other

int ind_ciclo_dump;                 // Activo en el ciclo de DUMP. control mensajes del Status. Varia según cada situación
int v_arc_diario[4];                // Almacena por separado los digitos de mes y dia incluido si es cero 
int cambios_DG[4];                  // Almacena los cambios realizados en parametros hasta que termina el loop de Cliente
int v_arc_backup[4];                // Almacena por separado los digitos de mes y dia incluido si es cero 
int ultimoRegistro[7];              // Almacena cada uno de los datos guardados del último registro guardado
int textoToArray[7];                // Almacena cada uno de los datos guardados del registro leido en historico llamado desde OTHER
int registroActual;                 // Número del último registro grabado
int v__ano;                         //////////////////////////////////////////////////////
int v__mes;                         //                                                  //
int v__dia;                         //      Variables para la hoja de parametros        //
int v__hora;                        //                                                  //
int v__min;                         //      Se usan para alterar los datos del          //
int v__a_s;                         //                                                  //
int v__dump;                        //      sistema.                                    //
int v__ini;                         //                                                  //
int v__fin;                         //////////////////////////////////////////////////////
int d1_act;                         // Variable que maneja el dia actual
int m1_act;                         // Variable que maneja el mes actual
int a1_act;                         // Variable que maneja el año actual
int h_act;                          // Variable que maneja la hora actual
int m_act;                          // Variable que maneja el minuto actual
int s_act;                          // Variable que maneja el segundo actual
int num_paso = 0;

int datosDiarios[10][6];            // Matriz multidimensional que contiene los datos generados de los DUMP
int datos[6];                       // Ultimo DUMP generado, alimenta el arreglo multidimensional

float hif;
float hic;
float hum;

long cal_tiempo;                    // Cantidad de segundos para proximo DUMP
long remanente;                     // Cantidad de segundos para terminar ciclo
long t_medio;                       // Cantidad de segundos para proximo DUMP
long tiempo3;                       // Almacena el tiempo para calcular proximo día
size_t count;                       // Cantidad de registros grabados en el arreglo multidimensional
size_t capacity;                    // Capacidad del arreglo multidimensional

unsigned long pasounminuto = 60000; // Aseguro que haya transcurrido un minuto para realizar guardado de archivo
unsigned long pasocincoseg = 5000;  // Aseguro que haya transcurrido 5 segundos para realizar lectura del sensor DHT

char buf[60];

inline void SPI_switchW5500 ()
{
    digitalWrite(SS_SD_CARD, HIGH);
    digitalWrite(SS_ETHERNET, LOW);
}

inline void SPI_switchSD ()
{
    digitalWrite(SS_ETHERNET, HIGH);
    digitalWrite(SS_SD_CARD, LOW);
}

DHT dht(DHTPIN, DHTTYPE);

//----------------------- SETUP ----------------------------//
void setup()
{
    SPI.begin();
    Wire.begin();

    Serial.begin(9600);
    while (!Serial) {
        ;
    } 
    Sprintln("Monitor Serial OK.");

    delay(1000);

    dht.begin();
    
    if (!SD.begin(SS_SD_CARD)) {
        Sprintln("SD.init failed");
        setup();
    } 

    inf_datos();
    inicioActivida = 1;
    ind_ciclo_dump = 1;    
    Sprintln("Verificar ultimo dato cargado");
    verifica_ult_dato();
    Sprintln("Regreso de verificar datos");
    d_o_n = don();
    umbral = umbral1;

    Sprintln(F("Feed and Lighting"));
    Sprint(F("Version: v. "));
    Sprintln(VERSION);

    delay(1000);

    v_pin16 = 1;
    v_pin17 = 1;

    pinMode(A0, INPUT);
    pinMode(pDump, INPUT);
    pinMode(pLed8, OUTPUT);
    pinMode(pLed9, OUTPUT);
    pinMode(pin15, OUTPUT);
    pinMode(pin16, OUTPUT);
    pinMode(pin17, OUTPUT);
    pinMode(pkw, OUTPUT);

    digitalWrite(pDump, v_pDump);
    digitalWrite(pLed8, v_pLed8);
    digitalWrite(pLed9, v_pLed9);
    digitalWrite(pin16, v_pin16);

    delay(1000);

    Ethernet.init(SS_ETHERNET);
//    if(!Ethernet.begin(mac)) {
        Sprintln("Mounting the WEB Server");
        Ethernet.begin(mac, ip, dns_server, gateway, subnet);
//        Ethernet.begin(mac, ip);
//        while(!Ethernet.begin(mac)){
//            Ethernet.begin(mac, ip, dns_server, gateway, subnet);
//            Ethernet.begin(mac, ip);
//            delay(500);
//        }
//    }
    server.begin();
    delay(1000);
    Sprint("server is at ");Sprintln(Ethernet.localIP());
    
    CreateList(10);                      // Se crea el elemento Array de una posición

    cargaFecha();
    tiempo_inicial = millis();
    Sprint("Tiempo inicial: "); Sprintln(tiempo_inicial);
}

void loop() {
    eval_pines();
    checkForClients();
    if (pasounminuto < millis()) {
        if (saveChange == true) {               //  En caso de estar activo, procede a guardar los registros en el Archivo Principal
            guardarCambios();
            ver_arc_prin();
            saveChange = false;
            delay(1000);
        }
        if (saveActividad == true) {            //  En caso de estar activo, procede a guardar los registros en el Archivo de artividades
            guardarRegistro();
            saveActividad = false;
            delay(1000);
        }
        if (clienteDisponible == 0){
            #if DEBUG
                Sprintln("Cliente no dispoonible");
            #endif
        }
        pasounminuto = millis()+60000;
    }        
}

void checkForClients(){
    String request;
    EthernetClient client = server.available();
    if( client ){
        clienteDisponible = 1;
        clienteActivo = 1;
        boolean currentLineIsBlank = true;
        boolean ok = false;
        while (client.connected()) {
            if (client.available()) {
                char c = client.read();
                request += c;
                #if DEBUG
                    Sprint(c);
                #endif
                if (c == '\n' && currentLineIsBlank) { // fin de la solicitud
                    ok = true;
                    break;
                }
                if (c == '\n') {
                    currentLineIsBlank = true;
                } 
                else if (c != '\r') {
                    currentLineIsBlank = false;
                }
            }
        }
        if( !ok ) // mensaje HTTP inválido
        return;

        int tipo_sms = checkRequest( request );
        
        if (tipo_sms == 0){  // es un GET
            if (request.startsWith("GET / HTTP")) muestroWeb1(client);
            else if (request.startsWith("GET /parameter")) muestroWeb2(client);
            else if (request.startsWith("GET /other")) {
                v_status3 = "Select the month and day to locate file";
                muestroWeb3(client);
            }
            else if (request.startsWith("GET /ajax1 HTTP")) muestroAjax1(client);
            else if (request.startsWith("GET /ajax2 HTTP")) muestroAjax2(client);
            else if (request.startsWith("GET /btn_delete")) borrarArchivo(client);
            else if (request.startsWith("GET /muestra")) muestraArchivo(client, request.substring(12, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /opc_manual")) cambioManual(client, request.substring(15, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /opc_luz")) cambioLuz(client, request.substring(12, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /umbral/")) cambioUmbral(client, request.substring(12, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /v_bSalvar/")) salvarCambios(client, request.substring(15, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /v__ano/")) verificaAno(client, request.substring(12, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /v__mes/")) verificaMes(client, request.substring(12, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /v__dia/")) verificaDia(client, request.substring(12, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /v__hora/")) verificaHora(client, request.substring(13, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /v__min/")) verificaMin(client, request.substring(12, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /v__a_s/")) verificaA_S(client, request.substring(12, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /v_dump_ajax/")) verificaDump(client, request.substring(17, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /v__ini/")) verificaIni(client, request.substring(12, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /v__fin/")) verificaFin(client, request.substring(12, request.indexOf(" HTTP/1.1")));
            else if (request.startsWith("GET /v_bUndo/")) botonUndo(client, request.substring(13, request.indexOf(" HTTP/1.1")));
            else {
                #if DEBUG
                    Sprint(F("------------------------>  "));
                    Sprintln(request);
                #endif
                client.println(F("HTTP/1.1 200 OK"));
                client.println(F("Content-Type: text/html\r\n"));
                client.println();
                client.println(F("Peticion GET no registrada"));
                #if DEBUG
                    Sprintln(F("Peticion no registrada"));
                #endif
                client.flush();
            }

        } else if (tipo_sms == 1) {  // es un POST
            String payload = "";
            // leer cuerpo del mensaje
            while( client.available() ){
                char c = client.read();
                payload += c;
            }
            #if DEBUG
                Sprint("payload: ");
                Sprintln(payload);
            #endif
            makePOST(payload);
            muestroWeb1( client );
        }
        delay(1);
        client.stop(); // cerrar la conexión
    } else {
        clienteActivo = 0;
        clienteDisponible = 0;
    }
}

int checkRequest(String &request) {
    // obtener la posición de GET
    int idx = request.indexOf("GET");
    if (idx == 0) return 0;
    idx = request.indexOf("POST");
    if (idx == 0) return 1;
    // Other
    return -1;
}

void makePOST(String &sms) {
}

void muestroWeb1(EthernetClient &client_web) {
    unsolopasoweb2 = true;
    unsolopasoweb3 = true;
    Sprintln(F("Muestro Principal"));
    client_web.println(F("HTTP/1.1 200 OK"));
    client_web.println(F("Content-Type: text/html"));
    client_web.println();
    client_web.print("<!DOCTYPE html>");  //Si pongo F Chrome me encapsula la web
    client_web.print(F("<html><head><title>Feed and Lighting</title>"));
    client_web.print(F("<link rel=\"icon\"  type=\"image/ico\" href=\"favicon.ico\">"));
    client_web.print(F("<style type=\"text/css\">"));
    client_web.print(F("progress[value] {width: 250px; height: 8px; appearance: none; -webkit-appearance: none;}"));
// colocar el navegador. Esta linea es para Chrom, safari, opera    
    client_web.print(F("progress[value]::-webkit-progress-bar {background-color: #0eed0e;}"));
    client_web.print(F("progress[value]::-webkit-progress-value {background-color: #8da68d;}"));
    client_web.print(F(".main{width:100px; height:33px;background-color: #006666;}"));
    client_web.print(F(".main1{width:100px; height:33px;background-color: #006666;}"));
    client_web.print(F(".main2{width:100px; height:33px;background-color: #f5ad05;}"));
    client_web.print(F(".r_v25{background: linear-gradient(90deg, rgb(255, 128, 128)  25%, rgb(128, 255, 128) );}"));
    client_web.print(F(".r_v50{background: linear-gradient(90deg, red, rgb(255, 128, 128) 50%);}"));
    client_web.print(F(".v_a25{background: linear-gradient(90deg, rgb(128, 255, 128), rgb(255, 128, 227), rgb(128, 128, 255) 25%);}"));
    client_web.print(F(".v_a50{background: linear-gradient(90deg, rgb(128, 128, 255) 50%, blue);}"));
    client_web.print(F(".r_v75{background: linear-gradient(90deg, rgb(255, 128, 128) ,rgb(255, 253, 128), rgb(128, 255, 128) 25%);}"));
    client_web.print(F(".v_a75{background: linear-gradient(90deg, rgb(128, 255, 128) 25%, rgb(128, 128, 255));}"));
    client_web.print(F(".v_a25{background: linear-gradient(90deg, rgb(128, 255, 128),rgb(128, 128, 255) 25%);}"));
    client_web.print(F(".r_v_a{background: linear-gradient(90deg, red, green ,blue);}"));
    client_web.print(F(".rojo{background: red;}"));
    client_web.print(F(".verde{background: green;}"));
    client_web.print(F(".azul{background: blue;}"));
    client_web.print(F(".barra {text-align: center;font-weight: bold;float: left;color: #b7b7b7;margin: 8px 2px 0 2px;padding-right: 10px;font-size: 1rem;width: 85px;margin-top: 0px;}"));    
    client_web.print(F(".btn-3d {padding-left: 10px;padding-right: 10px;padding-top: 1px;padding-bottom: 2px;border: 1px solid #995309;border-radius: 4px;background-color: #d9750b;color: #fff;"));
    client_web.print(F("font-size: 1.5rem;text-shadow: 0 -1px 0 rgba(0,0,0,.5);box-shadow: 0 1px 0 rgba(255,255,255,.5) inset,0 1px 3px rgba(0,0,0,.2);}"));
    client_web.print(F(".btn-3d:hover, .btn-3d:focus {background-color: #e0811b;}"));
    client_web.print(F(".btn-3d:active {background-color: #cf6a00;box-shadow: 0 2px 3px 0 rgba(0,0,0,.2) inset;}"));
    client_web.print(F(".dat_ent {text-align: right; font-size: 20px; height: 29px; width: 25px; border-top-width:1px; padding-top:1px;}"));
    client_web.print(F("div, label{float:left;color:#b7b7b7;}"));
    client_web.print(F(".div_barra{color: white;border: 1px solid black;padding: 5px;margin: 5px;border-radius: 10px;text-align: center;float: left;font-weight: bold;width: 100px;border-top-width: 0px;padding-bottom: 0px;border-bottom-width: 0px;border-left-width: 0px;border-right-width: 0px;padding-top: 0px;margin-top: 0px;margin-bottom: 0px;height: 20px;}"));
    client_web.print(F("footer {color: white; border: 1px solid black; padding: 5px; margin: 5px; border-radius: 10px; text-align: center; float: left; font-weight:bold;}"));
    client_web.print(F("label{margin: 8px 2px 0 2px;}"));
    client_web.print(F(".c_label_g {font-style:bold; color:#b7b7b7; font-size: 10px}"));
    client_web.print(F(".c_label_n {font-style:bold; color:#005CB9; font-size: 10px}"));
    client_web.print(F(".switch-bg {width: 37px;background: #d6d6d6;height: 13px;float: left;padding:2px;border-radius: 30px;border: 2pt solid #b7b7b7;}"));
    client_web.print(F(".switch {margin: -4px 0 -5px 0px;background: #51acb8;position: absolute;height: 5px;width: 5px;border-radius: 50px;border: 2pt solid;transition: .1s ease-in-out;cursor: pointer;}"));
    client_web.print(F(".switch-on {margin: -4px 0 -5px 25px;background: #E74C3C;}"));
    client_web.print(F("body {color: #316aa57a;background-color: white;}"));
    client_web.print(F("a {border: 1px solid black; padding: 5px; margin: 5px; height: 30px; width: 100px; border-radius: 10px; text-align: center; float: left; font-weight:bold;}"));
    client_web.print(F("#fecha_act {background-color: #006666; height: auto; width: 100px;}"));
    client_web.print(F("#hora_act {background-color: #006666; font-family: 'Font Bureau Agency', 'Agency FB', sans-serif; font-size: 16px; height: auto; width: 100px;}"));
    client_web.print(F(".v_temp {background-color: #006666; height: auto; width: 100px; transition: background-color 1s}"));
    client_web.print(F("#can_dump {background-color: #006666; height: auto; width: 100px;}"));
    client_web.print(F("#u_d {background-color: #006666; height: auto; width: 100px;}"));
    client_web.print(F(".Day {background-color: yellow; color: black; height: auto; width: 100px;}"));
    client_web.print(F(".Night {background-color: #00003f; height: auto; width: 100px;}"));
    client_web.print(F("div {color: white; border: 1px solid black; padding: 5px; margin: 5px; border-radius: 10px; text-align: center; float: left; font-weight:bold;}"));
    client_web.print(F("#principal1 {background-color: #000F00;}"));
    client_web.print(F(".cabecera {background-color: #004F00; border: 0px solid black; clear: left; height: auto; width: 100px;}"));
    client_web.print(F(".cabecera2 {background-color: #004F00; border: 0px solid black; clear: left; height: auto; width: 88px;}"));
    client_web.print(F(".formulario {background-color: #004F00; width: 572px;}.oculto{background-color: #004F00; border: none;}"));
    client_web.print(F(".formulario2 {background-color: #004F00; width: 264px;}"));
    client_web.print(F(".formulario3 {background-color: #004F00; width: 264px;}"));
    client_web.print(F(".formulario4 {background-color: #004F00; width: 242px;}"));
    client_web.print(F(".cabeza {width: auto; background-color: #004F00; border: 0px solid black; clear: left;}"));
    client_web.print(F(".rectangulo {background-color: #004F00; float:left; width:550px; border: 1px solid black; padding: 5px; margin: 5px;}"));
    client_web.print(F("#sel3 {width: 110px; border-radius: 5px; font-weight:bold;text-align: center;}"));
    client_web.print(F("#v_bSalvar {width: 120px;}"));
    client_web.print(F(".oculto1{width: auto; background-color: #004F00; border: none;}"));
    client_web.print(F(".derecha {clear: right;}"));
    client_web.print(F(".OFF {background-color: #006666;} .ON {background-color: red;}"));
    client_web.print(F(".OFF1 {font-weight:bold} .ON1 {font-weight:normal}"));
    client_web.print(F(".original {background-color: white;} .ON {background-color: red;}"));
    client_web.print(F(".status_system {width: 412px; border-radius: 5px; margin-top: 4px; font-weight:bold;text-align: left; background-color: white;"));
    client_web.print(F("font-size: 14px; color: black; line-height: 24px}"));
    client_web.print(F("input, #boton {width: 73px; border-radius: 5px; font-weight:bold;text-align: center;"));
    client_web.print(F("font-family: 'Font Bureau Agency', 'Agency FB', sans-serif; font-size: 22px;}"));
    client_web.print(F("#boton:hover{border: 3px solid black;}"));
    client_web.print(F("#principal2 {background-color: #000F00;}"));
    client_web.print(F(".boton {border: 1px solid #2e518b; padding: 10px; background-color: #2e518b; color: #ffffff;"));
    client_web.print(F("text-decoration: none; font-family: 'Helvetica', sans-serif; border-radius: 75px;}"));
    client_web.print(F(".accesos {width: 200px; background-color: #86ab3c; border-radius: .5em; cursor: pointer; transition: background-color 1s;"));
    client_web.print(F("text-align: center; font-size: 20px; color: #fff; line-height: 24px;}"));
    client_web.print(F(".accesos:hover {background-color: #888;}"));
    client_web.print(F(".largo {width: 100px;}"));
    client_web.print(F(".identifica {float: right;padding-bottom: 0px;width: 150px;margin-bottom: 5px;border-bottom-width: 0px;padding-top: 0px;border-top-width: 0px; text-align: right;font-weight:normal}"));
    client_web.print(F(".titulo {width: 550px;margin-top: 0px;padding-top: 0px;margin-bottom: 0px;height: 36.833px;border-top-width: 0px;padding-bottom: 0px;border-bottom-width: 0px;}"));
    client_web.print(F("</style>"));

    client_web.print(F("<script type=\"text/javascript\">"));  // ************************ comienza script ***************************
    client_web.print(F("let identificadorTiempoDeEspera;"));

    client_web.print(F("function Switch_luz(){var man01 = document.getElementById(\"s1\");"));
    client_web.print(F("if (man01.className == \"switch switch-on\") {var e = document.getElementById(\"luz\");if (e.className == \"switch switch-on\")"));
    client_web.print(F("{e.className = \"switch\";var valor=\"OFF\";}else{e.className = \"switch switch-on\";var valor=\"ON\";}"));
    client_web.print(F("var xhttp; xhttp = new XMLHttpRequest();"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/opc_luz\" + valor; xhttp.open(\"GET\", url, true); xhttp.send();setTimeout(function(){update()},500);}}"));

    client_web.print(F("function Switch(){var e = document.getElementById(\"s1\");if (e.className == \"switch switch-on\"){"));
    client_web.print(F("var answer = confirm(\"Do you want to turn off?\");if (answer){e.className = \"switch\";"));
    client_web.print(F("document.getElementById(\"main_02\").className = \"main1\";"));
    client_web.print(F("document.getElementById(\"cambio\").className = \"main1\";"));
    client_web.print(F("document.getElementById(\"min\").disabled = 1;"));
    client_web.print(F("document.getElementById(\"plus\").disabled = 1;"));
    client_web.print(F("document.getElementById(\"label_nom1\").className = \"c_label_g\";"));
    client_web.print(F("document.getElementById(\"label_nom2\").className = \"c_label_g\";}}"));
    client_web.print(F("else{var answer = confirm(\"Do you want to turn on?\");if (answer)"));
    client_web.print(F("{e.className = \"switch switch-on\";document.getElementById(\"main_02\").className = \"main2\";"));
    client_web.print(F("document.getElementById(\"cambio\").className = \"main2\";"));
    client_web.print(F("document.getElementById(\"min\").disabled = 0;"));
    client_web.print(F("document.getElementById(\"plus\").disabled = 0;"));
    client_web.print(F("document.getElementById(\"label_nom1\").className = \"c_label_n\";"));
    client_web.print(F("document.getElementById(\"label_nom2\").className = \"c_label_n\";}}"));
    client_web.print(F("var xhttp; xhttp = new XMLHttpRequest();if (e.className==\"switch switch-on\"){var valor=\"ON\";}else{var valor=\"OFF\";}"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/opc_manual\" + valor; xhttp.open(\"GET\", url, true); xhttp.send();setTimeout(function(){update()},500);}"));

    client_web.print(F("function update(){var xhttp;xhttp=new XMLHttpRequest();xhttp.onreadystatechange=function(){"));
    client_web.print(F("if (xhttp.readyState == 4 && xhttp.status == 200) {var json = JSON.parse(xhttp.responseText);"));
    client_web.print(F("document.getElementById(\"fecha_act\").innerHTML = json.arduino.fecha_act;"));
    client_web.print(F("document.getElementById(\"hora_act\").innerHTML = json.arduino.hora_act;"));
    client_web.print(F("document.getElementById(\"v_tempc\").innerHTML = json.arduino.v_tempc;"));
    client_web.print(F("document.getElementById(\"v_tempf\").innerHTML = json.arduino.v_tempf;"));
    client_web.print(F("document.getElementById(\"v_hum\").innerHTML = json.arduino.v_hum;"));
    client_web.print(F("document.getElementById(\"can_dump\").innerHTML = json.arduino.can_dump;"));
    client_web.print(F("document.getElementById(\"u_d\").innerHTML = json.arduino.u_d;"));
    client_web.print(F("document.getElementById(\"d_y_n\").innerHTML = json.arduino.d_y_n;"));
    client_web.print(F("document.getElementById(\"d_y_n\").className = json.arduino.d_y_n;"));
    client_web.print(F("document.getElementById(\"D13\").className = json.arduino.led;"));
    client_web.print(F("document.getElementById(\"luz\").className = json.arduino.luz;"));
    client_web.print(F("document.getElementById(\"sistema\").innerHTML = json.arduino.status_system;"));
    client_web.print(F("document.getElementById(\"progreso\").value = json.arduino.progreso;"));
    client_web.print(F("document.getElementById(\"dato_input\").value = json.arduino.umbral;"));
    client_web.print(F("temp_btn(json.arduino.v_tempc)}};"));

    client_web.print(F("xhttp.open(\"GET\", \"http://")); //Imprimo la IP del propio arduino
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/ajax1\", true);xhttp.send();}"));

    client_web.print(F("function temp_btn(temp_act) { "));
    client_web.print(F("if (temp_act >= 26) { var mayor = 30; var menor = 26; var diferencia = mayor - menor; var a_calcular = temp_act - menor; "));
    client_web.print(F("var porcentaje = (a_calcular/diferencia) * 100; if (porcentaje<0){ porcentaje = porcentaje * (-1); } if (porcentaje>=75){ var color_act = \"rojo\";"));
    client_web.print(F("} else if (porcentaje<=25){ var color_act = \"r_v25\" } else { var color_act = \"r_v50\" } } else if (temp_act <= 23) {  var mayor = 23; "));
    client_web.print(F("var menor = 20; var diferencia = mayor - menor; var a_calcular = temp_act - menor; var porcentaje = (a_calcular/diferencia) * 100; "));
    client_web.print(F("if (porcentaje<0){ porcentaje = porcentaje * (-1); } if (porcentaje>=75){ var color_act = \"v_a50\" } else if (porcentaje<=25){ var color_act = \"azul\";"));
    client_web.print(F("} else { var color_act = \"v_a25\" }} else {var mayor = 26;var menor = 23;var diferencia = mayor - menor;var a_calcular = temp_act - menor;"));
    client_web.print(F("var porcentaje = (a_calcular/diferencia) * 100;if (porcentaje<0){porcentaje = porcentaje * (-1);}if (porcentaje>=75){var color_act = \"r_v75\";}"));
    client_web.print(F("else if (porcentaje<=25){var color_act = \"v_a75\";} else {var color_act = \"verde\";}} var ele1 = document.getElementById(\"v_tempc\"); "));
    client_web.print(F("ele1.className = color_act+\" div largo\"; var ele2 = document.getElementById(\"v_tempf\"); ele2.className = color_act+\" div largo\"; }"));

    client_web.print(F("function cambia_umbral(){var man01 = document.getElementById(\"s1\");"));
    client_web.print(F("if (man01.className == \"switch switch-on\") {var xhttp; xhttp = new XMLHttpRequest();"));
    client_web.print(F("var valor=document.getElementById(\"dato_input\").value;"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/umbral/\" + valor; xhttp.open(\"GET\", url, true); xhttp.send();setTimeout(function(){update()},500);}}"));

    client_web.print(F("function fun_param()"));                           //Llamado a PARAMETROS DEL SISTEMA FUNCTION fun_param(id)
    client_web.print(F("{var xhttp;xhttp=new XMLHttpRequest();"));
    client_web.print(F("xhttp.onreadystatechange=function(){"));
    client_web.print(F("if (xhttp.readyState == 4 && xhttp.status == 200) {var json = JSON.parse(xhttp.responseText);"));
    client_web.print(F("}};"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/parameter\"; xhttp.open(\"GET\", url, true); xhttp.send();}"));

    client_web.print(F("function fun_other()"));                           //Llamado a OTROS ACCESOS DEL SISTEMA fun_other()
    client_web.print(F("{var xhttp;xhttp=new XMLHttpRequest();"));
    client_web.print(F("xhttp.onreadystatechange=function(){"));
    client_web.print(F("if (xhttp.readyState == 4 && xhttp.status == 200) {var json = JSON.parse(xhttp.responseText);"));
    client_web.print(F("}};"));
    client_web.print(F("xhttp.open(\"GET\", \"/other\", true);xhttp.send();}")); 

    client_web.print(F("function fun_min(){ var val_act = Number(document.getElementById(\"quantity\").value);")); 
    client_web.print(F("val_act = val_act - 1; document.getElementById(\"quantity\").value = val_act; }")); 
    client_web.print(F("function fun_plus(){ var val_act = Number(document.getElementById(\"quantity\").value);")); 
    client_web.print(F("val_act = val_act + 1; document.getElementById(\"quantity\").value = val_act; }")); 

    client_web.print(F("function cambiaIntervalo(tiempo){if (tiempo==0) clearInterval(id_interval);else id_interval = setInterval('update()',tiempo);}"));
    client_web.print(F("var id_interval = setInterval('update()',1000);"));

    client_web.print(F("function checkTime() {"));
    client_web.print(F("var t0 ="));
    client_web.print(millis());
    client_web.print(F(";var t1 ="));
    client_web.print(millis()+1500);
    client_web.print(F(";var t2 ="));
    client_web.print(pasounminuto);
    client_web.print(F(";var s1 ="));
    client_web.print(saveChange);
    client_web.print(F(";var s2 ="));
    client_web.print(saveActividad);
    client_web.print(F(";if (s1 == 1 || s2 == 1) {if (t2 < t0) {"));
    client_web.print(F("var t_10 = t0 - t2;"));
    client_web.print(F("console.log(\"Rutina de salida por error 1. Tiempo: \"+t_10);console.log(\"Abortando XHTTP\");xhttp.abort();"));
    client_web.print(F("borrarAlerta();} else {"));
    client_web.print(F("if((t1 - t2) <= 500) {console.log(\"Rutina de salida por error 2\");"));
    client_web.print(F("console.log(\"Abortando XHTTP\");xhttp.abort();"));
    client_web.print(F("borrarAlerta();}}}}"));

    client_web.print(F("document.addEventListener(\"DOMContentLoaded\", temporizadorDeRetraso, false);"));
    
    client_web.print(F("function temporizadorDeRetraso() {"));
    client_web.print(F(";var s1 ="));
    client_web.print(saveChange);
    client_web.print(F(";var s2 ="));
    client_web.print(saveActividad);
    client_web.print(F(";if (s1 == 1 || s2 == 1) {"));
    client_web.print(F("identificadorTiempoDeEspera = setInterval(checkTime, 500);}"));
    client_web.print(F("}"));
    client_web.print(F("function borrarAlerta() {clearInterval()(identificadorDeTemporizador);}"));

    client_web.print(F("</script>"));   // ************************ termina script ***************************

    client_web.print(F("</head>"));
    client_web.print(F("<body>"));    // ************************ comienzo ***************************

    client_web.print(F("<div id = \"principal1\" class=\"formulario\">"));
    client_web.print(F("<div class=\"identifica\";>Hi "));
    client_web.print(client_web.remoteIP());
    client_web.print(F("!!!</div>"));            
    client_web.print(F("<div class=\"titulo\">"));
    client_web.print(F("<h2 style=\"margin-top: 0px;margin-bottom: 10px;\">Feed and Lighting v. "));
    client_web.print(VERSION);
    client_web.print(F("</h2>"));
    client_web.print(F("</div>"));
    
    client_web.print(F("<div id=\"datos\" class=\"formulario2\">"));
    client_web.print(F("<p>COOP STATUS</p>"));
    client_web.print(F("<div class=\"formulario4\">"));
    client_web.print(F("<div id = \"etiquetafecha_act\" class=\"cabecera\"> Date</div><div id=\"fecha_act\">"));
    client_web.print("N/A");
    client_web.print(F("</div><div id = \"etiquetahora_act\" class=\"cabecera\">Time</div><div id=\"hora_act\">"));
    client_web.print("N/A");
    client_web.print(F("</div>"));
    
    client_web.print(F("<div id = \"etiquetaMode\" class=\"cabecera\">Mode</div>"));
    client_web.print(F("<div id=\"d_y_n\" "));
    d_o_n? client_web.print(F(" class=\"Day\">Day")) : client_web.print(F(" class=\"Night\">Night"));
    client_web.print(F("</div>"));
    
    client_web.print(F("<div id = \"etiquetav_tempc\" class=\"cabecera\">Temp. *C</div><div class=\"v_temp\" id=\"v_tempc\">"));
    client_web.print("N/A");
    client_web.print(F("</div>"));

    client_web.print(F("<div id = \"etiquetav_tempf\" class=\"cabecera\">Temp. *F</div><div class=\"v_temp\" id=\"v_tempf\">"));
    client_web.print("N/A");
    client_web.print(F("</div>"));

    client_web.print(F("<div id = \"etiquetav_hum\" class=\"cabecera\">Humidity RH</div><div class=\"v_temp\" id=\"v_hum\">"));
    client_web.print("N/A");
    client_web.print(F("</div>"));

    client_web.print(F("<div id = \"etiquetaD13\" class=\"cabecera\">Dumping Feed Now</div>"));
    client_web.print(F("<div id = \"main_01\" class=\"main\">"));
    client_web.print(F("<label class=\"c_label_g\">OFF</label>"));
    client_web.print(F("<div class=\"switch-bg\">"));
    client_web.print(F("<div id=\"D13\" class=\"switch\" spellcheck=\"true\"></div>"));
    client_web.print(F("</div>"));
    client_web.print(F("<label class=\"c_label_g\">ON</label>"));
    client_web.print(F("</div>"));

    client_web.print(F("<div id = \"etiquetaluz\" class=\"cabecera\">Light</div>"));
    client_web.print(F("<div id = \"main_02\" class=\"main1\">"));
    client_web.print(F("<label class=\"c_label_g\" id = \"label_nom1\">OFF</label>"));
    client_web.print(F("<div class=\"switch-bg\">"));
    client_web.print(F("<div id=\"luz\" class=\"switch\" onclick=\"Switch_luz()\" spellcheck=\"true\"></div>"));
    client_web.print(F("</div>"));
    client_web.print(F("<label class=\"c_label_g\" id = \"label_nom2\">ON</label>"));
    client_web.print(F("</div></div>"));
    client_web.print(F("</div>"));

    client_web.print(F("<div class=\"formulario3\"><p>SETTING</p><div class=\"formulario4\">"));
    client_web.print(F("<div id = \"etiquetaDUMP1\" class=\"cabecera2\">Dumps for Today</div>"));
    client_web.print(F("<div id = \"can_dump\">"));
    client_web.print(val_dump);
    client_web.print(F("</div>"));

    client_web.print(F("<div id = \"etiquetaDUMP2\" class=\"cabecera2\">Remaining Dumps</div>"));
    client_web.print(F("<div id=\"umbral\" class=\"main1\">"));
    client_web.print(F("<input id=\"dato_input\" type=\"number\" onchange=\"cambia_umbral()\" readOnly=\"true\" value=\""));
    client_web.print(umbral);
    client_web.print(F("\" onmouseover=\"cambiaIntervalo(0)\" onmouseout=\"cambiaIntervalo(1000)\"></div>"));
    
    client_web.print(F("<div id=\"etiquetaCambio\" class=\"cabecera2\">DUMP Change</div>"));
    client_web.print(F("<div id=\"cambio\" class=\"main1\">"));
    client_web.print(F("<button id=\"min\" class=\"btn btn-3d\" type=\"button\" onclick=\"fun_min()\" disabled=\"true;\" style=\"float: left\">-</button>"));
    client_web.print(F("<input class=\"dat_ent\" name=\"quantity\" id=\"quantity\" value=\"0\" readOnly=\"true\">"));
    client_web.print(F("<button id=\"plus\" class=\"btn btn-3d\" type=\"button\" onclick=\"fun_plus()\" disabled=\"true;\" style=\"float: right\">+</button>"));
    client_web.print(F("</div>"));

    client_web.print(F("<form>"));
    client_web.print(F("<div id = \"etiquetau_d\" class=\"cabecera2\">Recent Dump at</div><div id=\"u_d\">"));
    client_web.print("N/A");
    client_web.print(F("</div>"));

    client_web.print(F("<div class=\"div_barra\">"));
    client_web.print(F("<label class=\"barra\" for=\"progreso\">"));
    client_web.print(F("<progress style=\"width: 95px\" id=\"progreso\" max=\"100\" value=\""));
    client_web.print("100");
    client_web.print(F("\"></progress>"));
    client_web.print(F("</label>"));
    client_web.print(F("</div>"));
    client_web.print(F("</form>"));
    client_web.print(F("</div>"));

    client_web.print(F("<div class=\"formulario4\">"));
    client_web.print(F("<div id = \"etiquetaboton\" class=\"cabecera2\">Override Feed, Dump and Lights</div>"));

    client_web.print(F("<div class=\"main\">"));
    client_web.print(F("<label class=\"c_label_g\">OFF</label>"));
    client_web.print(F("<div class=\"switch-bg\">"));
    client_web.print(F("<div id=\"s1\" class=\"switch\" onclick=\"Switch()\" spellcheck=\"true\"></div>"));
    client_web.print(F("</div>"));
    client_web.print(F("<label class=\"c_label_g\">ON</label>"));
    client_web.print(F("</div>"));
    client_web.print(F("</div>"));
    client_web.print(F("</div>"));

    client_web.print(F("<div class=\"rectangulo\">"));
    client_web.print(F("<div id=\"b_parameter\">System status</div>"));
    
    client_web.print(F("<div class=\"status_system\" id=\"sistema\" value=\""));
    client_web.print(v_status);
    client_web.print(F("\" onmouseover=\"cambiaIntervalo(0)\" onmouseout=\"cambiaIntervalo(1000)\">"));
    client_web.print(F("</div>"));
    client_web.print(F("</div>"));

    client_web.print(F("<div class=\"rectangulo\">"));
    client_web.print(F("<form method=\"GET\">"));
    client_web.print(F("<div id = \"b_parameter\" >Access</div>"));

    client_web.print(F("<a class=\"accesos\" href='http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/parameter' onclick=fun_param()>Go to parameters</a>"));

    client_web.print(F("<a class=\"accesos\" href='http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/other' onclick=fun_other()>Go to Others</a>"));
    client_web.print(F("</form>"));
    client_web.print(F("</div>"));
    client_web.print(F("</div>"));

    client_web.print(F("<script type=\"text/javascript\">checkTime();</script>"));

    client_web.print(F("</body>"));
    client_web.print(F("</html>"));
    client_web.flush();
    client_web.stop();  //Cierro el cliente
}

void cargaValoresIniciales() {
    v__ano = rtc.getYear()+2000;
    v__mes = rtc.getMonth(century);
    v__dia = rtc.getDate();
    v__hora = rtc.getHour(h12Flag, pmFlag);
    v__min = rtc.getMinute();
    v__a_s = alim_ser;
    v__dump = val_dump;
    v__ini = hora_ini;
    v__fin = hora_fin;

    int i = 0;
    while(true) {
        switch ( i ) {
        case 0: 
            cambios_DG[i] = val_dump;
            break;
        case 1: 
            cambios_DG[i] = alim_ser;
            break;
        case 2: 
            cambios_DG[i] = hora_ini;
            break;
        case 3: 
            cambios_DG[i] = hora_fin;
            break;
        }
        i = i + 1;
        if (i == 4) {
            break;
        }
    }
}

void muestroWeb2(EthernetClient &client_web) {
    if (unsolopasoweb2) {
        cargaValoresIniciales();
        unsolopasoweb2 = false;
    }
    Sprintln(F("Muestro Parametros"));
    client_web.println(F("HTTP/1.1 200 OK"));
    client_web.println(F("Content-Type: text/html"));
    client_web.println();
    client_web.print("<!DOCTYPE html>");  //Si pongo F Chrome me encapsula la web
    client_web.print(F("<html><head><title>Feed and Lighting</title>"));
//    client_web.print(F("<link rel=\"icon\" href=\"data:,\">"));
    client_web.print(F("<link rel=\"shortcut icon\" href=\"http://localhost/\" />"));
    client_web.print(F("<style type=\"text/css\">body {color: black;background-color: #D7DBDA;}"));
    client_web.print(F("#hora_act {font-family: 'Font Bureau Agency', 'Agency FB', sans-serif; font-size: 14px;}"));
    client_web.print(F("div {background-color: #006666; color: white; border: 1px solid black; padding: 5px; margin: 5px; height: auto;"));
    client_web.print(F("width: 100px; border-radius: 10px; text-align: center; float: left; font-weight:bold;}"));
    client_web.print(F(".cabecera {background-color: #004F00; border: 0px solid black; clear: left;}"));
    client_web.print(F("a {border: 1px solid black; padding: 5px; margin: 5px; height: 30px; width: 100px; border-radius: 10px; text-align: center; float: left; font-weight:bold;}"));
    client_web.print(F("button {border: 1px solid black; padding: 5px; margin: 5px; height: auto; width: 100px; border-radius: 10px; text-align: center; float: left; font-weight:bold;}"));
    client_web.print(F(".rectangulo {background-color: #004F00; float:left; width:525px; border: 1px solid black; padding: 5px; margin: 5px;}"));
    client_web.print(F(".cabeza {width: auto; background-color: #004F00; border: 0px solid black; clear: left;}"));
    client_web.print(F("#sel3 {width: 110px; border-radius: 5px; font-weight:bold;text-align: center;}"));
    client_web.print(F("#v_bSalvar {width: 120px;}"));
    client_web.print(F(".formulario2 {background-color: #004F00; width: 550px;}"));
    client_web.print(F(".oculto1{width: auto; background-color: #004F00; border: none;}"));
    client_web.print(F(".derecha {clear: right;}"));
    client_web.print(F(".formulario {background-color: #004F00; width: 550px;}.oculto{background-color: #004F00; border: none;}"));
    client_web.print(F(".formulario3 {background-color: #004F00; width: auto;}"));
    client_web.print(F(".OFF {background-color: #006666;} .ON {background-color: red;}"));
    client_web.print(F(".OFF1 {font-weight:bold} .ON1 {font-weight:normal}"));
    client_web.print(F(".original {background-color: white;} .ON {background-color: red;}"));
    client_web.print(F(".Day {background-color: yellow; color: black;} .Night {background-color: #00003f;}"));
    client_web.print(F("input, #boton {width: 80px; border-radius: 5px; font-weight:bold;text-align: center;}#boton:hover{border: 3px solid black;}"));
    client_web.print(F("#boton:hover{border: 3px solid black;} "));
    client_web.print(F("#principal1 {background-color: #000F00;}"));
    client_web.print(F("#principal2 {background-color: #000F00;}"));
    client_web.print(F(".boton {border: 1px solid #2e518b; padding: 10px; background-color: #2e518b; color: #ffffff;")); 
    client_web.print(F("text-decoration: none; font-family: 'Helvetica', sans-serif; border-radius: 75px;}"));
    client_web.print(F(".accesos {width: 200px; background-color: #86ab3c; border-radius: .5em; cursor: pointer; transition: background-color 1s;"));
    client_web.print(F("text-align: center; font-size: 20px; color: #fff; line-height: 24px;}"));
    client_web.print(F(".identifica {float: right;padding-bottom: 0px;width: 81px;margin-bottom: 5px;border-bottom-width: 0px;padding-top: 0px;border-top-width: 0px;}"));
    client_web.print(F(".titulo {width: 550px;margin-top: 0px;padding-top: 0px;margin-bottom: 0px;height: 36.833px;border-top-width: 0px;padding-bottom: 0px;border-bottom-width: 0px;}"));
    client_web.print(F("</style>"));
    client_web.print(F("<script type=\"text/javascript\">"));

    client_web.print(F("function test() {"));
    client_web.print(F("console.log(\"Test started\");"));
    client_web.print(F("let i = 0; "));
    client_web.print(F("i++;"));
    client_web.print(F("if (i != 0) { return; }"));
    client_web.print(F("console.log(\"This part will not run\");"));
    client_web.print(F("return i;"));
    client_web.print(F("}"));

    client_web.print(F("function update(){var xhttp;xhttp=new XMLHttpRequest();xhttp.onreadystatechange=function(){"));
    client_web.print(F("if (xhttp.readyState == 4 && xhttp.status == 200) {var json = JSON.parse(xhttp.responseText);"));
    client_web.print(F("document.getElementById(\"v_bSalvar\").className = json.arduino.v_b_bSalvar;"));
    client_web.print(F("document.getElementById(\"v_bUndo\").className = json.arduino.v_b_bUndo;"));
    client_web.print(F("document.getElementById(\"v_temp\").innerHTML = json.arduino.v_temp;"));
    client_web.print(F("document.getElementById(\"t_uso\").innerHTML = json.arduino.t_uso;"));
    client_web.print(F("var boton = document.getElementById(\"v_bSalvar\").className;"));
    client_web.print(F("if (boton == \"OFF1\" ){document.getElementById(\"v_bSalvar\").disabled = true;}"));
    client_web.print(F("else {document.getElementById(\"v_bSalvar\").disabled = false;}"));
    client_web.print(F("var boton = document.getElementById(\"v_bUndo\").className;"));
    client_web.print(F("if (boton == \"ON1\" ){document.getElementById(\"v_bUndo\").disabled = true;}"));
    client_web.print(F("else {document.getElementById(\"v_bUndo\").disabled = false;}}};"));
    client_web.print(F("xhttp.open(\"GET\", \"http://")); //Imprimo la IP del propio arduino
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/ajax2\", true);xhttp.send();}"));

//**** cambia fondo del control AÑO
    client_web.print(F("function dato_alterado(){var xhttp;xhttp = new XMLHttpRequest();var valor=document.getElementById(\"var_ano01\").value;"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/v__ano/\" + valor; xhttp.open(\"GET\", url, true); xhttp.send();setTimeout(function(){update()},500);"));
    client_web.print(F("document.getElementById(\"var_ano01\").className = 'ON';}"));

//**** cambia fondo del control MES
    client_web.print(F("function dato_alterado1(){var xhttp;xhttp = new XMLHttpRequest();var valor=document.getElementById(\"var_mes01\").value;"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/v__mes/\" + valor; xhttp.open(\"GET\", url, true); xhttp.send();setTimeout(function(){update()},500);"));
    client_web.print(F("document.getElementById(\"var_mes01\").className = 'ON';}"));

//**** cambia fondo del control DIA
    client_web.print(F("function dato_alterado2(){var xhttp;xhttp = new XMLHttpRequest();var valor=document.getElementById(\"var_dia01\").value;"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/v__dia/\" + valor; xhttp.open(\"GET\", url, true); xhttp.send();setTimeout(function(){update()},500);"));
    client_web.print(F("document.getElementById(\"var_dia01\").className = 'ON';}"));

//**** cambia fondo del control HORA
    client_web.print(F("function dato_alterado3(){var xhttp;xhttp = new XMLHttpRequest();var valor=document.getElementById(\"var_hora01\").value;"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/v__hora/\" + valor; xhttp.open(\"GET\", url, true); xhttp.send();setTimeout(function(){update()},500);"));
    client_web.print(F("document.getElementById(\"var_hora01\").className = 'ON';}"));

//**** cambia fondo del control MINUTO
    client_web.print(F("function dato_alterado4(){var xhttp;xhttp = new XMLHttpRequest();var valor=document.getElementById(\"var_min01\").value;"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/v__min/\" + valor; xhttp.open(\"GET\", url, true); xhttp.send();setTimeout(function(){update()},500);"));
    client_web.print(F("document.getElementById(\"var_min01\").className = 'ON';}"));

//**** cambia fondo del control DUMP
//    client_web.print(F("function dato_alterado5(){var xhttp;xhttp = new XMLHttpRequest();xhttp.onreadystatechange=function(){"));

    client_web.print(F("function dato_alterado5(){var xhttp;xhttp = new XMLHttpRequest();var valor=document.getElementById(\"var_dump01\").value;"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/v_dump_ajax/\" + valor; xhttp.open(\"GET\", url, true); xhttp.send();"));
    client_web.print(F("document.getElementById(\"var_dump01\").className = 'ON';}"));

//**** cambia fondo del control % ALIMENTO SERVIDO
    client_web.print(F("function dato_alterado6(){var xhttp;xhttp = new XMLHttpRequest();var valor=document.getElementById(\"var_a_s01\").value;"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/v__a_s/\" + valor; xhttp.open(\"GET\", url, true); xhttp.send();setTimeout(function(){update()},500);"));
    client_web.print(F("document.getElementById(\"var_a_s01\").className = 'ON';}"));

//**** cambia fondo del control HORA INICIO DEL DIA
    client_web.print(F("function dato_alterado7(){var xhttp;xhttp = new XMLHttpRequest();var valor=document.getElementById(\"var_ini01\").value;"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/v__ini/\" + valor; xhttp.open(\"GET\", url, true); xhttp.send();setTimeout(function(){update()},500);"));
    client_web.print(F("document.getElementById(\"var_ini01\").className = 'ON';}"));

//**** cambia fondo del control HORA FIN DEL DIA
    client_web.print(F("function dato_alterado8(){var xhttp;xhttp = new XMLHttpRequest();var valor=document.getElementById(\"var_fin01\").value;"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/v__fin/\" + valor; xhttp.open(\"GET\", url, true); xhttp.send();setTimeout(function(){update()},500);"));
    client_web.print(F("document.getElementById(\"var_fin01\").className = 'ON';}"));

//**** cambia fondo del control SALVAR
    client_web.print(F("function botonsalvar(){"));
    client_web.print(F("var datos; "));
    client_web.print(F("datos = \"DUMP quantity: \";datos += document.getElementById(\"var_dump01\").value;"));
    client_web.print(F("datos += \", Percentage of food to consume: \";datos += document.getElementById(\"var_a_s01\").value;"));
    client_web.print(F("datos += \", Start time of activities: \";datos += document.getElementById(\"var_ini01\").value;"));
    client_web.print(F("datos += \", End time of activities: \";datos += document.getElementById(\"var_fin01\").value;"));
    client_web.print(F("var answer = confirm(\"Data to be processed: \"+datos+\". Do you confirm to save the described data?\");if (answer){"));
    client_web.print(F("var xhttp;xhttp = new XMLHttpRequest();var v_bSalvar = document.getElementById(\"v_bSalvar\").class;"));
    client_web.print(F("document.getElementById(\"var_dia01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_mes01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_ano01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_hora01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_min01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_dump01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_a_s01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_ini01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_fin01\").className = 'original';"));
    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/v_bSalvar/\" + v_bSalvar; xhttp.open(\"GET\", url, true); xhttp.send();setTimeout(function(){update()},500);}else{boton_undo()}}"));

//******************************
    client_web.print(F("function boton_undo(){var xhttp;xhttp = new XMLHttpRequest();var valor=document.getElementById(\"v_bUndo\").class;"));
    client_web.print(F("document.getElementById(\"var_dia01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_mes01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_ano01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_hora01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_min01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_dump01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_a_s01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_ini01\").className = 'original';"));
    client_web.print(F("document.getElementById(\"var_fin01\").className = 'original';"));

    v__ano = rtc.getYear()+2000;
    v__mes = rtc.getMonth(century); 
    v__dia = rtc.getDate();
    v__hora = rtc.getHour(h12Flag, pmFlag);
    v__min = rtc.getMinute();
    v__a_s = alim_ser;
    v__dump = val_dump;
    v__ini = hora_ini;
    v__fin = hora_fin;

    client_web.print(F("document.getElementById(\"var_ano01\").value = \""));
    client_web.print(v__ano);
    client_web.print(F("\";"));
    client_web.print(F("document.getElementById(\"var_mes01\").value = \""));
    client_web.print(v__mes);
    client_web.print(F("\";"));
    client_web.print(F("document.getElementById(\"var_dia01\").value = \""));
    client_web.print(v__dia);
    client_web.print(F("\";"));
    client_web.print(F("document.getElementById(\"var_hora01\").value = \""));
    client_web.print(v__hora);
    client_web.print(F("\";"));
    client_web.print(F("document.getElementById(\"var_min01\").value = \""));
    client_web.print(v__min);
    client_web.print(F("\";"));
    client_web.print(F("document.getElementById(\"var_dump01\").value = \""));
    client_web.print(v__dump);
    client_web.print(F("\";"));
    client_web.print(F("document.getElementById(\"var_a_s01\").value = \""));
    client_web.print(v__a_s);
    client_web.print(F("\";"));
    client_web.print(F("document.getElementById(\"var_ini01\").value = \""));
    client_web.print(v__ini);
    client_web.print(F("\";"));
    client_web.print(F("document.getElementById(\"var_fin01\").value = \""));
    client_web.print(v__fin);
    client_web.print(F("\";"));

    client_web.print(F("var url = \"http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("/v_bUndo/\" + valor; xhttp.open(\"GET\", url, true); xhttp.send();setTimeout(function(){update()},500);}"));

    client_web.print(F("function fun_param()"));                           //Llamado a PARAMETROS DEL SISTEMA FUNCTION fun_param(id)
    client_web.print(F("{var xhttp;xhttp=new XMLHttpRequest();"));
    client_web.print(F("xhttp.onreadystatechange=function(){"));
    client_web.print(F("if (xhttp.readyState == 4 && xhttp.status == 200) {var json = JSON.parse(xhttp.responseText);"));
    client_web.print(F("}};"));
    client_web.print(F("xhttp.open(\"GET\", \"/\", true);xhttp.send();}")); 

    client_web.print(F("function cambiaIntervalo(tiempo){if (tiempo==0) clearInterval(id_interval);else id_interval = setInterval('update()',tiempo);}"));
    client_web.print(F("var id_interval = setInterval('update()',1000);"));
    client_web.print(F("</script>"));
    client_web.print(F("</head>"));
    client_web.print(F("<body>"));    // ************************ comienzo ***************************
//  ****************************************  Parametros  *************************************
    client_web.print(F("<div id=\"principal2\" class=\"formulario2\">"));
    client_web.print(F("<h2>System Parameters</h2>"));
    client_web.print(F("<div class=\"rectangulo\">"));
    client_web.print(F("<div class=\"cabeza\">DATE SETTINGS</div>"));

    client_web.print(F("<div class=\"oculto1\">"));
    client_web.print(F("<b>Year:</b>"));
    client_web.print(F("<input id=\"var_ano01\" type=\"number\" name=\"date3\" onchange=\"dato_alterado()\" value=\""));
    client_web.print(v__ano);
    client_web.print(F("\" min=\"2022\" max=\"2030\">"));

    client_web.print(F("<b> Month:</b>"));
    client_web.print(F("<select name=\"month\" id=\"var_mes01\" onchange=\"dato_alterado1()\" value=\""));
        client_web.print(v__mes);
        client_web.print(F("\">"));
        client_web.print(F("<option value=\"1\""));
        client_web.print(F(">January</option>"));
        client_web.print(F("<option value=\"2\"")); 
        if (v__mes==2) client_web.print("selected");
        client_web.print(F(">February</option>"));
        client_web.print(F("<option value=\"3\""));
        if (v__mes==3) client_web.print("selected");
        client_web.print(F(">March</option>"));
        client_web.print(F("<option value=\"4\""));
        if (v__mes==4) client_web.print("selected");
        client_web.print(F(">April</option>"));
        client_web.print(F("<option value=\"5\""));
        if (v__mes==5) client_web.print("selected");
        client_web.print(F(">May</option>"));
        client_web.print(F("<option value=\"6\""));
        if (v__mes==6) client_web.print("selected");
        client_web.print(F(">June</option>"));
        client_web.print(F("<option value=\"7\""));
        if (v__mes==7) client_web.print("selected");
        client_web.print(F(">July</option>"));
        client_web.print(F("<option value=\"8\""));
        if (v__mes==8) client_web.print("selected");
        client_web.print(F(">August</option>"));
        client_web.print(F("<option value=\"9\""));
        if (v__mes==9) client_web.print("selected");
        client_web.print(F(">September</option>"));
        client_web.print(F("<option value=\"10\""));
        if (v__mes==10) client_web.print("selected");
        client_web.print(F(">October</option>"));
        client_web.print(F("<option value=\"11\""));
        if (v__mes==11) client_web.print("selected");
        client_web.print(F(">November</option>"));
        client_web.print(F("<option value=\"12\""));
        if (v__mes==12) client_web.print("selected");
        client_web.print(F(">December</option>"));
    client_web.print(F("</select>"));

    client_web.print(F("<b> Day:</b>"));
    client_web.print(F("<input type=\"number\" name=\"date3\" id=\"var_dia01\" onchange=\"dato_alterado2()\" value=\""));
    client_web.print(v__dia);
    client_web.print(F("\" min=\"1\" max=\"31\" >"));
    client_web.print(F("</div>"));        
    client_web.print(F("</div>"));        
    client_web.print(F("<div class=\"rectangulo\">"));
    client_web.print(F("<div class=\"cabeza\">TIME SETTINGS</div>"));
    client_web.print(F("<div class=\"oculto1\">"));
    client_web.print(F("<b>Hour:</b>"));
    client_web.print(F("<input id=\"var_hora01\" type=\"number\" onchange=\"dato_alterado3()\" value=\""));  
    client_web.print(v__hora);
    client_web.print(F("\" min=\"0\" max=\"23\"> <b> Minute:</b>"));
    client_web.print(F("<input id=\"var_min01\" type=\"number\" onchange=\"dato_alterado4()\" value=\""));
    client_web.print(v__min);
    client_web.print(F("\" min=\"0\" max=\"59\"> </div>"));
    client_web.print(F("</div>"));        

    client_web.print(F("<div class=\"rectangulo\">"));
    client_web.print(F("<div class=\"cabeza\">DUMPS</div>"));
    client_web.print(F("<div class=\"oculto1\">"));
    client_web.print(F("<b>per day:</b>"));
    client_web.print(F("<input id=\"var_dump01\" type=\"number\" onchange=\"dato_alterado5()\" value=\""));
    client_web.print(v__dump);
    client_web.print(F("\"  min=\"0\"> </div>"));
    client_web.print(F("</div>"));    

    client_web.print(F("<div class=\"rectangulo\">"));
    client_web.print(F("<div class=\"cabeza\">MINIMUM FOOD SERVED</div>"));
    client_web.print(F("<div class=\"oculto1\">"));
    client_web.print(F("<b>min. percentage of dumps:</b>"));
    client_web.print(F("<input id=\"var_a_s01\" type=\"number\" onchange=\"dato_alterado6()\" value=\""));
    client_web.print(v__a_s);
    client_web.print(F("\" min=\"0\" max=\"100\"> </div>"));
    client_web.print(F("</div>"));    

    client_web.print(F("<div class=\"rectangulo\">"));
    client_web.print(F("<div class=\"cabeza\">FEEDS AND LIGHTS START AT</div>"));
    client_web.print(F("<div class=\"oculto1\">"));
    client_web.print(F("<b>Hour:</b>"));
    client_web.print(F("<input id=\"var_ini01\" type=\"number\" min=\"0\" max=\"23\" onchange=\"dato_alterado7()\" value=\""));
    client_web.print(v__ini);
    client_web.print(F("\"> </div>"));
    client_web.print(F("</div>"));    

    client_web.print(F("<div class=\"rectangulo\">"));
    client_web.print(F("<div class=\"cabeza\">FEEDS AND LIGHTS FINISH AT</div>"));
    client_web.print(F("<div class=\"oculto1\">"));
    client_web.print(F("<b>Hour:</b>"));
    client_web.print(F("<input id=\"var_fin01\" type=\"number\" min=\"0\" max=\"23\" onchange=\"dato_alterado8()\" value=\""));
    client_web.print(v__fin);
    client_web.print(F("\"> </div>"));
    client_web.print(F("</div>"));

    client_web.print(F("<div class=\"rectangulo\">"));
    client_web.print(F("<div class=\"cabeza\">INTERNAL EQUIPMENT TEMPERATURE AND USAGE TIME</div>"));
    
    client_web.print(F("<div id = \"e_temperare\" class=\"cabecera\">Temperature</div><div class=\"oculto1\" id=\"v_temp\">"));
    client_web.print("N/A");
    client_web.print(F("</div>"));

    client_web.print(F("<div id = \"e_t_uso\" class=\"cabecera\">Use time</div><div class=\"oculto1\" id=\"t_uso\">"));
    client_web.print("N/A");
    client_web.print(F("</div>"));
    client_web.print(F("</div>"));
    client_web.print(F("<div class=\"rectangulo\">"));
    client_web.print(F("<div id=\"pChange\" class=\"cabeza\">CHANGES</div>"));

    client_web.print(F("<button type=\"button\" id=\"v_bSalvar\" onclick=\"botonsalvar()\" disabled> Save </button>"));

    client_web.print(F("<button type=\"button\" id=\"v_bUndo\" onclick=\"boton_undo()\" disabled> Undo </button>"));
    
    client_web.print(F("</div>"));

    client_web.print(F("<footer>"));
    client_web.print(F("<form method=\"GET\">"));
    client_web.print(F("<div id = \"b_parameter\" >Main monitor</div>"));

    client_web.print(F("<a class=\"accesos\" href='http://"));
    for (int i = 0; i < 4; i++) {
        client_web.print(ip[i]);
        if (i < 3) client_web.print(F("."));
    }
    client_web.print(F("' onclick=fun_param()>Go to main</a>"));

    client_web.print(F("</form>"));
    client_web.print(F("</footer>"));
    
    client_web.print(F("</div>"));

/*
    client_web.print(F("<script type=\"text/javascript\">"));
    client_web.print(F("checkTime();));
    client_web.print(F("</script>"));
*/    

//  *****************************************************************************
    client_web.print(F("</body>"));
    client_web.print(F("</html>"));
    client_web.flush();
    client_web.stop();  //Cierro el cliente
}

void muestroAjax1(EthernetClient &client_ajax) {
    long t_barra;
    client_ajax.println(F("HTTP/1.1 200 OK"));
    client_ajax.println(F("Content-Type: application/json; charset=utf-8"));
    client_ajax.println();
    client_ajax.print(F("{\"arduino\":{\"fecha_act\":\""));
    fecha();
    client_ajax.print(fecha_act);

    client_ajax.print(F("\",\"hora_act\":\""));
    client_ajax.print(hora());

    client_ajax.print(F("\",\"v_tempc\":\""));
    String a = temperatura(0);
    client_ajax.print(hic);

    client_ajax.print(F("\",\"v_tempf\":\""));
    client_ajax.print(hif);

    client_ajax.print(F("\",\"v_hum\":\""));
    client_ajax.print(hum);

    client_ajax.print(F("\",\"can_dump\":\""));
    client_ajax.print(val_dump);

    client_ajax.print(F("\",\"u_d\":\""));
    client_ajax.print(ultimo_ciclo);

    client_ajax.print(F("\",\"d_y_n\":\""));
    d_o_n = don();
    d_o_n? client_ajax.print(F("Day")) : client_ajax.print(F("Night"));

    client_ajax.print(F("\",\"led\":\""));
    v_pLed8 ? client_ajax.print(F("switch switch-on")) : client_ajax.print(F("switch"));

    client_ajax.print(F("\",\"luz\":\""));
    v_pkw ? client_ajax.print(F("switch")) : client_ajax.print(F("switch switch-on"));
    
    client_ajax.print(F("\",\"status_system\":\""));
        String tiempoMostrar;
        String t_reman;
        long tiempo1, tiempo2;
        String val_inicio, val_final;

        switch ( ind_ciclo_dump ) {
        case 0: 
            v_status = "Finish the feeding process.";
            break;
        case 1: 
            v_status = "Start feeding cycle";
            break;
        case 2: 
            if (val_hora_ant != ultimo_ciclo) {
                cal_tiempo = calculo_prox_ciclo();
                remanente = calculo_remanente(ultimo_ciclo, val_hora_ant);   
                val_hora_ant = ultimo_ciclo;
                t_medio = llevar_a_seg(tiempo_restante(cal_tiempo));
            }
            tiempoMostrar = tiempo_restante(cal_tiempo);
            t_reman = tiempo_remanente(remanente);
            v_status = "System in feeding schedule. Next cycle in: "+tiempoMostrar;
            v_status = v_status + " Approximate Completion Time: "+t_reman;
            break;
        case 3: 
            if (val_hora_ant != ultimo_ciclo) {
                cal_tiempo = calculo_prox_ciclo();
                remanente = calculo_remanente(ultimo_ciclo, val_hora_ant);   
                val_hora_ant = ultimo_ciclo;
                t_medio = llevar_a_seg(tiempo_restante(cal_tiempo));
            } 
            tiempoMostrar = tiempo_restante(cal_tiempo);
            t_reman = tiempo_remanente(remanente);
            v_status = "Waiting for the completion of the feeding cycle after hours. Next cycle in: "+tiempoMostrar;
            v_status = v_status + " Approximate Completion Time: "+t_reman;
            break;
        case 4:
            if ( hora_fin < 10 ){
                val_final = "0";
                val_final = val_final + hora_fin;
            } else {
                val_final = hora_fin;
            }
            val_final = val_final+":00:00";
            if (control_de_paso1 == false && control_de_paso == true) {
                if (llevar_a_seg(f_hora_act()) < llevar_a_seg(val_final)) {
                    control_de_paso = false;
                    control_de_paso1 = true;
                }
            }    

            if (control_de_paso == false) {
                control_de_paso = true;
                if ( hora_ini < 10 ){
                    val_inicio = "0";
                    val_inicio = val_inicio + hora_ini;
                } else {
                    val_inicio = hora_ini;
                }
                val_inicio = val_inicio+":00:00";
                tiempo1 = llevar_a_seg(val_inicio);
                tiempo2 = llevar_a_seg(val_final);

                long ciclo_actual = llevar_a_seg(f_hora_act());
                if (ciclo_actual < tiempo2) {
                    tiempo3 = llevar_a_seg("23:59:59")+tiempo1;
                } else {
                    tiempo3 = tiempo1;
                }
                t_medio = (llevar_a_seg("23:59:59")-llevar_a_seg(val_final))+tiempo1;

            }
            tiempoMostrar = tiempo_restante(tiempo3);
            v_status = "The daily activity cycle is complete.. Next cycle in: "+tiempoMostrar;
            break;

        case 5:
            if ( hora_fin < 10 ){
                val_final = "0";
                val_final = val_final + hora_fin;
            } else {
                val_final = hora_fin;
            }
            val_final = val_final+":00:00";
            if (control_de_paso1 == false && control_de_paso == true) {
                if (llevar_a_seg(f_hora_act()) < llevar_a_seg(val_final)) {
                    control_de_paso = false;
                    control_de_paso1 = true;
                }
            }    

            if (control_de_paso == false) {
                control_de_paso = true;
                if ( hora_ini < 10 ){
                    val_inicio = "0";
                    val_inicio = val_inicio + hora_ini;
                } else {
                    val_inicio = hora_ini;
                }
                val_inicio = val_inicio+":00:00";
                tiempo1 = llevar_a_seg(val_inicio);
                tiempo2 = llevar_a_seg(val_final);

                long ciclo_actual = llevar_a_seg(f_hora_act());
                if (ciclo_actual > tiempo2) {
                    tiempo3 = llevar_a_seg("23:59:59")+tiempo1;
                } else {
                    tiempo3 = tiempo1;
                }
                t_medio = (llevar_a_seg("23:59:59")-llevar_a_seg(val_final))+tiempo1;

            }
            tiempoMostrar = tiempo_restante(tiempo3);
            v_status = "All systems off. Idle hours. Next cycle in: "+tiempoMostrar;
            break;
        }
    client_ajax.print(v_status);

    client_ajax.print(F("\",\"progreso\":\""));
    t_barra = llevar_a_seg(tiempoMostrar); 
    int tiempo_res = (t_barra * 100) / t_medio;
    client_ajax.print(tiempo_res);

    client_ajax.print(F("\",\"umbral\":\""));
    client_ajax.print(umbral);
    
/*    if (manual == 0) {
        if (umbral < 0){
            umbral = 0;
        }
        client_ajax.print(umbral);
    } else {
        client_ajax.print(v_umbral_b);
    }
*/
    client_ajax.println(F("\"}}"));
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void muestroAjax2(EthernetClient &client_ajax) {
    client_ajax.println(F("HTTP/1.1 200 OK"));
    client_ajax.println(F("Content-Type: application/json; charset=utf-8"));
    client_ajax.println();
    client_ajax.print(F("{\"arduino\":{\"v_temp\":\""));
    client_ajax.print(temperatura(1));

    client_ajax.print(F("\",\"t_uso\":\""));
    client_ajax.print(tiempo_uso());

    client_ajax.print(F("\",\"v_b_bSalvar\":\""));
    if (v_b_bSalvar == 0){
        client_ajax.print(F("OFF1"));
    } else {
        client_ajax.print(F("ON1"));
    }

    client_ajax.print(F("\",\"v_b_bUndo\":\""));
    if (v_b_bUndo == 1){
        client_ajax.print(F("OFF1"));
    } else {
        client_ajax.print(F("ON1"));
    }

    client_ajax.println(F("\"}}"));
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void inf_datos()
{
    Sprintln(F("Verifying data file"));
    verificaDG();
}

boolean crear_prin() {
    boolean respuesta = 0;
    String registro;
    Sprint("Se esta creando el archivo ");Sprintln(archPrincipal);
    archivo = SD.open(archPrincipal, FILE_WRITE);
    if (archivo) {
        archivo.print(" ");
        archivo.close();
        respuesta = 1;
    } else {
        Sprint("No se pudo crear el archivo de Datos Generales ");
        respuesta = 0;
    }
    if (respuesta ==1) {
        archivo = SD.open(archPrincipal, FILE_WRITE);
    	if (archivo) {
            Sprintln("Escribiendo en archivo...");
            registro = "ID;CONCEPTO;# CONCEPTO;VALOR;";
            buf[60];
            registro.toCharArray(buf, 60);            
            archivo.println(buf);
            int i = 0;
            while(true) {
                switch ( i ) {
                case 0: 
                    registro = i+1;
                    registro += ";DUMP;1;77;";
                    val_dump = 77; 
                    break;
                case 1:
                    registro = i+1;
                    registro += ";Porcentaje de alimento servido;2;100;";
                    alim_ser = 100; 
                    break;
                case 2: 
                    registro = i+1;
                    registro += ";Hora de Inicio del día;3;2;";
                    hora_ini = 2;
                    break;
                case 3: 
                    registro = i+1;
                    registro += ";Hora de Cierre del día;4;16;";
                    hora_fin = 16;
                    break;
                }
                registro.toCharArray(buf, 60);  
                archivo.println(buf);
                // 1 - concepto = "DUMP";
                // 2 - concepto = "Porcentaje de alimento servido";
                // 3 - concepto = "Hora de Inicio del día";
                // 4 - concepto = "Hora de Cierre del día";
                i = i + 1;
                if (i == 4) {
                    break;
                }
            }
            archivo.close();
            Sprint("Se creo el archivo ");Sprint(archPrincipal);Sprint(" con exito ");
            respuesta = 1;
        } else {
            Sprint("No se pudo generar registro inicial de Datos Generales ");
            respuesta = 0;
        }
    }
    return respuesta;
}

void printData() {
    archivo = SD.open(archPrincipal, FILE_WRITE);
	if (archivo) {
		archivo.println(buf);
	    archivo.close();
	}
}

boolean verificaDG(){
    boolean respuesta = 0;
    boolean sigue = 0;
    sigue = existeArchivo(0);
    if (sigue == 0) {
        if (crear_prin()) {
            Sprintln("Inicio de Sistema...");
        }
    } 
    archivo = SD.open(archPrincipal, FILE_READ);
    if (archivo) {
        Sprint("El contenido de: ");
        Sprintln(archPrincipal);
        String cadena = "";
        bool line = false;
        int ult_caracter = archivo.size();
        int actual;
        actual = 1;
        archivo.seek(1);
        int ID; 
        String CONCEPTO; 
        int V_CONC;
        int VALOR;
        int VAL_CICLO;
        VAL_CICLO = 0;
        while (archivo.available()) 
        {
            if (line == false){
                char caracter = archivo.read();
                actual = actual + 1;
                if (caracter == '\n') { //Cuando encuentra salto de linea cambia estado
                    line = true;
                } else {
                    cadena = cadena + caracter;
                }
            } else {  //Empieza a leer normalmente de izquierda a derecha
                Sprintln(cadena);
                if (convierteDato01(cadena)) {
                    ID = arrayDG[0].toInt(); 
                    CONCEPTO = arrayDG[1]; 
                    V_CONC = arrayDG[2].toInt();
                    VALOR = arrayDG[3].toInt();
                    switch ( VAL_CICLO ) {
                    case 0: 
                        // El primer registro es el encabezado del archivo
                        break;
                    case 1: 
                        val_dump = VALOR; 
                        break;
                    case 2: 
                        alim_ser = VALOR; 
                        break;
                    case 3: 
                        hora_ini = VALOR;
                        break;
                    case 4: 
                        hora_fin = VALOR;
                        break;
                    }
                    VAL_CICLO = VAL_CICLO + 1;
                }
                cadena = "";
                line = false;
            }
        }
        Sprintln(cadena);                       // Se carga fuera del while debido a que la marca de ultimo registro termina con la lectura
        if (convierteDato01(cadena)) {
            ID = arrayDG[0].toInt(); 
            CONCEPTO = arrayDG[1]; 
            V_CONC = arrayDG[2].toInt();
            VALOR = arrayDG[3].toInt();
            hora_fin = VALOR;
            Sprintln("+ + + + + + + + + + + + + + + + + + + + + + + + + + ");
        }

        archivo.close(); //
        Sprint("Dump -> ");Sprintln(val_dump);
        Sprint("Porcentaje de Alimento a servir -> ");Sprintln(alim_ser);
        Sprint("Hora Inicio de actividades -> ");Sprintln(hora_ini);
        Sprint("Hora final de actividades -> ");Sprintln(hora_fin);
        Sprintln("Se cargaron los registro de inicio con exito ");
        respuesta=1;
    } else {
        Sprint("Error abriendo "); Sprintln(archivo);
    }
    return respuesta;
}

boolean existeArchivo(int cualArchivo){
    boolean respuesta = 0;
    int exist = 0;
    while(exist == 0){
        if (cualArchivo == 0){
            if(SD.exists(archPrincipal)){
                #if DEBUG
                    Sprint("Encontro el Archivo ");Sprintln(archPrincipal);
                #endif
                exist = 1;
                respuesta = 1;
            }
            else{
                Sprint("No Encontro el Archivo ");Sprintln(archPrincipal);
                exist = 1;
                respuesta = 0;
            }
        } else if (cualArchivo == 1){
            if(SD.exists(nombrefichero)){
                #if DEBUG
                    Sprint("Encontro el Archivo ");Sprintln(nombrefichero);
                #endif
                exist = 1;
                respuesta = 1;
            }
            else{
                Sprint("No Encontro el Archivo ");Sprintln(nombrefichero);
                exist = 1;
                respuesta = 0;
            }
        }
    }
    return respuesta;
}

boolean convierteDato01(String cadena) { // linea de registro pasada a arreglo global para su uso
    boolean respuesta = 0;
    int largo = cadena.length();
    String letras;
    int pos_01 = 0;
    String caracter_ex;
    for (int i = 0; i <= largo-1; i++) {
        caracter_ex = cadena.substring(i+1,i+2);
        if (caracter_ex != ";"){
            letras = letras + caracter_ex;
        } else {
            arrayDG[pos_01] = letras;
            letras = "";
            pos_01 = pos_01 + 1;
        }
    }
    respuesta = 1;
    return respuesta;
}

String valor_par(int val_ab){
    String devuelto;
    if (val_ab < 10) {
        devuelto = "0";
        devuelto = devuelto + val_ab;
    } else {
        devuelto = val_ab;
    }
    return devuelto;
}

void verifica_ult_dato() {
    // omitido lectura del ultimo registro en el archivo
}

boolean verificaArchivo() {
    // omitido Verifica archivo Datos Generales. Lo cre asi no existe
}

boolean SDultimo() {
    // Omitido carga datos del ultimo registro en un arreglo
}

String convierte(String cadena){   // lineas escritas al contrario. Ultimo registro
    int largo = cadena.length();
    String nuevo_dato;
    String palabra[largo-1];
    String caracter_ex;
    for (int i = 0; i <= largo-1; i++) {
        caracter_ex = cadena.substring(i+1,i+2);
        palabra[i] = caracter_ex;
    }
    for (int i = largo-1; i >= 0; i--) {
        nuevo_dato += palabra[i];
    }
    return nuevo_dato;
}

void fecha() {
    String dat_p_fec;
    dat_p_fec = "";
    dat_p_fec += "2";
    if (century) {      // Won't need this for 89 years.
        dat_p_fec += "1";
    } else {
        dat_p_fec += "0";
    }
    dat_p_fec += rtc.getYear();
    dat_p_fec += " / ";
    dat_p_fec += rtc.getMonth(century);
    dat_p_fec += " / ";
    dat_p_fec += rtc.getDate();
    fecha_act = dat_p_fec;
}

String hora() {
    String dat_p_hora;
    dat_p_hora = "";
    dat_p_hora += checkTime("1");
    dat_p_hora += ":";
    dat_p_hora += checkTime("2");
    dat_p_hora += ":";
    dat_p_hora += checkTime("3");
    if (h12Flag) {
        if (pmFlag) {
            dat_p_hora += " PM ";
        } else {
            dat_p_hora += " AM ";
        }
    } else {
        dat_p_hora += " 24h ";
    }
    return dat_p_hora;
}

String checkTime(String i) {
    int val_tiem;
    String var_Checkt = "";
    if (i.toInt() == 1) {
        h_act = rtc.getHour(h12Flag, pmFlag);
        val_tiem = h_act;
    } else if (i.toInt() == 2) {
        m_act = rtc.getMinute();
        val_tiem = m_act;
    } else if (i.toInt() == 3) {
        s_act = rtc.getSecond();
        val_tiem = s_act;
    }
    if (val_tiem < 10) {
        var_Checkt = "0";
        var_Checkt = var_Checkt + val_tiem;
    } else {
        var_Checkt = val_tiem;
    }
    return var_Checkt;
}

boolean abrir_archivo_bac() {
    boolean respuesta = 0;
    String n_arc_b = String(backupfichero);
    boolean estado = SD.exists(n_arc_b);
    if (estado){
        archivo = SD.open(backupfichero, FILE_WRITE);   // Archivo destino bacxxxx.txt 
        if(archivo){
            Sprintln("Se abrio con exito el archivo para backup");
            respuesta = 1;
        }
    }else{
        Sprintln("No existe el archivo para backup");
        sprintf(backupfichero, "BAC%d%d%d%d.TXT", v_arc_backup[0], v_arc_backup[1], v_arc_backup[2], v_arc_backup[3]); 
        archivo = SD.open(backupfichero, FILE_WRITE);   // Archivo destino bacxxxx.txt 
        if(archivo){
            archivo.println(" ");
            archivo.close();
        }       
        archivo = SD.open(backupfichero, FILE_WRITE);   // Archivo destino bacxxxx.txt 
        if(archivo){
            Sprintln("Se abrio con exito el archivo para backup");
            respuesta = 1;
        }
    }
    return respuesta;
}

boolean cerrar_archivo_bac() {
    boolean respuesta = 0;
    if (archivo) {
        archivo.close();
        respuesta = 1;
    }
    return respuesta;
}

void cambioManual(EthernetClient &client_ajax, String valor)
{
    client_ajax.println(F("HTTP/1.1 200 OK"));
    client_ajax.println(F("Content-Type: application/json; charset=utf-8"));
    client_ajax.println();
    if (valor == "ON"){
        manual = 1;
    }else{    
        manual = 0;
    }
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void cambioLuz(EthernetClient &client_ajax, String valor)
{
    client_ajax.println(F("HTTP/1.1 200 OK"));
    client_ajax.println(F("Content-Type: application/json; charset=utf-8"));
    client_ajax.println();
    if (valor == "ON"){
        v_pkw = 0;
    }else{    
        v_pkw = 1;
    }
    digitalWrite(pkw, v_pkw);
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void cambioUmbral(EthernetClient &client_ajax, String valor) {
    if (inicioActivida == 1){
        boolean resultado = 1;
        if ((valor.toInt() > val_dump) || (valor.toInt() < 0)) resultado = 0;
        else {
            umbral = valor.toInt();
            v_umbral_b = umbral;
        }
        client_ajax.println(F("HTTP/1.1 200 OK"));
        client_ajax.println(F("Content-Type: text/html\r\n"));
        client_ajax.println();
        resultado ? client_ajax.println(F("OK")) : client_ajax.println(F("KO"));
        client_ajax.flush();
        client_ajax.stop();  //Cierro el cliente
    }
}

void salvarCambios(EthernetClient &client_ajax, String valor) {
    boolean resultado = 1;
    Sprintln("Processing changes");
    Sprintln();
    updateOneRecord_back();      //  Guardando los registros de parametros
    // Cargar datos iniciales de SD en el archivo TXT
    rtc.setYear(v__ano-2000);
    rtc.setMonth(v__mes);
    rtc.setDate(v__dia);
    rtc.setHour(v__hora);
    rtc.setMinute(v__min);
    v_b_bSalvar = 0;
    v_b_bUndo = 0;
    Sprintln("Changed Records.");

    client_ajax.println(F("HTTP/1.1 200 OK"));
    client_ajax.println(F("Content-Type: text/html\r\n"));
    client_ajax.println();
    resultado ? client_ajax.println(F("OK")) : client_ajax.println(F("KO"));
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void guardarCambios() {
    updateOneRecord();      //  Guardando los registros de parametros
}

void updateOneRecord_back() {
    int i = 0;
    while(true) {
        cambios_DG[i] = 0;
        i = i + 1;
        if (i == 4) {
            break;
        }
    }

    i = 0;
    while(true) {
        switch ( i ) {
        case 0: 
            cambios_DG[i] = v__dump;
            int dife_dump;
            if (val_dump < v__dump) {
                dife_dump = v__dump - val_dump; 
                umbral = umbral + dife_dump;
            } else if (val_dump > v__dump) {
                dife_dump = val_dump - v__dump; 
                umbral = umbral - dife_dump;
            }                
            val_dump = v__dump; 
            break;
        case 1: 
            cambios_DG[i] = v__a_s;
            alim_ser = v__a_s;
            break;
        case 2: 
            cambios_DG[i] = v__ini;
            hora_ini = v__ini;
            break;
        case 3: 
            cambios_DG[i] = v__fin;
            hora_fin = v__fin;
            break;
        }
        i = i + 1;
        if (i == 4) {
            break;
        }
    }
    saveChange = true;
}

void updateOneRecord() {
    String registro;
    if (SD.exists(archPrincipal)) {
        archivo = SD.open(archPrincipal, FILE_WRITE);
        if (archivo) {
            archivo.close();
        }
        SD.remove(archPrincipal);
    }
    #if DEBUG
        Sprintln("Escribiendo en archivo...");
    #endif

    archivo = SD.open(archPrincipal, FILE_WRITE);
    if (archivo) {
        registro = "ID;CONCEPTO;# CONCEPTO;VALOR;";
        buf[60];
        registro.toCharArray(buf, 60);            
        archivo.println(buf);
        int i = 0;
        while(true) {
            if (i == 0) {
                registro = i+1;
                registro += ";DUMP;1;";
                registro += cambios_DG[i];
                registro += ";";
            } else if (i == 1) {
                registro = i+1;
                registro += ";Porcentaje de alimento servido;2;";
                registro += cambios_DG[i];
                registro += ";";
            } else if (i == 2) {
                registro = i+1;
                registro += ";Hora de Inicio del día;3;";
                registro += cambios_DG[i];
                registro += ";";
            } else if (i == 3) {
                registro = i+1;
                registro += ";Hora de Cierre del día;4;";
                registro += cambios_DG[i];
                registro += ";";
            }
            registro.toCharArray(buf, 60);  
            archivo.println(buf);
            i = i + 1;
            if (i == 4) {
                break;
            }            
        }
        archivo.close();
        #if DEBUG
            Sprint("Archivo ");Sprint(archPrincipal);Sprintln(" guardo con exito ");
            Sprintln("-------------------------------------------------------");
            Sprintln("DONE");
            Sprintln("Se actualizaron los registros de Inicio ");
        #endif
    } else {
        Sprint("No se pudo abrir el archivo de Datos Generales ");
    }
}

void verificaAno(EthernetClient &client_ajax, String valor) {
    boolean resultado = 1;
    v__ano = valor.toInt();
    if (v__ano > 0){
        v_b_bSalvar = 1;
        v_b_bUndo = 1;
        client_ajax.println(F("HTTP/1.1 200 OK"));
        client_ajax.println(F("Content-Type: text/html\r\n"));
        client_ajax.println();
    }
    else resultado = 0;
    resultado ? client_ajax.println(F("OK")) : client_ajax.println(F("KO"));
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void verificaMes(EthernetClient &client_ajax, String valor) {
    boolean resultado = 1;
    v__mes = valor.toInt();
    if (v__mes > 0){
        v_b_bSalvar = 1;
        v_b_bUndo = 1;
        client_ajax.println(F("HTTP/1.1 200 OK"));
        client_ajax.println(F("Content-Type: text/html\r\n"));
        client_ajax.println();
    } else resultado = 0;
    resultado ? client_ajax.println(F("OK")) : client_ajax.println(F("KO"));
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void verificaDia(EthernetClient &client_ajax, String valor) {
    boolean resultado = 1;
    v__dia = valor.toInt();
    if (v__dia > 0){
        v_b_bSalvar = 1;
        v_b_bUndo = 1;
        client_ajax.println(F("HTTP/1.1 200 OK"));
        client_ajax.println(F("Content-Type: text/html\r\n"));
        client_ajax.println();
    } else resultado = 0;
    resultado ? client_ajax.println(F("OK")) : client_ajax.println(F("KO"));
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void verificaHora(EthernetClient &client_ajax, String valor) {
    boolean resultado = 1;
    v__hora = valor.toInt();
    if (v__hora > 0) {
        v_b_bSalvar = 1;
        v_b_bUndo = 1;
        client_ajax.println(F("HTTP/1.1 200 OK"));
        client_ajax.println(F("Content-Type: text/html\r\n"));
        client_ajax.println();
    } else resultado = 0;
    resultado ? client_ajax.println(F("OK")) : client_ajax.println(F("KO"));
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void verificaMin(EthernetClient &client_ajax, String valor) {
    boolean resultado = 1;
    v__min =  valor.toInt();
    if (v__min > 0) {
        v_b_bSalvar = 1;
        v_b_bUndo = 1;
        client_ajax.println(F("HTTP/1.1 200 OK"));
        client_ajax.println(F("Content-Type: text/html\r\n"));
        client_ajax.println();
    } else resultado = 0;
    resultado ? client_ajax.println(F("OK")) : client_ajax.println(F("KO"));
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void verificaA_S(EthernetClient &client_ajax, String valor) {
    boolean resultado = 1;
    v__a_s = valor.toInt();
    if (v__a_s > 0) {
        v_b_bSalvar = 1;
        v_b_bUndo = 1;
        client_ajax.println(F("HTTP/1.1 200 OK"));
        client_ajax.println(F("Content-Type: text/html\r\n"));
        client_ajax.println();
    } else resultado = 0;
    resultado ? client_ajax.println(F("OK")) : client_ajax.println(F("KO"));
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void verificaDump(EthernetClient &client_ajax, String valor) {
    boolean resultado = 1;
    v__dump = valor.toInt();
    if (v__dump > 0) {
        v_b_bSalvar = 1;
        v_b_bUndo = 1;
        client_ajax.println(F("HTTP/1.1 200 OK"));
        client_ajax.println(F("Content-Type: text/html\r\n"));
        client_ajax.println();
    } else {
        resultado = 0;
    }
    resultado ? client_ajax.println(F("OK")) : client_ajax.println(F("KO"));
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void verificaIni(EthernetClient &client_ajax, String valor) {
    boolean resultado = 1;
    v__ini = valor.toInt();
    if (v__ini > 0){
        v_b_bSalvar = 1;
        v_b_bUndo = 1;
        client_ajax.println(F("HTTP/1.1 200 OK"));
        client_ajax.println(F("Content-Type: text/html\r\n"));
        client_ajax.println();
    } else resultado = 0;
    resultado ? client_ajax.println(F("OK")) : client_ajax.println(F("KO"));
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void verificaFin(EthernetClient &client_ajax, String valor) {
    boolean resultado = 1;
    v__fin = valor.toInt();
    if (v__fin > 0) {
        v_b_bSalvar = 1;
        v_b_bUndo = 1;
        client_ajax.println(F("HTTP/1.1 200 OK"));
        client_ajax.println(F("Content-Type: text/html\r\n"));
        client_ajax.println();
    } else resultado = 0;
    resultado ? client_ajax.println(F("OK")) : client_ajax.println(F("KO"));
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

void botonUndo(EthernetClient &client_ajax, String valor) {
    boolean resultado = 1;
    Sprintln("Undo changes...");
    v_b_bSalvar = 0;
    v_b_bUndo = 0;
    client_ajax.println(F("HTTP/1.1 200 OK"));
    client_ajax.println(F("Content-Type: text/html\r\n"));
    client_ajax.println();
    client_ajax.print(v_b_bUndo);
    client_ajax.flush();
    client_ajax.stop();  //Cierro el cliente
}

boolean don(){
    if (hora_ini <= rtc.getHour(h12Flag, pmFlag) && hora_fin >= rtc.getHour(h12Flag, pmFlag)) {
        return 1;
    } else {
        return 0;
    }
}

String temperatura(int donde){
    String var_temperatura = "";
    double temperatureC;
    double temperatureF;

    if (donde == 0) {
        var_temperatura += "";
        if (pasocincoseg < millis()) {
            hum = dht.readHumidity();
            float t = dht.readTemperature();
            float f = dht.readTemperature(true);
            if (isnan(hum) || isnan(t) || isnan(f)) {
                #if DEBUG
                    Serial.println(F("Failed to read from DHT sensor!"));
                #endif
                return;
            }

            // Compute heat index in Fahrenheit (the default)
            hif = dht.computeHeatIndex(f, hum);
            // Compute heat index in Celsius (isFahreheit = false)
            hic = dht.computeHeatIndex(t, hum, false);
            pasocincoseg = millis()+5000;
        }        
    } else {
        temperatureC = rtc.getTemperature(); //Get temperature (tempF × 9/5) + 32
        temperatureF = temperatureC*9/5+32;
        var_temperatura += temperatureC; //Escribe la temperatura
        var_temperatura += "*C  -  ";
        var_temperatura += temperatureF; //Escribe la temperatura
        var_temperatura += "*F";
    }
    return var_temperatura;
}

long calculo_prox_ciclo() {           // Los calculos se realizan en segundos
    long val_calculado;
    long ciclo_actual = llevar_a_seg(f_hora_act());      // Hora actual a segundos
    long ciclo_anterior;
    if  (val_hora_ant == "00:00:00") {          // Hora del último ciclo  a segundos
        ciclo_anterior = llevar_a_seg(ultimo_ciclo);
    }else{        
        ciclo_anterior = llevar_a_seg(val_hora_ant);
    }    
    
    if (ciclo_anterior > ciclo_actual){
        val_calculado = 0;
    } else {
        val_calculado = ciclo_actual - ciclo_anterior;
    }
    val_calculado = val_calculado + ciclo_actual ;       //A la Hora actual se le suma la diferencia entre la hora actual y el último ciclo
    return val_calculado;
}

long calculo_remanente(String u_ciclo, String u_hora) {           // Los calculos se realizan en segundos
    long val_calculado;
    long ciclo_ahora = llevar_a_seg(f_hora_act());      // Hora actual a segundos
    long ciclo_actual = llevar_a_seg(u_ciclo);      // Hora actual a segundos
    long ciclo_anterior = llevar_a_seg(u_hora);
    if (ciclo_anterior > ciclo_actual){
        val_calculado = 0;
    } else {
        val_calculado = ciclo_actual - ciclo_anterior;
    }
    if (val_dump == umbral){
        val_calculado = 0;
    } else {
        val_calculado = (val_calculado * umbral) + ciclo_ahora;
    }
    return val_calculado;
}

long llevar_a_seg(String h_actual) {
    int largo = h_actual.length();
    String val_c;
    String v_obt;
    int v_donde = 1;
    long v_acumula = 0;
    boolean tiene_dia = 0;
    boolean continuar = false;
    boolean pregunta = false;
    if (largo > 0){
        if (largo > 8) {
            tiene_dia = 1;
        }
        for (int i = 0; i <= largo-1; i++) {
            if (tiene_dia) {
                if (pregunta = false){
                    val_c = h_actual.substring(i,i+1);
                    if (val_c != ":"){
                        pregunta = true;
                    }
                    continuar = false;
                } else {
                    continuar = true;
                }
            } else {
                continuar = true;
            }
            if (continuar){
                val_c = h_actual.substring(i,i+1);
                if (val_c != ":"){
                    v_obt = v_obt + val_c;
                }else
                {
                    switch (v_donde) {
                        case 1:
                            v_acumula = ((v_obt.toInt() * 60) * 60);
                        break;
                        case 2:
                            v_acumula = v_acumula + (v_obt.toInt() * 60);
                        break;
                        case 3:
                            v_acumula = v_acumula + v_obt.toInt(); 
                        break;
                    }
                    v_obt = "";
                    v_donde = v_donde + 1;
                }
            }
        }
        v_acumula = v_acumula + v_obt.toInt(); 
    } else {
        v_acumula = 0;
    }
    return v_acumula;
}

String f_hora_act(){
    String var_tiempo = "";
    var_tiempo += checkTiempo("1");
    var_tiempo += ":";
    var_tiempo += checkTiempo("2");
    var_tiempo += ":";
    var_tiempo += checkTiempo("3");
    return var_tiempo;
}

String checkTiempo(String i){
    int Var_01;
    String var_calc = "";
    if (i.toInt() == 1) {
        Var_01 = rtc.getHour(h12Flag, pmFlag);
    } else if (i.toInt() == 2) {
        Var_01 = rtc.getMinute();
    } else if (i.toInt() == 3) {
        Var_01 = rtc.getSecond();
    }
    
    if (Var_01 < 10) {
        var_calc = "0";
        var_calc = var_calc + Var_01;
    } else {
        var_calc = Var_01;
    }
    return var_calc;
}

String tiempo_restante(long tiempo_base) {
    String tiempo_acumulados;
    unsigned long tiempo_t;
    String c_hora_01 = f_hora_act();
    long h_act_01 = llevar_a_seg(c_hora_01);
    if (tiempo_base > h_act_01){
        tiempo_t = tiempo_base - h_act_01;
        unsigned long dd, hh, mm, ss;
        dd = tiempo_t/60/60/24;
        tiempo_t -= dd*60*60*24;
        hh = tiempo_t/60/60;
        tiempo_t -= hh*60*60;
        mm = tiempo_t/60;
        tiempo_t -= mm*60;
        ss = tiempo_t;
        if (dd > 0) {
            tiempo_acumulados += dd;
            tiempo_acumulados += ":";
        }
        if (hh < 10) {
            tiempo_acumulados += "0";
        }
        tiempo_acumulados += hh;
        tiempo_acumulados += ":";
        if (mm < 10) {
            tiempo_acumulados += "0";
        }
        tiempo_acumulados += mm;
        tiempo_acumulados += ":";
        if (ss < 10) {
            tiempo_acumulados += "0";
        }
        tiempo_acumulados += ss;
    }else{
        tiempo_acumulados = "00:00:00";
    }    
    return tiempo_acumulados;
}

String tiempo_remanente(long tiempo_base) {
    String tiempo_acumulados;
    unsigned long tiempo_t;
    String c_hora_01 = f_hora_act();
    long h_act_01 = llevar_a_seg(c_hora_01);
    if (tiempo_base > h_act_01){
        tiempo_t = tiempo_base - h_act_01;
        unsigned long dd, hh, mm, ss;
        dd = tiempo_t/60/60/24;
        tiempo_t -= dd*60*60*24;
        hh = tiempo_t/60/60;
        tiempo_t -= hh*60*60;
        mm = tiempo_t/60;
        tiempo_t -= mm*60;
        ss = tiempo_t;
        if (dd > 0) {
            tiempo_acumulados += dd;
            tiempo_acumulados += ":";
        }
        if (hh < 10) {
            tiempo_acumulados += "0";
        }
        tiempo_acumulados += hh;
        tiempo_acumulados += ":";
        if (mm < 10) {
            tiempo_acumulados += "0";
        }
        tiempo_acumulados += mm;
        tiempo_acumulados += ":";
        if (ss < 10) {
            tiempo_acumulados += "0";
        }
        tiempo_acumulados += ss;
    }else{
        tiempo_acumulados = "00:00:00";
    }    
    return tiempo_acumulados;
}

String tiempo_uso() {
    String tiempo_acumulado;
    unsigned long tiempo_t;
    tiempo_t = millis();
    unsigned long dd, hh, mm, ss;
    dd = tiempo_t/1000/60/60/24;
    tiempo_t -= dd*1000*60*60*24;
    hh = tiempo_t/1000/60/60;
    tiempo_t -= hh*1000*60*60;
    mm = tiempo_t/1000/60;
    tiempo_t -= mm*1000*60;
    ss = tiempo_t/1000;

    tiempo_acumulado = "Days: ";
    tiempo_acumulado += dd;
    tiempo_acumulado += " - Hours: ";
    tiempo_acumulado += hh;
    tiempo_acumulado += " - Min: ";
    tiempo_acumulado += mm;
    tiempo_acumulado += " - Sec: ";
    tiempo_acumulado += ss;
    return tiempo_acumulado;
}

boolean convierteDato(String cadena) { // linea de registro pasada a arreglo global para su uso
    int largo = cadena.length();
    String letras;
    int pos_01 = 0;
    String caracter_ex;
    for (int i = 0; i <= largo-1; i++) {
        caracter_ex = cadena.substring(i+1,i+2);
        if (caracter_ex != ";"){
            letras = letras + caracter_ex;
        }else
        {
            textoToArray[pos_01] = letras.toInt();
            letras = "";
            pos_01 = pos_01 + 1;
        }
    }
    return true;
}

void ver_arc_prin() {
    archivo = SD.open(archPrincipal, FILE_READ);
    if (archivo) {
        while (archivo.available()) {
            Serial.write(archivo.read());
        }
        archivo.close(); //
    } else {
        Sprint("Error abriendo "); Sprintln(archivo);
    }
}

void eval_pines() {
    int hora_act01 = rtc.getHour(h12Flag, pmFlag);
    if (( hora_act01 >= hora_ini) && (hora_act01 < hora_fin)) {
        control_de_paso = false;
        control_de_paso1 = false;

        if (v_pkw == 1 && manual == 0) {
            v_pkw = 0;
            digitalWrite(pkw, v_pkw);
        }
        if (horario_activo == 0) {
            if (umbral <= 0){
                ind_ciclo_dump = 0;
                inicioActivida = 0;
            } else {
                horario_activo = 1;
                inicioActivida = 1;
                ind_ciclo_dump = 1;
                cargaFecha();
            }
        }
        if (inicioActivida == 1) {    // Inicio del ciclo de DUMP en el caso de 0 termino el ciclo
            validaCiclo = 0;            
            ind_ciclo_dump = 2;
        } else {
            if (rtc.getDate() < d1_act) {
                if (rtc.getMonth(century) < m1_act) {
                    inicioActivida = 1;
                    validaCiclo = 0;            
                    umbral = val_dump;
                } else {
                    if (rtc.getYear() > a1_act) {
                        inicioActivida = 1;
                        validaCiclo = 0;            
                        umbral = val_dump;
                    }
                }
            } else if (rtc.getDate() == d1_act) {
                ind_ciclo_dump = 4;
                inicioActivida = 0;
                validaCiclo = 1;            
                umbral = 0;
            }
        }
    } else {
        int calculo;
        if (umbral <= 0) {
            calculo = alim_ser;
        } else {
            inicioActivida = 1;
            calculo = 100-((umbral*100)/val_dump);
        }
        if ( calculo  < alim_ser ) {
            if (v_pkw == 1 && manual == 0) {
                v_pkw = 0;
                digitalWrite(pkw, v_pkw);
            }
            ind_ciclo_dump = 3;
        } else {
            if (validaCiclo == 0) {
                ind_ciclo_dump = 0;
                validaCiclo = 1;  
                horario_activo = 0;
                #if DEBUG
                    Sprintln("Termino el ciclo de alimentación. Se apago todo");
                #endif
                if (v_pkw == 0 && manual == 0){
                    v_pkw = 1;
                    digitalWrite(pkw, v_pkw);
                }
                if (v_pin17 == 1 && umbral == 0){
                    v_pin17 = 0;
                    digitalWrite(pin17, v_pin17);
                }
            }
            ind_ciclo_dump = 5;
        }
    }
    if (umbral == 0){
        v_pin17 = 0;                    // Se coloca en OFF para encender
        digitalWrite(pin17, v_pin17);
    } else {
        v_pin17 = 1;                    // Se coloca en ON para apagar
        digitalWrite(pin17, v_pin17);
    }

    boton.actualizar();
    switch ( boton.leer() ) {
        case SUELTO:
            digitalWrite(pDump, LOW); 
            v_pLed8 = 1;
            v_pin15 = 1;
            digitalWrite(pLed8, v_pLed8);            //Led
            digitalWrite(pin15, v_pin15);       //Rele de la Balanza
            break;
        case APRETANDOLO: 
            #if DEBUG
                Sprintln("Acabas de soltar el botón");
            #endif
            break;
        case APRETADO:
            digitalWrite(pDump, HIGH); 
            v_pLed8 = 0;
            v_pin15 = 0;
            digitalWrite(pLed8, v_pLed8);            //Led
            digitalWrite(pin15, v_pin15);       //Rele de la Balanza
            break;
        case SOLTANDOLO: 
            #if DEBUG
                Sprintln("Acabas de apretar el botón"); 
            #endif
            rut_llena(); 
            break;
        default: break;
    }
}

void BotonSimple::actualizar() {
    if (valor == digitalRead(pin)) {
        temporizador=0;
    } else if ( temporizador==0 ) {
        temporizador = millis();
    } else if ( millis()-temporizador >= tiempoRebote ) {
        valor = !valor;
    }
    if ( anterior==LOW  && valor==LOW  ) estado = APRETADO;
    if ( anterior==LOW  && valor==HIGH ) estado = SOLTANDOLO;
    if ( anterior==HIGH && valor==LOW  ) estado = APRETANDOLO;
    if ( anterior==HIGH && valor==HIGH ) estado = SUELTO;
    anterior = valor;
}

void cargaFecha() {
    d1_act = rtc.getDate();
    m1_act = rtc.getMonth(century);
    a1_act = rtc.getYear()+2000;
}

void rut_llena() {
    if (inicioActivida == 0) {
        #if DEBUG
            Sprintln("Fuera del Ciclo de actividades...");
        #endif
    } else {
        if (umbral > 0) {
            umbral = umbral - 1;
            
            datos[0] = umbral;
            datos[1] = rtc.getDate();
            datos[2] = rtc.getMonth(century);
            datos[3] = rtc.getYear();
            datos[4] = rtc.getHour(h12Flag, pmFlag);
            datos[5] = rtc.getMinute();
            datos[6] = rtc.getSecond();
            val_hora_ant = ultimo_ciclo;
            ultimo_ciclo = f_hora_act();
            
            if (arrayGuarda()) {    
                h_act = datos[4];
                m_act = datos[5];
                s_act = datos[6];
                #if DEBUG
                    Sprintln("DONE");
                    Sprint("Se genero registro ");Sprintln(registroActual);
                #endif
                saveActividad = true;
            }else{
                Sprintln("Hubo un error al grabar el registro...");
            }
        } else {
            #if DEBUG
                Sprintln("Termino la entrega de alimento");
                Sprintln("----------------------------");
                Sprint("H Act. -> ");
                Sprint(rtc.getHour(h12Flag, pmFlag));Sprint(" H Ini. -> ");Sprint( hora_ini);Sprint(" H Fin. -> ");Sprintln( hora_fin );
            #endif
            if (rtc.getHour(h12Flag, pmFlag) >= hora_fin) {
                #if DEBUG
                    Sprintln("Reinicio la entrega de alimento para el dia siguiente");
                #endif
                inicioActivida = 0;
                horario_activo = 0;
                if (manual == 0) {
                    v_pin16 = 0;
                    v_pkw = 1;
                }
            } 
        }
    }
}

boolean arrayGuarda() {
    int g = 0;
    while (true) {
        datosDiarios[count][g] = datos[g];
        g = g + 1;
        if (g == 7) {
            break;
        }
    }
    ++count;
    for (int h = 0; h < count; h++) {
        g = 0;
        while (true) {
            #if DEBUG
                Sprint(datosDiarios[h][g]);
                Sprint(" ; ");
            #endif
            g = g + 1;
            if (g == 7) {
                break;
            }
        }
        #if DEBUG
            Sprintln(" ");
        #endif
    }
    return true;
}

void guardarRegistro() {
    if (SDguarda()) {    
        ver_arc_diario();
    } else {
        Sprintln("Hubo algún problema al guardar datos. Comunicarse con el administrador...");
    }
    CreateList(10);                             // Se crea el elemento Array de una posición
}

void CreateList(size_t _capacity) {             // Crear una nueva lista
    capacity = _capacity;
    count = 0;
}

boolean SDguarda() {
    boolean respuesta = 0;
    if (verificaArchivo()) {
        #if DEBUG
            Sprintln("Guardando los registros almacenados en el arreglo...");
        #endif
        archivo = SD.open(nombrefichero, FILE_WRITE);
        if (archivo) {
            #if DEBUG
                Sprint("Ciclo de Registros -> ");Sprintln(count-1);
            #endif
            for (int indice = 0; indice < count; indice++){
                archivo.print(registroActual);
                archivo.print(";");
                int g = 0;
                while ( true ) {
                    #if DEBUG
                        Sprint("Ciclo de Detalle de Registros -> ");Sprintln(datosDiarios[indice][g]);
                    #endif
                    archivo.print(datosDiarios[indice][g]);
                    if (g < 6) {
                        archivo.print(";");
                    }
                    g = g + 1;
                    if (g == 7) {
                        break;
                    }                        
                }
                archivo.println(";");
                registroActual = registroActual + 1;
                #if DEBUG
                    Sprint("Guardando registro -> ");Sprintln(registroActual);
                #endif
            }
            archivo.close();
            archivoVacio = 0;
            respuesta = 1;
            #if DEBUG
                Sprintln("Done");
            #endif
        } else {
            Sprintln("Error guardando registro");
        }
    }else{
        Sprintln("Comunicarse con el administrador del sistema!!!...");
    }    
    return respuesta;
}

void ver_arc_diario(){
    archivo = SD.open(nombrefichero, FILE_READ);
    if (archivo) {
        int contador = 0;
        while (archivo.available())
        {
            String list = archivo.readStringUntil('\r');
            contador++; // Count the record
/*
            if(recNum == recordNumberOfInterest)
            {
            // Hey, we found the one that we want to do something with
            }
*/            
        }
        #if DEBUG
            Sprint("Registros encontrados "); Sprintln(contador);
        #endif
        archivo.close(); //
    } else {
        Sprint("Error abriendo "); Sprintln(archivo);
    }
}

void GetMillis()
{
    long ahora = millis()+1500;  
    while(true){
        if (ahora < millis()){
            break;
        }
    }
    #if DEBUG
        Sprintln("Control para saber si esta calculando el tiempo de retardo");
    #endif
}

Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.