A ver asi??
#include <Wire.h> //Del IDE.
#include <LiquidCrystal_I2C.h> //De: https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads/
#include <Adafruit_NeoPixel.h> //Del IDE.
#include <RTClib.h> //Del IDE.
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd (0x26, 2, 1, 0, 4, 5, 6, 7);
Adafruit_NeoPixel tira = Adafruit_NeoPixel(8, 2, NEO_GRB + NEO_KHZ800);
String daysOfTheWeek[7] = {"Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"};
int rele1 = 3; //FILTRO.
int rele2 = 4; //BURBUJAS.
int minutosTotales(int h, int m){
int por60 = 60;
int totalMinutos;
totalMinutos = h * 60 + m;
return totalMinutos;
}
int lastMinute = 0;
void setup() {
lcd.setBacklightPin(3, POSITIVE);
lcd.setBacklight(HIGH);
lcd.begin(16, 2);
tira.begin();
tira.show();
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
if (! rtc.begin()) {
lcd.println("Modulo RTC no encontrado !");
while (1);
}
}
void loop() {
char buffer[20];
tira.show();
DateTime fecha = rtc.now();
lcd.setCursor(0,0);
lcd.print(daysOfTheWeek[fecha.dayOfTheWeek()]);
lcd.setCursor(5, 0);
sprintf (buffer, "%02d/%02d/%4d", fecha.day(), fecha.month(), fecha.year());
lcd.print(buffer);
lcd.setCursor(5,1);
sprintf(buffer, "%02d:%02d:%02d", fecha.hour(), fecha.minute(), fecha.second());
lcd.print(buffer);
int h = fecha.hour();
int m = fecha.minute();
int minutos = minutosTotales(h,m);
if (lastMinute != m) {
//aqui va todo el código que hay ahora en el loop que solo quieras ejecutar 1 vez por minuto
//Burbujas ON 7:50h
if (minutos >= 470 && minutos <= 1380){
digitalWrite(rele2, HIGH);
}
//Burbujas off 23:00h
if (minutos >= 1380 && minutos <= 1410){
digitalWrite(rele2, LOW);
}
//Filtro ON 7:55h
if (minutos >= 475 && minutos <= 1275){
digitalWrite(rele1, HIGH);
}
//Filtro off 20:45h
if (minutos >= 1245 && minutos <= 1410){
digitalWrite(rele1, LOW);
}
//Amanece 8:00h
if (minutos >= 480 && minutos <= 540){
for (int i = 0; i < 2; i++) {
tira.setBrightness(25);
tira.setPixelColor(i, 255, 150, 0);
tira.show();
}
}
//Amanece 8:05h
if (minutos >= 485 && minutos <= 545){
for (int i = 0; i < 4; i++) {
tira.setBrightness(50);
tira.setPixelColor(i, 255, 150, 0);
tira.show();
}
}
//Amanece 8:10h
if (minutos >= 490 && minutos <= 550){
for (int i = 0; i < 6; i++) {
tira.setBrightness(75);
tira.setPixelColor(i, 255, 150, 0);
tira.show();
}
}
//Amanece 8:15h
if (minutos >= 495 && minutos <= 555){
for (int i = 0; i < 8; i++) {
tira.setBrightness(100);
tira.setPixelColor(i, 255, 150, 0);
tira.show();
}
}
//Medio día 9:00h
if (minutos >= 540 && minutos <= 600){
for (int i = 0; i < 8; i++) {
tira.setBrightness(125);
if (i < 2) tira.setPixelColor(i, 255, 255, 255); //aqui se ponen los 4 primeros leds en blanco
else tira.setPixelColor(i, 255, 150, 0); //aqui pone el resto en naranja
tira.show();
}
}
//Medio día 9:05h
if (minutos >= 545 && minutos <= 600){
for (int i = 0; i < 8; i++) {
tira.setBrightness(150);
if (i < 4) tira.setPixelColor(i, 255, 255, 255);
else tira.setPixelColor(i, 255, 150, 0);
tira.show();
}
}
//Medio día 9:10h
if (minutos >= 550 && minutos <= 600){
for (int i = 0; i < 8; i++) {
tira.setBrightness(175);
if (i < 6) tira.setPixelColor(i, 255, 255, 255);
else tira.setPixelColor(i, 255, 150, 0);
tira.show();
}
}
//Medio día 9:15h
if (minutos >= 555 && minutos <= 600){
for (int i = 0; i < 8; i++) {
tira.setBrightness(200);
tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Medio día 10:00h
if (minutos >= 600 && minutos <= 1260){
for (int i = 0; i < 8; i++) {
tira.setBrightness(255);
tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Atardecer 21:00h
if (minutos >= 1260 && minutos <= 1365){
for (int i = 0; i < 8; i++) {
tira.setBrightness(255);
if (i < 7) tira.setPixelColor(i, 255, 255, 255); //aqui se pone el 7 primer led en blanco
else tira.setPixelColor(i, 255, 255, 255); //aqui pone el resto en blanco
tira.show();
}
}
//Atardecer 21:05h
if (minutos >= 1265 && minutos <= 1365){
for (int i = 0; i < 8; i++) {
tira.setBrightness(255);
if (i < 6) tira.setPixelColor(i, 0, 0, 255);
else tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Atardecer 21:10h
if (minutos >= 1270 && minutos <= 1380){
for (int i = 0; i < 8; i++) {
tira.setBrightness(255);
if (i < 5) tira.setPixelColor(i, 0, 0, 255);
else tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Atardecer 21:15h
if (minutos >= 1275 && minutos <= 1380){
for (int i = 0; i < 8; i++) {
tira.setBrightness(255);
if (i < 4) tira.setPixelColor(i, 0, 0, 255);
else tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Atardecer 21:20h
if (minutos >= 1280 && minutos <= 1395){
for (int i = 0; i < 8; i++) {
tira.setBrightness(255);
if (i < 3) tira.setPixelColor(i, 0, 0, 255);
else tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Atardecer 21:25h
if (minutos >= 1285 && minutos <= 1395){
for (int i = 0; i < 8; i++) {
tira.setBrightness(255);
if (i < 2) tira.setPixelColor(i, 0, 0, 255);
else tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Atardecer 21:30h
if (minutos >= 1290 && minutos <= 1410){
for (int i = 0; i < 8; i++) {
tira.setBrightness(255);
if (i < 1) tira.setPixelColor(i, 0, 0, 255);
else tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Atardecer 21:35h
if (minutos >= 1295 && minutos <= 1410){
for (int i = 0; i < 8; i++) {
tira.setBrightness(255);
if (i < 0) tira.setPixelColor(i, 255, 255, 255);
else tira.setPixelColor(i, 255, 255, 255);
tira.show();
}
}
//Apagado 22:45h
if (minutos >= 1365 && minutos <= 1410){
for (int i = 0; i < 2; i++) {
tira.setBrightness(128);
tira.setPixelColor(i, 0, 0, 0);
tira.show();
}
}
//Apagado 23:00h
if (minutos >= 1380 && minutos <= 1410){
for (int i = 0; i < 4; i++) {
tira.setBrightness(85);
tira.setPixelColor(i, 0, 0, 0);
tira.show();
}
}
//Apagado 23:15h
if (minutos >= 1405 && minutos <= 1410){
for (int i = 0; i < 6; i++) {
tira.setBrightness(42);
tira.setPixelColor(i, 0, 0, 0);
tira.show();
}
}
//Apagado 23:30h
if (minutos == 1410){
tira.clear();
}
}
lastMinute = m;
}
no he hecho lo del rele porque no se si hay que quitar las lineas de apagado, yo entiendo que si, si pones un else eliminas lo otro, no?
//Burbujas off 23:00h
if (minutos >= 1380 && minutos <= 1410){
digitalWrite(rele2, LOW);
}
//Filtro off 20:45h
if (minutos >= 1245 && minutos <= 1410){
digitalWrite(rele1, LOW);
}
a estas me refiero.
De todas formas puse un else al principio y no me funciono muy bien, no recuerdo el problema que tenia, la verdad.