Consultas sobre sincronización en Arduino

Hola buenas a todos,
soy "nuevo" en esto de la informática y arduino, pero estando bastante interesado en el tema me decidí a hacer el proyecto final de mis estudios sobre esto.
Mi idea es hacer una pequeña casa domótica (pequeña porque dispongo de un arduino uno y la idea, como prácticamente todo en arduino, es ampliable) con control vía web sobre las luces, una alarma, apertura de una puerta, sensor de parking (se me ocurrió a raíz de la alarma) y, aquí viene en lo que me he quedado de momento, mi tutor me obliga a que haga MEDICIONES DE TEMPERATURA Y HUMEDAD, tengo el sensor y hago las mediciones, y ya tengo idea de como representaré los datos, pero:

  • ¿para que arduino sepa la hora y fecha, hay que usar un OTC(on time clock si no me equivoco) a la fuerza?
    Como se va a conectar a red local, había pensado pasarsela con javascript una primera vez y luego guardarla en la EEPROM si es posible..

Y lo mas importante... :

  • ¿cómo puedo tomar mediciones de temperatura cada x segundos (dados por el usuario), sin que esto (su delay()) afecte al resto de funciones que controlan alarma, luces, etc?

Este es mi loop, no he implementado nada del sensor temp/hum en este sketch

void loop()
{  
  duracion = 0;
  distancia = 0;
  pausa = 100;
  
  if (Serial.available() > 0 || alarmaActivada || LDRactivado || controlParkingActivado){
    
    if (Serial.available() > 0){
      
      reconocerComando();
      delay(50);

    }
    if (alarmaActivada || controlParkingActivado){
      alarma(alarmaActivada, controlParkingActivado);
    }
    if (LDRactivado){
    LDR();
    } 
  }
  delay(pausa);
}

En este skech he realizado pruebas con el sensor DHT11, introduces por serial programar, y espera a que le digas cada cuantos segundos quieres que haga la medicion.

void loop() {
  // put your main code here, to run repeatedly:
  if (Serial.available() > 0){
      Serial.setTimeout(100);
      String comando = Serial.readString();
      Serial.print("Comando: ");
      Serial.println(comando);
      if (comando == "programar"){
        Serial.println("¿Cada cuantos segundos desea registrar medición?");
        //delay();
        while(Serial.available() == 0){
          delay(100);
        }
         if (Serial.available() > 0){
          segundos = Serial.readString().toInt() * 1000;
          programacion == true ? programacion = false : programacion = true;
         }
      }
  }
  while (programacion == true){
    if (Serial.available() > 0){
      Serial.setTimeout(100);
      String comando = Serial.readString();
      Serial.print("Comando: ");
      Serial.println(comando);
      if (comando == "programar"){
        programacion == true ? programacion = false : programacion = true;
        segundos = 20;
      }
    }
    temp = dht.readTemperature();
    humedad = dht.readHumidity();
  
    Serial.print("Temperatura: ");
    Serial.print(temp);
    Serial.println("ºC");
    Serial.print("Humedad: ");
    Serial.print(humedad);
    Serial.println("%");
    delay(segundos);
  };
  delay(1000);
}

Lo que quiero es juntar los dos sin perder funcionalidades, ya que lo que deseo es programar mediciones cada "tanto" tiempo y durante "tanto" tiempo... en plan medicion cada 5 minutos durante 1 hora.

Espero explicarme, muchas gracias de antemano!!

Comienzo a responder en orden a lo que leo

  • ¿para que arduino sepa la hora y fecha, hay que usar un OTC(on time clock si no me equivoco) a la fuerza?
    Como se va a conectar a red local, había pensado pasarsela con javascript una primera vez y luego guardarla en la EEPROM si es posible..

Si tienes WIFI usa NTP o sea Network Time Protocol, tomas la hora de un servidor atomico. No necesitas poner nada.
Es software.

  • ¿cómo puedo tomar mediciones de temperatura cada x segundos (dados por el usuario), sin que esto (su delay()) afecte al resto de funciones que controlan alarma, luces, etc?

No uses delay, usa millis(). Estudia en Documentación la máquina de estados y el uso de millis(). Ambos te orientarán en como se reemplaza delay sin perde ese tiempo sin hacer nada

Las respuestas a tu preguntas de software estan respondidas con el uso de millis().

Gracias surbyte,

efectivamente la solución al problema con delay() estaba en usar millis() en su lugar =)

conseguir la hora de un servidor aún no lo he probado, no voy a usar wifi sino cable ethernet pero supongo que será la misma historia.

Gracias de nuevo
Saludos!

conseguir la hora de un servidor aún no lo he probado, no voy a usar wifi sino cable ethernet pero supongo que será la misma historia.

Es lo mismo, me expesé mal, solo necesitas comunicación TCP/IP.