void sunsett() {
int i = 0;
// sunset (cambio automático horario de verano e invierno)
// ( desde ultimo domingo de marzo a ultimo domingo de octubre es horario de verano sunset = 1)
// para determinar si estamos en horario de verano o invierno, inicialmente creamos variable local "localsunset" y la inicializo con el valor de sunset que está grabado en la eeprom interna.
int8 localsunset = sunset; // cargamos el horario actual.
if ((mes == 1) || (mes == 2) || (mes == 11) || (mes == 12)) localsunset = 0; // si estamos en algunos de estos meses, marcamos horario de invierno. (localsunset = 0)
if ((mes == 10) && ((dia>=25) && (dia <=31))) { // si es octubre y además estamos en la ultima semana del mismo mes
if ((weekday == 6) && (horas >= 3)) localsunset = 0; // si es domingo y son mas de las 3 de la mañana ponemos horario de invierno.
// si no es domingo tenemos que averiguar si ya lo ha sido
else {
int8 dif = 31 - dia; // hallamos los dias que restan hasta final de mes.
int8 suma = dif + weekday; // sumo el valor del dia de la semana a los dias que restan hasta fin de mes
// el domingo en weekday sería el 6.
if (suma <=6) localsunset = 0; // si da 6 o menos de 6 es por que ya ha sido domingo, por lo que activamos horario de invierno.
}
}
if ((mes == 3) && ((dia>=25) && (dia <=31))) { // si es Marzo y además estamos en la ultima semana del mismo mes
localsunset = 0; // en Marzo continuamos en horario de invierno salvo.....
if ((weekday == 6) && (horas >= 2)) localsunset = 1; // si es domingo y son mas de las 3 de la mañana ponemos horario de verano.
// si no es domingo tenemos que averiguar si ya lo ha sido
else {
int8 dif = 31 - dia; // hallamos los dias que restan hasta final de mes.
int8 suma = dif + weekday; // sumo el valor del dia de la semana a los dias que restan hasta fin de mes
// el domingo en weekday sería el 6.
if (suma <=6) localsunset = 1; // si da 6 o menos de 6 es por que ya ha sido domingo, por lo que activamos horario de verano
}
}
// activamos y grabamos la bandera sunset que corresponda
posi (40,40);
printf("TT Ls:%u \r\n ss:%u \r\n ",localsunset
,sunset
); delay_ms(500);
if (sunset != localsunset) { // si localsunset no coincide con sunset es por que ha cambiado....
if (sunset == 1) { // si estabamos en horario de verano
horas = horas - 1; // restamos una hora al reloj
setrtc(); // grabamos en el rtc
sunset = 0; // indicamos que estamos ahora en horario de invierno.
write_eeprom(25,sunset); // grabamos en la eeprom interna.
}
else { // si estabamos en horario de invierno
horas = horas + 1; // sumamos una hora al reloj
setrtc(); // grabamos en el rtc
sunset = 1; // activamos horario de verano.
write_eeprom(25,sunset); // grabamos en la eeprom interna.
}
}