Go Down

Topic: [SOLUCIONADO] El Loop no lee lineas anteriores después de quitar tensión (Read 2485 times) previous topic - next topic

pykynyky

Entonces voy por buen camino, no??


del codigo tengo algo bien?

_jose_

Bueno ,recuerda lo que te puse sobre si tienes temporizaciones que empiezan antes de media noche y acaban de madrugada y alguna manera de implementar que lo que tenga que hacer entre esas horas lo haga solo una vez,no durante toda la duracion del periodo.Tambien tendrias que repasar el uso de millis() (Hay informacion en Documentacion),tal como tienes tu sketch ahora ,la comprobacion de la hora y el refresco de datos del lcd se realiza constantemente
lo que puede pasar varias veces por segundo,no tiene sentido cuando tu precision es de minuto,es decir con que compruebes cada minuto si ha cambiado la hora es suficiente.

pykynyky

de todas formas me dice:

Code: [Select]

'minutos' cannot be used as a function


de esto

Code: [Select]

  if (minutos() >= 600 && minutos() <= 1260){


que por probar he hecho esto:

Code: [Select]


#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 * por60 + m;
  return totalMinutos;
  }



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);



pykynyky

Bueno ,recuerda lo que te puse sobre si tienes temporizaciones que empiezan antes de media noche y acaban de madrugada y alguna manera de implementar que lo que tenga que hacer entre esas horas lo haga solo una vez,no durante toda la duracion del periodo.
noo, todo el codigo esta programado desde las 7 hasta las 23h

tenia un delay pero me recomendaron el el foro que lo quitara y por eso lo quite, creo que lo tenia bajo de esto

Code: [Select]

 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);


lo pongo otra vez??

pero tenia un delay de (1000)


_jose_

Vuelve a leer el post #16 que lo edite mientras escribias.
De donde sacas esto? 
Code: [Select]
if (minutos() >= 600 && minutos() <= 1260){
Quita los parentesis,es una variable no una funcion.
Code: [Select]
if (minutos >= 600 && minutos <= 1260){

pykynyky

Vuelve a leer el post #16 que lo edite mientras escribias.
De donde sacas esto? 
Code: [Select]
if (minutos() >= 600 && minutos() <= 1260){
Quita los parentesis,es una variable no una funcion.
Code: [Select]
if (minutos >= 600 && minutos <= 1260){
ok. si, es que copie del codigo que tenia y me deje los parentesis.

A lo de las temporizaciones despues demedia noche, no le he hecho caso porque no se aplican pues las temporizaciones son desde las 7 hasta las 23h


Lo del Delay lo quite, lo pongo otra vez??


ahora el codigo est asi:


y parece que compila pero tiene que haber algo mal porque no chuta.



Code: [Select]


#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 * por60 + m;
  return totalMinutos;
  }



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);
 

    //Burbujas ON 7:50h
  if (minutos >= 503){
    digitalWrite(rele2, HIGH);
  }

    //Burbujas off 23:00h
  if (minutos >= 1380){
    digitalWrite(rele2, LOW);
  }
   
    //Filtro ON 7:55h
  if (minutos >=512){
    digitalWrite(rele1, HIGH);
  }
   
    //Filtro off 20:45h
  if (minutos >= 1275){
    digitalWrite(rele1, LOW);
  }
   
 

   


    //Amanece 8:00h
  if (minutos >= 480 && minutos <= 488){
    for (int i = 0; i < 2; i++) {
      tira.setBrightness(25);
      tira.setPixelColor(i, 255, 150, 0);       
      tira.show();
    }
  }
 
    //Amanece 8:05h
   if (minutos >= 488 && minutos <= 497){
    for (int i = 0; i < 4; i++) {
      tira.setBrightness(50);
      tira.setPixelColor(i, 255, 150, 0);       
      tira.show();
    }
  }

    //Amanece 8:10h
  if (minutos >= 497 && minutos <= 505){
    for (int i = 0; i < 6; i++) {
      tira.setBrightness(75);
      tira.setPixelColor(i, 255, 150, 0);       
      tira.show();
    }
  }

    //Amanece 8:15h
  if (minutos >= 505 && minutos <= 540){
    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 <= 548){
    for (int i = 0; i < 2; i++) {
      tira.setBrightness(125);
      tira.setPixelColor(i, 255, 255, 255);       
      tira.show();
    }
  }

    //Medio día 9:05h
  if (minutos >= 548 && minutos <= 557){
    for (int i = 0; i < 4; i++) {
      tira.setBrightness(150);
      tira.setPixelColor(i, 255, 255, 255);       
      tira.show();
    }
  }
   
    //Medio día 9:10h
  if (minutos >= 557 && minutos <= 565){
    for (int i = 0; i < 6; i++) {
      tira.setBrightness(175);
      tira.setPixelColor(i, 255, 255, 255);       
      tira.show();
    }
  }

    //Medio día 9:15h
  if (minutos >= 565 && 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 (fecha.hour() == 21 && fecha.minute() == 0){
    tira.setBrightness(255);
    tira.setPixelColor(0, 255, 255, 255);
    tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 5){
    tira.setBrightness(255);
    tira.setPixelColor(1, 0, 0, 255);
    tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 10){
    tira.setBrightness(255);
    tira.setPixelColor(2, 0, 0, 255);
    tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 15){
    tira.setBrightness(255);
    tira.setPixelColor(3, 0, 0, 255);
    tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 20){
    tira.setBrightness(255);
    tira.setPixelColor(4, 0, 0, 255); 
    tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 25){
    tira.setBrightness(255);
    tira.setPixelColor(5, 0, 0, 255);
    tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 30){
   tira.setBrightness(255);
   tira.setPixelColor(6, 0, 0, 255);
   tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 35){
   tira.setBrightness(255);
   tira.setPixelColor(7, 255, 255, 255);
   tira.show();
  }



    //Apagado 22:00h
  if (fecha.hour() == 22 && fecha.minute() == 45){
    for (int i = 0; i < 2; i++) {
      tira.setBrightness(128);
      tira.setPixelColor(i, 0, 0, 0);
      tira.show();
    }
  }
 
    //Apagado 22:30h
  if (fecha.hour() == 23 && fecha.minute() == 0){
    for (int i = 0; i < 4; i++) {
      tira.setBrightness(85);
      tira.setPixelColor(i, 0, 0, 0);
      tira.show();
    }
  }

   //Apagado 23:00h
  if (fecha.hour() == 23 && fecha.minute() == 15){
    for (int i = 0; i < 6; i++) {
      tira.setBrightness(42);
      tira.setPixelColor(i, 0, 0, 0);
      tira.show();
    }
  }
 
   //Apagado 23:30h
  if (fecha.hour() == 23 && fecha.minute() == 30){
    tira.clear();
  }
}     


he modificado solo hasta las 21h, de momento no hace falta mas


krnlpanic

Deberías compararlo en un rango ya que minutos >= que 503 se va a cumplir hasta las 23:59,

Code: [Select]
    //Burbujas ON 7:50h
  if (minutos >= 503 && minutos <= 1380){
    digitalWrite(rele2, HIGH);
  }
  else digitalWrite(rele2, LOW);
 


También puedes crear una variable con el minuto actual para comparar si ha cambiado y que no se este ejecutando el mismo código 600 veces por minuto (por decir una cifra)
Antes del setup
Code: [Select]
int lastMinute = 0;

Después pones un condicional en el loop
Code: [Select]

   int h = fecha.hour();
   int m = fecha.minute();
   int minutos = minutosTotales(h,m); //el condicional debe ir debajo de esto
if (lastMinute != m) {
//aqui va todo el código que hay ahora en el loop que solo quieras ejecutar 1 vez por minuto
}


Y al final del loop
Code: [Select]
lastMinute = m;

pykynyky

"Deberías compararlo en un rango ya que minutos >= que 503 se va a cumplir hasta las 23:59"

Si esa es la idea, lo puedo cambiar, eso parece solo problema de configuración, se puede mejorar, el problema es que funcione.

aunque revisando teóricamente hasta las 22:59 pues:

23h * 60' = 1380
o sea que en el minuto 1381 se apaga, o sea a las 23:01h.  no?


"//el condicional debe ir debajo de esto"

así que es verdad!!!
el orden afecta, lo tenia en mente pero no estaba seguro, voy a probar lo tuyo también, pero aun no me habéis dicho si lo que hemos hecho y como esta escrito esta bien, lo necesito por favor.


"También puedes crear una variable con el minuto actual para comparar si ha cambiado y que no se este ejecutando el mismo código 600 veces por minuto (por decir una cifra)
Antes del setup"

es necesario??


lo hago??

pykynyky

#23
Apr 21, 2020, 07:05 pm Last Edit: May 02, 2020, 10:46 pm by surbyte Reason: No repitas lo que se lee arriba
@krnlpanic, te refieres a toda la programación (en tiempo) lo acabo de hacer y aunque si compila no ejecuta


Si no he metido la pata es codigo queda asi:

Code: [Select]


#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 * por60 + 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 >= 503){
    digitalWrite(rele2, HIGH);
  }

    //Burbujas off 23:00h
  if (minutos >= 1380){
    digitalWrite(rele2, LOW);
  }
    
    //Filtro ON 7:55h
  if (minutos >=512){
    digitalWrite(rele1, HIGH);
  }
    
    //Filtro off 20:45h
  if (minutos >= 1275){
    digitalWrite(rele1, LOW);
  }
    
  

    


    //Amanece 8:00h
  if (minutos >= 480 && minutos <= 488){
    for (int i = 0; i < 2; i++) {
      tira.setBrightness(25);
      tira.setPixelColor(i, 255, 150, 0);        
      tira.show();
    }
  }
  
    //Amanece 8:05h
   if (minutos >= 488 && minutos <= 497){
    for (int i = 0; i < 4; i++) {
      tira.setBrightness(50);
      tira.setPixelColor(i, 255, 150, 0);        
      tira.show();
    }
  }

    //Amanece 8:10h
  if (minutos >= 497 && minutos <= 505){
    for (int i = 0; i < 6; i++) {
      tira.setBrightness(75);
      tira.setPixelColor(i, 255, 150, 0);        
      tira.show();
    }
  }

    //Amanece 8:15h
  if (minutos >= 505 && minutos <= 540){
    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 <= 548){
    for (int i = 0; i < 2; i++) {
      tira.setBrightness(125);
      tira.setPixelColor(i, 255, 255, 255);        
      tira.show();
    }
  }

    //Medio día 9:05h
  if (minutos >= 548 && minutos <= 557){
    for (int i = 0; i < 4; i++) {
      tira.setBrightness(150);
      tira.setPixelColor(i, 255, 255, 255);        
      tira.show();
    }
  }
  
    //Medio día 9:10h
  if (minutos >= 557 && minutos <= 565){
    for (int i = 0; i < 6; i++) {
      tira.setBrightness(175);
      tira.setPixelColor(i, 255, 255, 255);        
      tira.show();
    }
  }

    //Medio día 9:15h
  if (minutos >= 565 && 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 (fecha.hour() == 21 && fecha.minute() == 0){
    tira.setBrightness(255);
    tira.setPixelColor(0, 255, 255, 255);
    tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 5){
    tira.setBrightness(255);
    tira.setPixelColor(1, 0, 0, 255);
    tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 10){
    tira.setBrightness(255);
    tira.setPixelColor(2, 0, 0, 255);
    tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 15){
    tira.setBrightness(255);
    tira.setPixelColor(3, 0, 0, 255);
    tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 20){
    tira.setBrightness(255);
    tira.setPixelColor(4, 0, 0, 255);  
    tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 25){
    tira.setBrightness(255);
    tira.setPixelColor(5, 0, 0, 255);
    tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 30){
   tira.setBrightness(255);
   tira.setPixelColor(6, 0, 0, 255);
   tira.show();
  }

  if (fecha.hour() == 21 && fecha.minute() == 35){
   tira.setBrightness(255);
   tira.setPixelColor(7, 255, 255, 255);
   tira.show();
  }



    //Apagado 22:00h
  if (fecha.hour() == 22 && fecha.minute() == 45){
    for (int i = 0; i < 2; i++) {
      tira.setBrightness(128);
      tira.setPixelColor(i, 0, 0, 0);
      tira.show();
    }
  }
  
    //Apagado 22:30h
  if (fecha.hour() == 23 && fecha.minute() == 0){
    for (int i = 0; i < 4; i++) {
      tira.setBrightness(85);
      tira.setPixelColor(i, 0, 0, 0);
      tira.show();
    }
  }

   //Apagado 23:00h
  if (fecha.hour() == 23 && fecha.minute() == 15){
    for (int i = 0; i < 6; i++) {
      tira.setBrightness(42);
      tira.setPixelColor(i, 0, 0, 0);
      tira.show();
    }
  }
  
   //Apagado 23:30h
  if (fecha.hour() == 23 && fecha.minute() == 30){
    tira.clear();
  }
}

lastMinute = m;  
}      

krnlpanic

He borrado del código todo lo referente a RTC LCD y la tira led para no tener que montar todo eso, he hecho un simulador de reloj para ir pasando los minutos rápidamente y ver si cumple, solo he tenido que modificar la función ya que tenia un fallo, delante del * tenia escrito por, el resto me ha funcionado correctamente.

Code: [Select]

int minutosTotales(int h, int m) {
  int por60 = 60;
  int totalMinutos;
  totalMinutos = h * 60 + m;
  return totalMinutos;
}

pykynyky

Buenos días, si, pero no del todo.

Le he quitado tensión para ajustar los relés pues anoche no se apagaban y al ponerlo no ha funcionado del todo bien, me explico:

Hay una franja horaria entre las 8 y las 9 en que queda toda la tira en marcha en tonos amarillos y otra entre las 9 y las 10h en tonos blancos toda la tira también.

Bueno le he quitado tensión (y cuando digo quitado tensión me refiero a quitarle corriente y el microprocesador) a las 8:57h y a las 8:58h cuando lo he puesto se han encendido todas, bien, si esto sigue así bien...

pero no, se lo he tenido que quitar otra vez para ajustar los relés y a las 9:05h cuando lo he puesto tenia que tener parte de la tira en amarillos y un par o tres  en blanco, pues solo se han encendido los blancos.

krnlpanic

Por tu código a las 9:05 solo cambian 4 leds, si anteriormente has hecho otros cambios en otros leds estos permanecerán ya que no le pides un nuevo cambio al resto de leds, pero si reinicias solo se activaran esos 4 que están en la programación en ese rango horario.

Prueba así
Code: [Select]

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();
    }

pykynyky

te refieres que como va en cascada no tiene que encenderse, no??

ok, voy a probar hoy, he modificado las horas porque no estaban bien a ver hoy que pasa, te dejo el codigo por si quieres ver como queda despues de meterle mano


Code: [Select]


#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 >= 503 && minutos <= 1380){
    digitalWrite(rele2, HIGH);
  }

    //Burbujas off 23:00h
  if (minutos >= 1380 && minutos <= 1430){
    digitalWrite(rele2, LOW);
  }
   
    //Filtro ON 7:55h
  if (minutos >=512 && minutos <= 1275){
    digitalWrite(rele1, HIGH);
  }
   
    //Filtro off 20:45h
  if (minutos >= 1275 && minutos <= 1430){
    digitalWrite(rele1, LOW);
  }
   
 

   


    //Amanece 8:00h
  if (minutos >= 480 && minutos <= 488){
    for (int i = 0; i < 2; i++) {
      tira.setBrightness(25);
      tira.setPixelColor(i, 255, 150, 0);       
      tira.show();
    }
  }
 
    //Amanece 8:05h
   if (minutos >= 488 && minutos <= 497){
    for (int i = 0; i < 4; i++) {
      tira.setBrightness(50);
      tira.setPixelColor(i, 255, 150, 0);       
      tira.show();
    }
  }

    //Amanece 8:10h
  if (minutos >= 497 && minutos <= 505){
    for (int i = 0; i < 6; i++) {
      tira.setBrightness(75);
      tira.setPixelColor(i, 255, 150, 0);       
      tira.show();
    }
  }

    //Amanece 8:15h
  if (minutos >= 505 && minutos <= 540){
    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 <= 548){
    for (int i = 0; i < 2; i++) {
      tira.setBrightness(125);
      tira.setPixelColor(i, 255, 255, 255);       
      tira.show();
    }
  }

    //Medio día 9:05h
  if (minutos >= 548 && minutos <= 557){
    for (int i = 0; i < 4; i++) {
      tira.setBrightness(150);
      tira.setPixelColor(i, 255, 255, 255);       
      tira.show();
    }
  }
   
    //Medio día 9:10h
  if (minutos >= 557 && minutos <= 565){
    for (int i = 0; i < 6; i++) {
      tira.setBrightness(175);
      tira.setPixelColor(i, 255, 255, 255);       
      tira.show();
    }
  }

    //Medio día 9:15h
  if (minutos >= 565 && 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 <= 1395){
    tira.setBrightness(255);
    tira.setPixelColor(0, 255, 255, 255);
    tira.show();
  }
      //Atardecer 21:05h
  if (minutos >= 1268 && minutos <= 1395){
    tira.setBrightness(255);
    tira.setPixelColor(1, 0, 0, 255);
    tira.show();
  }
      //Atardecer 21:10h
  if (minutos >= 1277 && minutos <= 1380){
    tira.setBrightness(255);
    tira.setPixelColor(2, 0, 0, 255);
    tira.show();
  }
      //Atardecer 21:15h
  if (minutos >= 1285 && minutos <= 1380){
    tira.setBrightness(255);
    tira.setPixelColor(3, 0, 0, 255);
    tira.show();
  }
      //Atardecer 21:20h
  if (minutos >= 1293 && minutos <= 1405){
    tira.setBrightness(255);
    tira.setPixelColor(4, 0, 0, 255); 
    tira.show();
  }
      //Atardecer 21:25h
  if (minutos >= 1302 && minutos <= 1405){
    tira.setBrightness(255);
    tira.setPixelColor(5, 0, 0, 255);
    tira.show();
  }
      //Atardecer 21:30h
  if (minutos >= 1310 && minutos <= 1430){
   tira.setBrightness(255);
   tira.setPixelColor(6, 0, 0, 255);
   tira.show();
  }
      //Atardecer 21:35h
  if (minutos >= 1318 && minutos <= 1430){
   tira.setBrightness(255);
   tira.setPixelColor(7, 255, 255, 255);
   tira.show();
  }



    //Apagado 22:45h
  if (minutos >= 1395 && minutos <= 1430){
    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 <= 1430){
    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 <= 1430){
    for (int i = 0; i < 6; i++) {
      tira.setBrightness(42);
      tira.setPixelColor(i, 0, 0, 0);
      tira.show();
    }
  }
 
   //Apagado 23:30h
  if (minutos == 1430){
    tira.clear();
  }
}

lastMinute = m; 
}     


me he basado en las conversiones de estas horas:

Code: [Select]

/*
      HORAS      ENTEROS   
        7         420
        8         480
        9         540
        10        600
        11        660
        12        720   
        13        780
        14        840
        15        900
        16        960
        17        1020
        18        1080
        19        1140
        20        1200
        21        1260
        22        1320
        23        1380
 */


y estos minutos:

Code: [Select]

/*
          MINUTOS           ENTERO
            5                 8
            10                17
            15                25
            20                33
            25                42
            30                50
            35                58
            40                67
            45                75
            50                83
            55                92

  */

krnlpanic

No has implementado lo de mi ultimo post en ninguna hora para dejar bien todos los leds.
Si solo ha de cumplir un rango horario y el resto estar apagado con un else te sirve y no necesitas comparar nada mas, también te puse un ejemplo.

Los minutos no van de 0 a 100, se suman tal cual de 0 a 60.

pykynyky

Disculpa no te he entendido bien, te ruego que comprendas.

te refieres a que lo cambie todo?
o solo en las 9:05h?
a las 9 de la mañana o de la noche?

luego otra cosa, lo tuyo es para cambiar 4 leds a la vez? es que no me interesa que cambie la luz tanta y tan de golpe, recuerda que es un acuario el pez, debe acostumbrarse a la luz poco a poco, es por ello que hay muchos que encienden uno a uno, aunque sean cada 5 minutos.


HAAAAA los minutos tal cual, si, ok, veras lo puse asi porque pusiste en un ejemplo las 8.5 y pensé que en los minutos era fraccionario o sea, a los 15 minutos seria el 25% a la media hora seria el 50%...

vale mañana por la mañana cambiare todos los números y probare durante el día.

tu por favor, explícame un poco mas despacio ( te lo ruego) lo de tu ultimo comentario si se ajusta a mis necesidades (lo de un led a uno).


Agradezco vuestra ayuda de verdad, os merecéis un cervezote cada uno y si estáis por el mediterráneo Español lo podemos ver, en serio.


Go Up