Como corregir la hora

Hola a todos.

Con el nombre del titulo quiero hacer referencia a que necesito ayuda para finalizar un codigo en el que vengo trabajando hace mucho (mas de un año ya) con ayuda de internet, con ayuda de uds y con ayuda de un amigo que sabe mucho del tema. Pero no lo quiero molestar para esto ultimo ya que nada muy ocupado.

Tengo dos LED distintos que en el código figuran como “led1” y “led2” led1 tiene que prender durante el día de 10am a 7pm y led2 tiene que prender durante la noche de 7pm a 10am.

Este ultimo codigo me lo hizo mi amigo, intente modificar esto yo, pero no me sale.

en el código incluyó las lineas “rtc.setTime” y “rtc.setDate” que según me explico lo que buscaba con eso es que arduino arrancara siempre a una hora determinada independientemente a la hora real, y podes hacer testeos con las luces led. Pero que el código final había que poner para que seteara la hora actual.

El código tiene 3 pestañas, creo que con la pestaña q publico va a ser suficiente pero si es necesario publico las otras dos.

//led1
int led1start = 20;
int led1stop = 22;
bool led1 = false;
//led2
int led2start = 10;
int led2stop = 19;
bool led2 = false;
//alimentar
int feedStart = 22;
Time now;

void setupClock(){
/*
  
  
  // The following lines can be uncommented to set the date and time
  rtc.setDOW(WEDNESDAY);     // Set Day-of-Week to SUNDAY*/
 rtc.setTime(21, 59, 45);     // Set the time to 12:00:00 (24hr format)
 rtc.setDate(23, 7, 2018);   // Set the date to January 1st, 2014
  
}

void checkTime(){
    // Get data from the DS3231
    now = rtc.getTime();
    
    if(!led1 && now.hour >= led1start && now.hour < led1stop){
       Serial.print("on 1 > ");
       Serial.println(rtc.getTimeStr());
       digitalWrite(pinLed1, HIGH);
       led1 = true;
    }else if(led1 && (now.hour < led1start || now.hour >= led1stop)){
      Serial.print("off 1 > ");
       Serial.println(rtc.getTimeStr());
       digitalWrite(pinLed1, LOW);
      led1 = false;
    }
    if(!led2 && now.hour >= led2start && now.hour < led2stop){
       Serial.print("on 2 > ");
       Serial.println(rtc.getTimeStr());
       digitalWrite(pinLed2, HIGH);
       led2 = true;
    }else if(led2 && (now.hour < led2start || now.hour >= led2stop)){
      Serial.print("off 2 > ");
       Serial.println(rtc.getTimeStr());
       digitalWrite(pinLed2, LOW);
      led2 = false;
    }
    //alimentar
    if(now.date != lastFeed && now.hour >= feedStart){
       food();
      lastFeed = now.date;
    }
  
}

Espero puedan ayudarme y espero haberme explicado bien.

Como corregir la hora para que, o que quieres corregir?

Te has expliado muy mal @mke82.

haaa si me explique super mal… es que me cuesta mucho hacerme entender.

En el código se ve que led1 se prende a las 20 y se apaga a las 22 y led2 se prende a las 19 y se apaga a las 10

yo puedo cambiar la hora de apagado y encendido de ambos leds de forma muy fácil. pero el problema es que, gracias al código del “void setupClock” (que se encuentra en la PESTAÑA 2) arduino arranca siempre a la misma hora y lo que quiero yo, es q respete la hora del día exacta.

por las dudas les voy a copiar la otra pestaña, espero que esta ves haya sido mas claro.

PESTAÑA 1

#include <DHT11.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DS3231.h>




#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);

DS3231 rtc(SDA, SCL);


LiquidCrystal_I2C lcd(0x3F,20,4);
DallasTemperature sensors(&oneWire);


                          //ESTO ES PARA USAR MILLIS
unsigned long time;
unsigned long t = 0;      // lo uso para 1 segundo
unsigned long t2 = 0;     // lo uso para 5segundos
int tiempoT = 1000;       // segundos en el que se muestra la temperatura
int tiempoTdht11 = 5000;  // segundos en el que se muestra la temperatura y humedad DHT11


                          // VARIABLES DEL CALEFACTOR, COOLER Y HUMEDAD 
int ledcalefa=12;         // Pin para calefactor.
int ledcooler=13;         // Pin para ventilador
int pinLed1=10;           // Luz led DIA
int pinLed2=11;           // Luz led NOCHE

int ledhumedad=8;            // Pin para encender la luz DIA
int pin=9;                // husor temperatura y humedad
DHT11 dht11(pin); 

int humidityOn=70;        // humedad en la que se prende el cooler
int humidityOff=68;        // humedad en la que se apaga el cooler
bool humidity=false;

///////////////////////////////////////
void setup() 
  {
  lcd.init();
  lcd.backlight();               //enciende la iluminacion del display
  sensors.begin();               //Iniciamos la libreria de la sonda de temperatura DS1820
  rtc.begin();                   //Iniciamos la libreria del Reloj RTC
  
  // Set sketch compiling time
  setupClock();
  
  analogReference(INTERNAL);     //Cambiamos referencia de las entradas analógicas
  Serial.begin(9600);            //Iniciamos el puero serie
  pinMode(ledcalefa, OUTPUT);
  pinMode(ledcooler, OUTPUT);
  pinMode(ledhumedad, OUTPUT);
  pinMode(pinLed1, OUTPUT);
  pinMode(pinLed2, OUTPUT);
  

  lcd.setCursor(3,0);
  lcd.print("Acuario Discus");
  lcd.setCursor(4,2);
  lcd.print("SERVELL 1.0");
  delay(4000);
  lcd.clear();
  }

PESTAÑA 2

//led1
int led1start = 20;
int led1stop = 22;
bool led1 = false;
//led2
int led2start = 10;
int led2stop = 19;
bool led2 = false;
//alimentar
int feedStart = 22;
Time now;

void setupClock(){
/*
  
  
  // The following lines can be uncommented to set the date and time
  rtc.setDOW(WEDNESDAY);     // Set Day-of-Week to SUNDAY*/
 rtc.setTime(21, 59, 45);     // Set the time to 12:00:00 (24hr format)
 rtc.setDate(23, 7, 2018);   // Set the date to January 1st, 2014
  
}

void checkTime(){
    // Get data from the DS3231
    now = rtc.getTime();
    
    if(!led1 && now.hour >= led1start && now.hour < led1stop){
       Serial.print("on 1 > ");
       Serial.println(rtc.getTimeStr());
       digitalWrite(pinLed1, HIGH);
       led1 = true;
    }else if(led1 && (now.hour < led1start || now.hour >= led1stop)){
      Serial.print("off 1 > ");
       Serial.println(rtc.getTimeStr());
       digitalWrite(pinLed1, LOW);
      led1 = false;
    }
    if(!led2 && now.hour >= led2start && now.hour < led2stop){
       Serial.print("on 2 > ");
       Serial.println(rtc.getTimeStr());
       digitalWrite(pinLed2, HIGH);
       led2 = true;
    }else if(led2 && (now.hour < led2start || now.hour >= led2stop)){
      Serial.print("off 2 > ");
       Serial.println(rtc.getTimeStr());
       digitalWrite(pinLed2, LOW);
      led2 = false;
    }
    //alimentar
    if(now.date != lastFeed && now.hour >= feedStart){
       food();
      lastFeed = now.date;
    }
  
}

Sinceramente yo no te entendi muy bien, pero creo que el problema que te da es que si lo desconectas siempre arranca con la hora que le pusiste al cargar el sketch en vez la que sería ahora la hora real.

Si es esto… Yo pienso que si lo pones en hora el reloj con el codigo ese tal como lo tienes y lo cargas para actualizarle la hora

Seguido le omites esa parte al sketch (“void setupClock()”) y le vuelves a cargar el codigo (ahora ya sin esa parte) ya no tendras el problema de que siempre que arranque lo haga con esa hora.

gracias era como bien dijiste y lo pude solucionar así. caso cerrado!!!!!! :)