Ayuda con mi codigo por favor

Tema en 'Programación' iniciado por nito_dj, 2 Nov 2014.

  1. nito_dj

    nito_dj

    Mensajes:
    1.798
    Registrado:
    28 Sep 2008
    Ubicación:
    España
    Buenas a todos,

    llevo con mi pantalla y con mi código algo mas de dos meses y no consigo hacerlo funcionar en condiciones.
    El caso es que lo que yo hago es lo más sencillo posible, tan solo controlo 4 canales para el amanecer y anochecer de la pantalla, nada mas, ni ph ni nivel de agua ni nada, solo la pantalla...

    Mi programa estoy seguro que es de lo más chapuza que puedes encontrar ya que mi conocimiento de programación es escaso y es lo único que he podido hacer funcionar como quiero. El problema que tengo es que cuando le da la gana (ya sea a las horas o a los días de funcionar) se queda el programa bloqueado y no hace absolutamente nada, es decir, si esta encendida se queda encendida y si esta apagada o apagando o encendiendo, se queda en el punto en el que se encuentre. Tengo que desenchufar y volver a enchufar para que siga funcionando.

    No consigo saber la causa ya que nunca se bloquea en el mismo punto ni a la misma hora ni nada.

    Necesito que vosotros los que entendéis mucho más que yo, por favor me echéis una mano y miréis si podéis ayudarme y depurar mejor el código. Es ya desesperante irte un fin de emana y ver que la luz se ha quedado encendida los dos días o apagada o levantarte y ver la pantalla bloqueada...

    Os pongo aquí mi código, como digo, seguro que es una chapuza pero lo único que he conseguido hacer...

    Aquí os pongo el código, veréis que el paso de los minutos lo hago "forzado" sumando minuto a minuto y solo consulto el reloj una vez al día ya que si lo consulto cada segundo o cada minuto, los bloqueos son continuos y funciona aun peor. Los delays los hago de menos de 1 segundo ya que compenso el retraso que me provoca si le pongo delay(1000).

    PHP:
    #include <Wire.h>   // Incluye la librería Wire

    #include "RTClib.h" // Incluye la librería RTClib

    #include <OneWire.h>

    #include <pitches.h> //Libreria para buzzer

    #include <MemoryFree.h>

    #include <LiquidCrystal_I2C.h>
        
    LiquidCrystal_I2C lcd(0x2721045673POSITIVE);

    RTC_DS1307 RTC// Crea el objeto RTC

     
     
    int hora;
      
    int minuto;

    int segundo;

    int x=0;


     

    void setup () {
      
     

    Serial.begin(9600); // Establece la velocidad de datos del puerto serie

    Wire.begin(); // Establece la velocidad de datos del bus I2C

    RTC.begin();// Establece la velocidad de datos del RTC

    //Descomentar la linea siguiente cada vez que queramos ponerlo en hora

    //RTC.adjust(DateTime(__DATE__, __TIME__)); 

    pinMode(7OUTPUT); //Azules//
    pinMode(8OUTPUT); //Blancos//
    pinMode(9OUTPUT); //Mixtos//
    pinMode(10OUTPUT); //Mixtos2//

    lcd.noBlink();
    lcd.begin(16,2);
    lcd.clear();

    lcd.setCursor(00); 
    lcd.print(" ACUARIO MARINO ");
    delay(1000);
    lcd.setCursor(0,1);
    lcd.print(" Cargando ");
    delay(1000);
    for (
    int i=0i<5i++)
      {
      
    lcd.print((char)46); //pone un punto
      
    delay (1000);
      }
     
    }


    void loop () {

      
    int minute;

      
    int hour;
      
      
    int second;

      
    int tiempo;

      
    if(
    x==0)
    {
      
    DateTime now RTC.now(); // Obtiene la fecha y hora del RTC
      
    hora=now.hour();
      
    minuto=now.minute();
    }
     
    lcd.clear();
    lcd.noBlink();

    lcd.setCursor(110);
    if (
    hora 10
      
    lcd.print("0"); 
    lcd.print(horaDEC);
    lcd.print(":"); 
    if (
    minuto 10
      
    lcd.print("0"); 
    lcd.print(minutoDEC);


    tiempo=(hora*60)+minuto;

    Luces (tiempo);

    }


    void Luces(int tiempo)
    {
      
     
    ///////////tiempos de progamacion//////////

     
    int PotAzulPotBlancoPotMixPotMix2Porcent;

     
    int IamaneceAzules=720//12:00

     
    int FamaneceAzules=750//12:30 //
     
     
    int IanocheceAzules=1381//23:01//
     
     
    int FanocheceAzules=1410//23:30//
     
     
    int IamaneceBlancos=751//12:31//
     
     
    int FamaneceBlancos=780//13:00//
     
     
    int IanocheceBlancos1321//22:01//

     
    int FanocheceBlancos=1380//23.00//
     
     
    int IamaneceMixtos=781//13:01//
     
     
    int FamaneceMixtos=840//14:00//
     
     
    int IanocheceMixtos=1260//21:00//
     
     
    int FanocheceMixtos=1320//22:00//

     
    int MaxLED=250;//-canal2
     
     
    int MaxRojos=250;//-canal4
     
     
    int MaxAzules=250//-canal 1
     
     
    int MaxBlancos=250;//-canal3
     

    //Noche

     
    if (tiempo FanocheceAzules || tiempo IamaneceAzules 

      {

       
    PotAzul=1;
       
    PotBlanco=0;
       
    PotMix=0;
       
    PotMix2=0;
       
    analogWrite(10PotAzul);
       
    analogWrite(8PotBlanco);
       
    analogWrite(9PotMix);
       
    analogWrite(7PotMix2);
        
       for (
    int i=0i<30i++)
       { 
         
    lcd.setCursor(0,0);
         
    lcd.print("Luces");
         
    lcd.setCursor(0,1);
         
    lcd.print("apagadas ");
         
    delay(979);
       } 
       for (
    int i=0i<30i++)
       {
         
    lcd.setCursor(00); 
         
    lcd.print("C1:- ");
         
    lcd.print("C2:-");
         
    lcd.setCursor(0,1);
         
    lcd.print("C3:- ");
         
    lcd.print("C4:-     ");
         
    delay(979);
        }
       

     }

     

    //AmanecerAzules

     
    if (tiempo >= IamaneceAzules && tiempo <= FamaneceAzules

      {

       
    PotAzul=map(tiempo,IamaneceAzules,FamaneceAzules,1,MaxAzules);
       
    PotBlanco=0;
       
    PotMix=0;
       
    PotMix2=0;
       
    Porcent=(PotAzul*100)/MaxAzules;
       
    analogWrite(10PotAzul);
       
    analogWrite(8PotBlanco);
       
    analogWrite(9PotMix);
       
    analogWrite(7PotMix2);
       
       for (
    int i=0i<30i++)
       { 
         
    lcd.setCursor(0,0);
         
    lcd.print("Canal 1");
         
    lcd.setCursor(0,1);
         
    lcd.print("Encendiendo ");
         
    lcd.print(Porcent); 
         
    lcd.print("%");
         
    delay(979);
       }
       for (
    int i=0i<30i++)
       {
         
    lcd.setCursor(00); 
         
    lcd.print("C1:E ");
         
    lcd.print("C2:-");
         
    lcd.setCursor(0,1);
         
    lcd.print("C3:- ");
         
    lcd.print("C4:-     ");
         
    delay(979);
        }
       
       

      }
      
    //AmanecerBlancos

     
    if (tiempo >= IamaneceBlancos && tiempo <= FamaneceBlancos

      {

       
    PotBlanco=map(tiempo,IamaneceBlancos,FamaneceBlancos,1,MaxLED);
       
    PotAzul=MaxAzules;
       
    PotMix=0;
       
    PotMix2=0;
       
    Porcent=(PotBlanco*100)/MaxLED;
       
    analogWrite(10PotAzul);
       
    analogWrite(8PotBlanco);
       
    analogWrite(9PotMix);
       
    analogWrite(7PotMix2);
       
       for (
    int i=0i<30i++)
       { 
         
    lcd.setCursor(0,0);
         
    lcd.print("Canal 2");
         
    lcd.setCursor(0,1);
         
    lcd.print("Encendiendo ");
         
    lcd.print(Porcent); 
         
    lcd.print("%");
         
    delay(979);
       }
       for (
    int i=0i<30i++)
       {
         
    lcd.setCursor(00); 
         
    lcd.print("C1:E ");
         
    lcd.print("C2:E");
         
    lcd.setCursor(0,1);
         
    lcd.print("C3:- ");
         
    lcd.print("C4:-     ");
         
    delay(979);
        }
       

      }
      
      
    //AmanecerMixtos

     
    if (tiempo >= IamaneceMixtos && tiempo <= FamaneceMixtos

      {

       
    PotMix=map(tiempo,IamaneceMixtos,FamaneceMixtos,1,MaxBlancos);
       
    PotMix2=map(tiempo,IamaneceMixtos,FamaneceMixtos,1,MaxRojos);
       
    PotAzul=MaxAzules;
       
    PotBlanco=MaxLED;
       
    analogWrite(10PotAzul);
       
    analogWrite(8PotBlanco);
       
    analogWrite(9PotMix);
       
    analogWrite(7PotMix2);
      
       
    Porcent=(PotMix*100)/MaxBlancos;
       
       for (
    int i=0i<30i++)
       {
         
    lcd.setCursor(0,0);
         
    lcd.print("Canal 3/4");
         
    lcd.setCursor(0,1);
         
    lcd.print("Encendiendo ");
         
    lcd.print(Porcent); 
         
    lcd.print("%");
         
    delay(979);
       }
       for (
    int i=0i<30i++)
       {
         
    lcd.setCursor(00); 
         
    lcd.print("C1:E ");
         
    lcd.print("C2:E");
         
    lcd.setCursor(0,1);
         
    lcd.print("C3:E ");
         
    lcd.print("C4:E     "); 
         
    delay(979);
        }
       

      }
      
      
    //Dia
      
      
    if (tiempo FamaneceMixtos && tiempo IanocheceMixtos)
      
      {
        
    PotAzul=MaxAzules;
        
    PotBlanco=MaxLED;
        
    PotMix=MaxBlancos;
        
    PotMix2=MaxRojos;
        
    analogWrite(10PotAzul);
        
    analogWrite(8PotBlanco);
        
    analogWrite(9PotMix);
        
    analogWrite(7PotMix2);
        
    lcd.setCursor(15,1);
                         
        
        for (
    int i=0i<30i++)
       {
         
    lcd.setCursor(0,0);
         
    lcd.print("Luces");
         
    lcd.setCursor(0,1);
         
    lcd.print("encendidas        ");
         
    delay(979);
       }
        for (
    int i=0i<30i++)
       {
         
    lcd.setCursor(00); 
         
    lcd.print("C1:E ");
         
    lcd.print("C2:E");
         
    lcd.setCursor(0,1);
         
    lcd.print("C3:E ");
         
    lcd.print("C4:E     ");
         
    delay(979);
        }
        
      }
     

    //AnochecerMixtos

     
    if (tiempo >= IanocheceMixtos && tiempo <= FanocheceMixtos)

      {

       
    PotMix=map(tiempo,IanocheceMixtos,FanocheceMixtos,MaxBlancos,1);
       
    PotMix2=map(tiempo,IanocheceMixtos,FanocheceMixtos,MaxRojos,1);
       
    PotAzul=MaxAzules;
       
    PotBlanco=MaxLED;
       
    Porcent=(PotMix*100)/MaxBlancos;
       
    analogWrite(10PotAzul);
       
    analogWrite(8PotBlanco);
       
    analogWrite(9PotMix);
       
    analogWrite(7PotMix2);
       
       for (
    int i=0i<30i++)
       {
         
    lcd.setCursor(0,0);
         
    lcd.print("Canal 3/4");
         
    lcd.setCursor(0,1);
         
    lcd.print("Apagando ");
         
    lcd.print(Porcent); 
         
    lcd.print("%");
         
    delay(979);
       }
       for (
    int i=0i<30i++)
       {
         
    lcd.setCursor(00); 
         
    lcd.print("C1:E ");
         
    lcd.print("C2:E");
         
    lcd.setCursor(0,1);
         
    lcd.print("C3:- ");
         
    lcd.print("C4:-     ");
         
    delay(979);
        }
       

      }
      
      
    //AnochecerBlancos

     
    if (tiempo >= IanocheceBlancos && tiempo <= FanocheceBlancos)

      {

        
    PotBlanco=map(tiempo,IanocheceBlancos,FanocheceBlancos,MaxLED,1);
        
    PotAzul=MaxAzules;
        
    PotMix=0;
        
    PotMix2=0;
        
    Porcent=(PotBlanco*100)/MaxLED;  
        
    analogWrite(10PotAzul);
        
    analogWrite(8PotBlanco);
        
    analogWrite(9PotMix);
        
    analogWrite(7PotMix2); 
       
       for (
    int i=0i<30i++)
       {
         
    lcd.setCursor(0,0);
         
    lcd.print("Canal 2");
         
    lcd.setCursor(0,1);
         
    lcd.print("Apagando ");
         
    lcd.print(Porcent); 
         
    lcd.print("%");
         
    delay(979);
       }
       for (
    int i=0i<30i++)
       {
         
    lcd.setCursor(00); 
         
    lcd.print("C1:E ");
         
    lcd.print("C2:-");
         
    lcd.setCursor(0,1);
         
    lcd.print("C3:- ");
         
    lcd.print("C4:-     ");
         
    delay(979);
        }
       

      }
      
        
    //AnochecerAzules

     
    if (tiempo >= IanocheceAzules && tiempo <= FanocheceAzules)

      {

        
    PotAzul=map(tiempo,IanocheceAzules,FanocheceAzules,MaxAzules,1);
        
    PotBlanco=0;
        
    PotMix=0;
        
    PotMix2=0;
        
    Porcent=(PotAzul*100)/MaxAzules;
        
    analogWrite(10PotAzul);
        
    analogWrite(8PotBlanco);
        
    analogWrite(9PotMix);
        
    analogWrite(7PotMix2);
       
      for (
    int i=0i<30i++)
      {
        
    lcd.setCursor(0,0);
        
    lcd.print("Canal 1");
        
    lcd.setCursor(0,1);
        
    lcd.print("Apagando ");
        
    lcd.print(Porcent); 
        
    lcd.print("%");
        
    delay(979);
       }
       for (
    int i=0i<30i++)
      {
        
    lcd.setCursor(00); 
        
    lcd.print("C1:- ");
        
    lcd.print("C2:-");
        
    lcd.setCursor(0,1);
        
    lcd.print("C3:- ");
        
    lcd.print("C4:-     ");
        
    delay(979);
        }
       

      }

     
    //Control

     
    if(PotAzul 0
      {
       
    PotAzul=0;
      }
      
       if(
    PotBlanco 0
      {
        
    PotBlanco=0;
      }
      
       if(
    PotMix 0
      {
       
    PotMix=0;
      }
      
      if(
    PotMix2 0
      {
       
    PotMix2=0;
      }

     

    if(
    PotAzul >MaxAzules
      {
       
    PotAzul=MaxAzules;
      }
      
      if(
    PotBlanco >MaxLED
      {
       
    PotBlanco=MaxLED;
      }
      
      if(
    PotMix >MaxBlancos)
      {
       
    PotMix=MaxBlancos;
      }
      
      if(
    PotMix2 >MaxRojos
      {
       
    PotMix2=MaxRojos;
      }
      
     
    minuto=minuto+1;

     if (
    minuto==60)
     {
       
    minuto=0;
       
    hora=hora+1;
       if (
    hora==24)
         {
           
    hora=0;
         }
     }
     
     
    x=x+1;

     if (
    hora==&& minuto==0
     {
      
    x=0;
     }
     
    }


    Ayudadme por favor que he visto muchos programas buenisimos por aquí!!!

    Gracias!!
     
  2. D4n1

    D4n1

    Mensajes:
    473
    Registrado:
    10 Ago 2009
    Ubicación:
    España
    Creo que el peor problema es lo del reloj, intenta que funcione correctamente. No se que modelo es ni como lo tienes conectado, pero el mío con este código funciona bien:
    getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); //Obtenemos la hora
    ¿Que modelo es y como está conectado?

    He estado revisando el código y parece que es correcto, como dices, es mejorable, pero no veo porque no debería de funcionar
     
  3. nito_dj

    nito_dj

    Mensajes:
    1.798
    Registrado:
    28 Sep 2008
    Ubicación:
    España
    Tengo un DS1307 y lo tengo conectado asi:

    DS1307_Arduino.jpg

    El problema es que funciona bien, pero a los minutos, las horas o a los dias se bloquea todo y deja de funcionar...es desesperante.
    Si alguien tiene un hueco y no le importa depurar mi codigo para probar...se lo agradeceria muchisimo

    Gracias D4n1
     
  4. Manolo65

    Manolo65

    Mensajes:
    86
    Registrado:
    20 Abr 2008
    Ubicación:
    España

    Con que alimentas al arduino?
    Yo he tenido problemas de temperatura porque el regulador es bastante malillo y se le alimentaba con 12v se me calentaba mucho y acababa colgandose.
    Mira a ver cuando se cuelga si esta muy caliente.

    Con 7,5v nunca he tenido ese problema ...que ojo lo mismo lo tuyo es otra cosa claro.

    Manolo
     
  5. Kaly

    Kaly

    Mensajes:
    6.181
    Registrado:
    6 Ago 2012
    Ubicación:
    Sevilla
    He mirado un poco por encima el código y no he visto ningún watchdog, prueba a ponerlo de vez en cuando a ver si mejora.
     
  6. nito_dj

    nito_dj

    Mensajes:
    1.798
    Registrado:
    28 Sep 2008
    Ubicación:
    España
    La verdad es que lo alimento con 6v con lo que calentarse...quiza sea porque esta en la misma caja que la fuente de alimentacion y se calienta?
     
  7. nito_dj

    nito_dj

    Mensajes:
    1.798
    Registrado:
    28 Sep 2008
    Ubicación:
    España
    Los puse y el problema seguia asi que los quite...

    La verdad que no se que puede ser...
     
  8. Manolo65

    Manolo65

    Mensajes:
    86
    Registrado:
    20 Abr 2008
    Ubicación:
    España
    Pues si es con 6 a ver si es todo lo contrario que en algun momento no tenga suficiente y se cuelgue por eso . Si tienes a mano alguna que te de 9v yo probaria.
     
  9. Kaly

    Kaly

    Mensajes:
    6.181
    Registrado:
    6 Ago 2012
    Ubicación:
    Sevilla
    Bueno, aunque no sea la solución a tu problema, no esta de mas que lo tengas. Puede prevenir otros problemas
     
  10. jmcadsl

    jmcadsl Miembro Honorífico

    Mensajes:
    852
    Registrado:
    17 Ene 2010
    Ubicación:
    España
    Hola!
    Yo haría lo siguiente:
    Cargaría un ejemplo de la libreria RTC y dejaría conectada la placa al PC (para mirar por el puerto serie como va cambiando la hora) o bien mandaría al LCD el dato del segundo por ejemplo(sin más codigo, ni luces ni sensores nada más, solo eso)

    Si se te cuelga debes cambiar la placa de reloj , si con una nueva placa se cuelga debes cambiar el Arduino.
    Aunque suene "fuerte" , hay algunas compras por Ebay que no son de la calidad esperada y nos da lugar a fallos de este tipo.

    Un saludo!
    Jorge
     
  11. nito_dj

    nito_dj

    Mensajes:
    1.798
    Registrado:
    28 Sep 2008
    Ubicación:
    España
    El problema es que esto me ha pasado con dos placas y dos relojes distintos ya que tengo otra pantalla pequeña para otro acuario... Por suerte, en el otro dejo de pasar y ya funciona bien pero aqui no hay forma, estoy desdsperado porque a las horas se bloquea y mirad lo que pasa

    image.jpg

    Alguien tendria un hueco para echarme una mano con el codigo?? Se que mucha gente tiene programas hechos para controlar 4 canales y seguro que me podria echar un cable...
     
  12. Manolo65

    Manolo65

    Mensajes:
    86
    Registrado:
    20 Abr 2008
    Ubicación:
    España
    Perdona que insista .

    Pero con 6v no alimentas bien al arduino .

    El regulador necesita al menso 7v para poder funcionar en condiciones.
     
  13. nito_dj

    nito_dj

    Mensajes:
    1.798
    Registrado:
    28 Sep 2008
    Ubicación:
    España
    Lo tengo con 9V después de que me comentaras que probara a meterle mas por si no alimentaba bien.
    Funciona correctamente durante unas horas incluso un día entero pero de repente o bien se bloquea en el punto en el que se encuentre, o me muestra la pantalla como la foto que os he puesto e igualmente queda bloqueado...Raro raro raro...
     
  14. Manolo65

    Manolo65

    Mensajes:
    86
    Registrado:
    20 Abr 2008
    Ubicación:
    España
    Entonces no he dicho nada .

    Perdona :yb639[1]:

    Si tienes el mismo codigo en 2 sitios y uno se bloquea y otro no .

    Tiene pinta de algun componente erroneo mas que del codigo en si mismo
     
  15. nito_dj

    nito_dj

    Mensajes:
    1.798
    Registrado:
    28 Sep 2008
    Ubicación:
    España
    No hay nada que perdonar compañero.

    Antes se me bloqueaba tambien la otra pantalla con los mismos componentes que ahora tiene, simplemente, dejo de hacerlo... esta fue al reves, iba bien y ahora de repente vuelve a bloquearse.

    Viendo los post-tutoriales de Jmcadsl, he modificado el codigo, simplemente la forma de obtener la hora y algun detalle más, como por ejemplo poner un solo delay de 1 minuto dentro del loop justo despues de llamar a la funcion luces y asi, la pausa la hace fuera de la función y no dentro como antes lo hacía. No se si influye pero quiza tenga algo que ver. Lo pongo aqui por si alguien le apetece echar un vistazo. Aun no lo he probado ni compilado ya que lo acabo de hacer en un ratito en el trabajo y no estoy en casa...

    PHP:
    #include <Wire.h>   // Incluye la librería Wire 

    #include "RTClib.h" // Incluye la librería RTClib 

    #include <OneWire.h> 

    #include <pitches.h> //Libreria para buzzer 

    #include <MemoryFree.h> 

    #include <LiquidCrystal_I2C.h> 
         
    LiquidCrystal_I2C lcd(0x27,16,2);
    #define DS1307_I2C_ADDRESS 0x68//RELOJ Direccion



    //RELOJ
    byte secondminutehourdayOfWeekdayOfMonthmonthyear,ajustereloj=0;
    int hora;
    int minute;

    long offset;
    byte decToBcd(byte val)
    {
      return ( (
    val/10*16) + (val%10) );
    }
    // Convert binary coded decimal to normal decimal numbers
    byte bcdToDec(byte val)
    {
      return ( (
    val/16*10) + (val%16) );
    }
    void setDateDs1307(byte second,        // 0-59
                       
    byte minute,        // 0-59
                       
    byte hour,          // 1-23
                       
    byte dayOfWeek,     // 1-7
                       
    byte dayOfMonth,    // 1-28/29/30/31
                       
    byte month,         // 1-12
                       
    byte year)          // 0-99
    {
       
    Wire.beginTransmission(DS1307_I2C_ADDRESS);
       
    Wire.write(0);
       
    Wire.write(decToBcd(second));    // 0 to bit 7 starts the clock
       
    Wire.write(decToBcd(minute));
       
    Wire.write(decToBcd(hour));      // If you want 12 hour am/pm you need to set
                                       // bit 6 (also need to change readDateDs1307)
       
    Wire.write(decToBcd(dayOfWeek));
       
    Wire.write(decToBcd(dayOfMonth));
       
    Wire.write(decToBcd(month));
       
    Wire.write(decToBcd(year));
       
    Wire.endTransmission();
    }
    void getDateDs1307(byte *second,
              
    byte *minute,
              
    byte *hour,
              
    byte *dayOfWeek,
              
    byte *dayOfMonth,
              
    byte *month,
              
    byte *year)
    {
      
    // Reset the register pointer
      
    Wire.beginTransmission(DS1307_I2C_ADDRESS);
      
    Wire.write(0);
      
    Wire.endTransmission();

      
    Wire.requestFrom(DS1307_I2C_ADDRESS7);

      
    // A few of these need masks because certain bits are control bits
      
    *second     bcdToDec(Wire.read() & 0x7f);
      *
    minute     bcdToDec(Wire.read());
      *
    hour       bcdToDec(Wire.read() & 0x3f);  // Need to change this if 12 hour am/pm
      
    *dayOfWeek  bcdToDec(Wire.read());
      *
    dayOfMonth bcdToDec(Wire.read());
      *
    month      bcdToDec(Wire.read());
      *
    year       bcdToDec(Wire.read());
    }



      

    void setup () { 
       
      

    //Serial.begin(9600); // Establece la velocidad de datos del puerto serie 

    Wire.begin(); // Establece la velocidad de datos del bus I2C 

    setDateDs1307(0016,5,7,11,2014); //Esto solo hay que ponerlo una vez, es para grabar la primera vez la hora luego se puede borrar esta linea

    lcd.init();//Inicializamos el LCD
    lcd.backlight();//Encendemos la luz


    pinMode(10OUTPUT); //Canal1//
    pinMode(8OUTPUT); //Canal2// 
    pinMode(9OUTPUT); //Canal3// 
    pinMode(7OUTPUT); //Canal4//  

    lcd.noBlink(); 



    lcd.setCursor(00);  
    lcd.print(" ACUARIO MARINO "); 
    delay(1000); 
    lcd.setCursor(0,1); 
    lcd.print(" Cargando "); 
    delay(1000); 
    for (
    int i=0i<5i++) 
      { 
      
    lcd.print((char)46); //pone un punto 
      
    delay (500); 
      } 
      
    lcd.init();//Al inicializar el LCD tambien borramos la pantalla




    void loop () { 


    int tiempo

       
    lcd.init();//Al inicializar el LCD también borramos la pantalla
    lcd.noBlink(); 

    leehora();//función para leer la hora
    verhora();//Mostramos información en pantalla



    hora=hour;
    minuto=minute;

    tiempo=(hora*60)+minuto

    Luces (tiempo); 

    delay(60000);



    void Luces(int tiempo

       
     
    ///////////tiempos de progamacion////////// 

     
    int PotCanal1PotCanal2PotCanal3PotCanal4Porcent

     
    int IamaneceCanal1=720//12:00 

     
    int FamaneceCanal1=750//12:30 // 
      
     
    int IanocheceCanal1=1381//23:01// 
      
     
    int FanocheceCanal1=1410//23:30// 
      
     
    int IamaneceCanal2=751//12:31// 
      
     
    int FamaneceCanal2=780//13:00// 
      
     
    int IanocheceCanal21321//22:01// 

     
    int FanocheceCanal2=1380//23.00// 
      
     
    int IamaneceCanal3y4=781//13:01// 
      
     
    int FamaneceCanal3y4=840//14:00// 
      
     
    int IanocheceCanal3y4=1260//21:00// 
      
     
    int FanocheceCanal3y4=1320//22:00// 

     
    int MaxCanal1=250//Canal 1 
    int MaxCanal2=250;//Canal2 

    int MaxCanal3=250;//Canal3 **blanco total**
    int MaxCanal4=250;//Canal4 
      

    //Noche 

     
    if (tiempo FanocheceCanal1 || tiempo IamaneceCanal1 )  

      { 

       
    PotCanal1=1//Luz de luna (potencia de los led 1) 
       
    PotCanal2=0
       
    PotCanal3=0
       
    PotCanal4=0
       
    analogWrite(10PotCanal1); 
       
    analogWrite(8PotCanal2); 
       
    analogWrite(9PotCanal3); 
       
    analogWrite(7PotCanal4); 
         
      
         
    lcd.setCursor(0,0); 
         
    lcd.print("Luces"); 
         
    lcd.setCursor(0,1); 
         
    lcd.print("apagadas "); 
        
        

     } 

      

    //Amanecer Canal 1 

     
    if (tiempo >= IamaneceCanal1 && tiempo <= FamaneceCanal1)  

      { 

       
    PotCanal1=map(tiempo,IamaneceCanal1,FamaneceCanal1,1MaxCanal1); 
       
    PotCanal2=0
       
    PotCanal3=0
       
    PotCanal4=0
       
    Porcent=(PotCanal1*100)/ MaxCanal1
       
    analogWrite(10PotCanal1); 
       
    analogWrite(8PotCanal2); 
       
    analogWrite(9PotCanal3); 
       
    analogWrite(7PotCanal4); 
        
       
         
    lcd.setCursor(0,0); 
         
    lcd.print("Canal 1"); 
         
    lcd.setCursor(0,1); 
         
    lcd.print("Encendiendo "); 
         
    lcd.print(Porcent);  
         
    lcd.print("%"); 
     
        
        

      } 
       
    //Amanecer Canal 2 

     
    if (tiempo >= IamaneceCanal2 && tiempo <= FamaneceCanal2)  

      { 

       
       
    PotCanal1MaxCanal1
       
    PotCanal2=map(tiempo,IamaneceCanal2,FamaneceCanal2,1MaxCanal2); 
       
    PotCanal3=0
       
    PotCanal4=0
       
    Porcent=(PotCanal2*100)/ MaxCanal2
       
    analogWrite(10PotCanal1); 
       
    analogWrite(8PotCanal2); 
       
    analogWrite(9PotCanal3); 
       
    analogWrite(7PotCanal4); 
        

         
    lcd.setCursor(0,0); 
         
    lcd.print("Canal 2"); 
         
    lcd.setCursor(0,1); 
         
    lcd.print("Encendiendo "); 
         
    lcd.print(Porcent);  
         
    lcd.print("%"); 

        

      } 
       
      
    //Amanecer Canal 3 y 4 

     
    if (tiempo >= IamaneceCanal3y4 && tiempo <= FamaneceCanal3y4)  

      { 

       
    PotCanal1MaxCanal1
       
    PotCanal2MaxCanal2;    
       
    PotCanal3=map(tiempo,IamaneceCanal3y4,FamaneceCanal3y4,1MaxCanal3); 
       
    PotCanal4=map(tiempo,IamaneceCanal3y4,FamaneceCanal3y4,1MaxCanal4); 
       
       
    analogWrite(10PotCanal1); 
       
    analogWrite(8PotCanal2); 
       
    analogWrite(9PotCanal3); 
       
    analogWrite(7PotCanal4); 
       
       
    Porcent=(PotCanal3*100)/ MaxCanal3
        
       
         
    lcd.setCursor(0,0); 
         
    lcd.print("Canal 3/4"); 
         
    lcd.setCursor(0,1); 
         
    lcd.print("Encendiendo "); 
         
    lcd.print(Porcent);  
         
    lcd.print("%"); 

        

      } 
       
      
    //Dia 
       
      
    if (tiempo FamaneceCanal3y4 && tiempo IanocheceCanal3y4
       
      { 
        
    PotCanal1MaxCanal1
        
    PotCanal2MaxCanal2
        
    PotCanal3MaxCanal3
        
    PotCanal4MaxCanal4
        
    analogWrite(10PotCanal1); 
        
    analogWrite(8PotCanal2); 
        
    analogWrite(9PotCanal3); 
        
    analogWrite(7PotCanal4); 
        
    lcd.setCursor(15,1); 
                          
         
         
    lcd.setCursor(0,0); 
         
    lcd.print("Luces"); 
         
    lcd.setCursor(0,1); 
         
    lcd.print("encendidas        "); 

         
      } 
      

    //Anochecer Canal 3 y 4 

     
    if (tiempo >= IanocheceCanal3y4 && tiempo <= FanocheceCanal3y4

      { 

       
    PotCanal1MaxCanal1
       
    PotCanal2MaxCanal2

       
    PotCanal3=map(tiempo,IanocheceCanal3y4,FanocheceCanal3y4MaxCanal3,1); 
       
    PotCanal4=map(tiempo,IanocheceCanal3y4,FanocheceCanal3y4MaxCanal4,1); 
       
       
    Porcent=(PotCanal3*100)/ MaxCanal3

       
    analogWrite(10PotCanal1); 
       
    analogWrite(8PotCanal2); 
       
    analogWrite(9PotCanal3); 
       
    analogWrite(7PotCanal4); 
        
         
    lcd.setCursor(0,0); 
         
    lcd.print("Canal 3/4"); 
         
    lcd.setCursor(0,1); 
         
    lcd.print("Apagando "); 
         
    lcd.print(Porcent);  
         
    lcd.print("%"); 

        

      } 
       
      
    //Anochecer Canal 2 

     
    if (tiempo >= IanocheceCanal2 && tiempo <= FanocheceCanal2

      { 

        
    PotCanal1MaxCanal1
        
    PotCanal2=map(tiempo,IanocheceCanal2,FanocheceCanal2MaxCanal2,1); 
        
        
    PotCanal3=0
        
    PotCanal4=0
        
    Porcent=(PotCanal2*100)/ MaxCanal2
      
        
    analogWrite(10PotCanal1); 
        
    analogWrite(8PotCanal2); 
        
    analogWrite(9PotCanal3); 
        
    analogWrite(7PotCanal4);  
        
         
    lcd.setCursor(0,0); 
         
    lcd.print("Canal 2"); 
         
    lcd.setCursor(0,1); 
         
    lcd.print("Apagando "); 
         
    lcd.print(Porcent);  
         
    lcd.print("%"); 

        

      } 
       
        
    //Anochecer Canal 1 

     
    if (tiempo >= IanocheceCanal1 && tiempo <= FanocheceCanal1

      { 

        
    PotCanal1=map(tiempo,IanocheceCanal1,FanocheceCanal1MaxCanal1,1); 
        
    PotCanal2=0
        
    PotCanal3=0
        
    PotCanal4=0
        
    Porcent=(PotCanal1*100)/ MaxCanal1

        
    analogWrite(10PotCanal1); 
        
    analogWrite(8PotCanal2); 
        
    analogWrite(9PotCanal3); 
        
    analogWrite(7PotCanal4); 
        
        
    lcd.setCursor(0,0); 
        
    lcd.print("Canal 1"); 
        
    lcd.setCursor(0,1); 
        
    lcd.print("Apagando "); 
        
    lcd.print(Porcent);  
        
    lcd.print("%"); 

        

      } 

     
    //Control 

     
    if(PotCanal1 0)  
      { 
       
    PotCanal1=0
      } 
       
       if(
    PotCanal2 0)  
      { 
        
    PotCanal2=0
      } 
       
       if(
    PotCanal3 0)  
      { 
       
    PotCanal3=0
      } 
       
      if(
    PotCanal4 0)  
      { 
       
    PotCanal4=0
      } 

      

    if(
    PotCanal1 MaxCanal1)  
      { 
       
    PotCanal1MaxCanal1
      } 
       
      if(
    PotCanal2 MaxCanal2)  
      { 
       
    PotCanal2MaxCanal2
      } 
       
      if(
    PotCanal3 MaxCanal3
      { 
       
    PotCanal3MaxCanal3
      } 
       
      if(
    PotCanal4 MaxCanal4)  
      { 
       
    PotCanal4MaxCanal4
      } 
         
    }  


    void leehora()
    {
         
    getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);//Almacenamos los valores actualizados en las variables
    }

    void verhora()
    {
      
    lcd.setCursor(11,0);
      if (
    hour 10){lcd.print("0");}
      
    lcd.print(hourDEC);
      
    lcd.print(":");  
      if (
    minute 10){lcd.print("0");}
      
    lcd.print(minuteDEC);
      
    }
     
    Última edición: 7 Nov 2014
  16. nito_dj

    nito_dj

    Mensajes:
    1.798
    Registrado:
    28 Sep 2008
    Ubicación:
    España
    Aclarar, que tengo los pines VCC, GND, SDA y SCL tanto de la pantalla como del reloj conectado a los mismos pines del arduino...esto es asi no? ambos son I2C y comparten los mismos pines
     
  17. jmcadsl

    jmcadsl Miembro Honorífico

    Mensajes:
    852
    Registrado:
    17 Ene 2010
    Ubicación:
    España
    Si en el.otro controlador te funciona ya sin problemas es evidente que no es un problema de código.
    Releyendo la información que nos das yo te diría que el problema puede ser debido o bien a un mal contacto en algun conector/cable (que tipo de cable usas y que longitud )
    O bien en que algo te esté haciendo masa...que tipo de caja usas? Se tocan los componentes entre si?
     
  18. nito_dj

    nito_dj

    Mensajes:
    1.798
    Registrado:
    28 Sep 2008
    Ubicación:
    España
    Actualizacion para el que mi post le pueda servir de ayuda.
    Con este código he conseguido que no se quede bloqueado, el problema que tengo hasta ahora es que hago lecturas del reloj cada minuto y hay minutos que hace lecturas incorrectas (o bien me dice que son las 45 hors 30 minutos como que son las 26 horas como como que son las 12 cuando en realidad son las 15) y al minuto siguiente vuelve a leer correctamente.
    Se me ocurren varias cosas, o bien hacer una sola lectura al día y el resto ir sumando minutos o meterle alguna comprobacion del tipo que si la hora leida no es un minuto mas tarde de la anterior, vuelva a leer... ¿Alguna recomendación?

    Aqui os paso el codigo:

    PHP:
    #include <Wire.h>   // Incluye la librería Wire  

    #include "RTClib.h" // Incluye la librería RTClib  

    #include <OneWire.h>  

    #include <pitches.h> //Libreria para buzzer  

    #include <MemoryFree.h>  

    #include <LiquidCrystal_I2C.h>  
          
    LiquidCrystal_I2C lcd(0x2721045673POSITIVE); 
    #define DS1307_I2C_ADDRESS 0x68//RELOJ Direccion 



    //RELOJ 
    byte secondminutehourdayOfWeekdayOfMonthmonthyear,ajustereloj=0
    int hora
    int minuto

    long offset
    byte decToBcd(byte val

      return ( (
    val/10*16) + (val%10) ); 

    // Convert binary coded decimal to normal decimal numbers 
    byte bcdToDec(byte val

      return ( (
    val/16*10) + (val%16) ); 

    void setDateDs1307(byte second,        // 0-59 
                       
    byte minute,        // 0-59 
                       
    byte hour,          // 1-23 
                       
    byte dayOfWeek,     // 1-7 
                       
    byte dayOfMonth,    // 1-28/29/30/31 
                       
    byte month,         // 1-12 
                       
    byte year)          // 0-99 

       
    Wire.beginTransmission(DS1307_I2C_ADDRESS); 
       
    Wire.write(0); 
       
    Wire.write(decToBcd(second));    // 0 to bit 7 starts the clock 
       
    Wire.write(decToBcd(minute)); 
       
    Wire.write(decToBcd(hour));      // If you want 12 hour am/pm you need to set 
                                       // bit 6 (also need to change readDateDs1307) 
       
    Wire.write(decToBcd(dayOfWeek)); 
       
    Wire.write(decToBcd(dayOfMonth)); 
       
    Wire.write(decToBcd(month)); 
       
    Wire.write(decToBcd(year)); 
       
    Wire.endTransmission(); 

    void getDateDs1307(byte *second
              
    byte *minute
              
    byte *hour
              
    byte *dayOfWeek
              
    byte *dayOfMonth
              
    byte *month
              
    byte *year

      
    // Reset the register pointer 
      
    Wire.beginTransmission(DS1307_I2C_ADDRESS); 
      
    Wire.write(0); 
      
    Wire.endTransmission(); 

      
    Wire.requestFrom(DS1307_I2C_ADDRESS7); 

      
    // A few of these need masks because certain bits are control bits 
      
    *second     bcdToDec(Wire.read() & 0x7f); 
      *
    minute     bcdToDec(Wire.read()); 
      *
    hour       bcdToDec(Wire.read() & 0x3f);  // Need to change this if 12 hour am/pm 
      
    *dayOfWeek  bcdToDec(Wire.read()); 
      *
    dayOfMonth bcdToDec(Wire.read()); 
      *
    month      bcdToDec(Wire.read()); 
      *
    year       bcdToDec(Wire.read()); 




       

    void setup () {  
        
       

    Serial.begin(9600); // Establece la velocidad de datos del puerto serie  

    Wire.begin(); // Establece la velocidad de datos del bus I2C  

    //setDateDs1307(0, 47, 16,5,7,11,2014); //Esto solo hay que ponerlo una vez, es para grabar la primera vez la hora luego se puede borrar esta linea 

    lcd.begin(16,2);
    lcd.clear();
    lcd.backlight();//Encendemos la luz 


    pinMode(10OUTPUT); //Canal1// 
    pinMode(8OUTPUT); //Canal2//  
    pinMode(9OUTPUT); //Canal3//  
    pinMode(7OUTPUT); //Canal4//   

    lcd.noBlink();  



    lcd.setCursor(00);   
    lcd.print(" ACUARIO MARINO ");  
    delay(1000);  
    lcd.setCursor(0,1);  
    lcd.print(" Cargando ");  
    delay(1000);  
    for (
    int i=0i<5i++)  
      {  
      
    lcd.print((char)46); //pone un punto  
      
    delay (500);  
      }  
    lcd.begin(16,2);

    }  


    void loop () {  


    int tiempo;  

    lcd.clear();
    lcd.noBlink();  

    leehora();//función para leer la hora 
    verhora();//Mostramos información en pantalla 



    hora=hour
    minuto=minute

    tiempo=(hora*60)+minuto;  

    Luces (tiempo);  

    delay(60000); 
    }  


    void Luces(int tiempo)  
    {  
        
     
    ///////////tiempos de progamacion//////////  

     
    int PotCanal1PotCanal2PotCanal3PotCanal4Porcent;  

     
    int IamaneceCanal1=720//12:00  

     
    int FamaneceCanal1=750//12:30 //  
       
     
    int IanocheceCanal1=1381//23:01//  
       
     
    int FanocheceCanal1=1410//23:30//  
       
     
    int IamaneceCanal2=751//12:31//  
       
     
    int FamaneceCanal2=780//13:00//  
       
     
    int IanocheceCanal21321//22:01//  

     
    int FanocheceCanal2=1380//23.00//  
       
     
    int IamaneceCanal3y4=781//13:01//  
       
     
    int FamaneceCanal3y4=840//14:00//  
       
     
    int IanocheceCanal3y4=1260//21:00//  
       
     
    int FanocheceCanal3y4=1320//22:00//  

      
    int MaxCanal1=250//Canal 1  
    int MaxCanal2=250;//Canal2  

    int MaxCanal3=250;//Canal3 **blanco total** 
    int MaxCanal4=250;//Canal4  
       

    //Noche  

     
    if (tiempo FanocheceCanal1 || tiempo IamaneceCanal1 )   

      {  

       
    PotCanal1=1//Luz de luna (potencia de los led 1)  
       
    PotCanal2=0;  
       
    PotCanal3=0;  
       
    PotCanal4=0;  
       
    analogWrite(10PotCanal1);  
       
    analogWrite(8PotCanal2);  
       
    analogWrite(9PotCanal3);  
       
    analogWrite(7PotCanal4);  
          
       
         
    lcd.setCursor(0,0);  
         
    lcd.print("Luces");  
         
    lcd.setCursor(0,1);  
         
    lcd.print("apagadas ");  
         
         

     }  

       

    //Amanecer Canal 1  

     
    if (tiempo >= IamaneceCanal1 && tiempo <= FamaneceCanal1)   

      {  

       
    PotCanal1=map(tiempo,IamaneceCanal1,FamaneceCanal1,1MaxCanal1);  
       
    PotCanal2=0;  
       
    PotCanal3=0;  
       
    PotCanal4=0;  
       
    Porcent=(PotCanal1*100)/ MaxCanal1;  
       
    analogWrite(10PotCanal1);  
       
    analogWrite(8PotCanal2);  
       
    analogWrite(9PotCanal3);  
       
    analogWrite(7PotCanal4);  
         
        
         
    lcd.setCursor(0,0);  
         
    lcd.print("Canal 1");  
         
    lcd.setCursor(0,1);  
         
    lcd.print("Encendiendo ");  
         
    lcd.print(Porcent);   
         
    lcd.print("%");  
      
         
         

      }  
        
    //Amanecer Canal 2  

     
    if (tiempo >= IamaneceCanal2 && tiempo <= FamaneceCanal2)   

      {  

        
       
    PotCanal1MaxCanal1;  
       
    PotCanal2=map(tiempo,IamaneceCanal2,FamaneceCanal2,1MaxCanal2);  
       
    PotCanal3=0;  
       
    PotCanal4=0;  
       
    Porcent=(PotCanal2*100)/ MaxCanal2;  
       
    analogWrite(10PotCanal1);  
       
    analogWrite(8PotCanal2);  
       
    analogWrite(9PotCanal3);  
       
    analogWrite(7PotCanal4);  
         

         
    lcd.setCursor(0,0);  
         
    lcd.print("Canal 2");  
         
    lcd.setCursor(0,1);  
         
    lcd.print("Encendiendo ");  
         
    lcd.print(Porcent);   
         
    lcd.print("%");  

         

      }  
        
      
    //Amanecer Canal 3 y 4  

     
    if (tiempo >= IamaneceCanal3y4 && tiempo <= FamaneceCanal3y4)   

      {  

       
    PotCanal1MaxCanal1;  
       
    PotCanal2MaxCanal2;     
       
    PotCanal3=map(tiempo,IamaneceCanal3y4,FamaneceCanal3y4,1MaxCanal3);  
       
    PotCanal4=map(tiempo,IamaneceCanal3y4,FamaneceCanal3y4,1MaxCanal4);  
        
       
    analogWrite(10PotCanal1);  
       
    analogWrite(8PotCanal2);  
       
    analogWrite(9PotCanal3);  
       
    analogWrite(7PotCanal4);  
        
       
    Porcent=(PotCanal3*100)/ MaxCanal3;  
         
        
         
    lcd.setCursor(0,0);  
         
    lcd.print("Canal 3/4");  
         
    lcd.setCursor(0,1);  
         
    lcd.print("Encendiendo ");  
         
    lcd.print(Porcent);   
         
    lcd.print("%");  

         

      }  
        
      
    //Dia  
        
      
    if (tiempo FamaneceCanal3y4 && tiempo IanocheceCanal3y4)  
        
      {  
        
    PotCanal1MaxCanal1;  
        
    PotCanal2MaxCanal2;  
        
    PotCanal3MaxCanal3;  
        
    PotCanal4MaxCanal4;  
        
    analogWrite(10PotCanal1);  
        
    analogWrite(8PotCanal2);  
        
    analogWrite(9PotCanal3);  
        
    analogWrite(7PotCanal4);  
        
    lcd.setCursor(15,1);  
                           
          
         
    lcd.setCursor(0,0);  
         
    lcd.print("Luces");  
         
    lcd.setCursor(0,1);  
         
    lcd.print("encendidas        ");  

          
      }  
       

    //Anochecer Canal 3 y 4  

     
    if (tiempo >= IanocheceCanal3y4 && tiempo <= FanocheceCanal3y4)  

      {  

       
    PotCanal1MaxCanal1;  
       
    PotCanal2MaxCanal2;  

       
    PotCanal3=map(tiempo,IanocheceCanal3y4,FanocheceCanal3y4MaxCanal3,1);  
       
    PotCanal4=map(tiempo,IanocheceCanal3y4,FanocheceCanal3y4MaxCanal4,1);  
        
       
    Porcent=(PotCanal3*100)/ MaxCanal3;  

       
    analogWrite(10PotCanal1);  
       
    analogWrite(8PotCanal2);  
       
    analogWrite(9PotCanal3);  
       
    analogWrite(7PotCanal4);  
         
         
    lcd.setCursor(0,0);  
         
    lcd.print("Canal 3/4");  
         
    lcd.setCursor(0,1);  
         
    lcd.print("Apagando ");  
         
    lcd.print(Porcent);   
         
    lcd.print("%");  

         

      }  
        
      
    //Anochecer Canal 2  

     
    if (tiempo >= IanocheceCanal2 && tiempo <= FanocheceCanal2)  

      {  

        
    PotCanal1MaxCanal1;  
        
    PotCanal2=map(tiempo,IanocheceCanal2,FanocheceCanal2MaxCanal2,1);  
         
        
    PotCanal3=0;  
        
    PotCanal4=0;  
        
    Porcent=(PotCanal2*100)/ MaxCanal2;  
       
        
    analogWrite(10PotCanal1);  
        
    analogWrite(8PotCanal2);  
        
    analogWrite(9PotCanal3);  
        
    analogWrite(7PotCanal4);   
         
         
    lcd.setCursor(0,0);  
         
    lcd.print("Canal 2");  
         
    lcd.setCursor(0,1);  
         
    lcd.print("Apagando ");  
         
    lcd.print(Porcent);   
         
    lcd.print("%");  

         

      }  
        
        
    //Anochecer Canal 1  

     
    if (tiempo >= IanocheceCanal1 && tiempo <= FanocheceCanal1)  

      {  

        
    PotCanal1=map(tiempo,IanocheceCanal1,FanocheceCanal1MaxCanal1,1);  
        
    PotCanal2=0;  
        
    PotCanal3=0;  
        
    PotCanal4=0;  
        
    Porcent=(PotCanal1*100)/ MaxCanal1;  

        
    analogWrite(10PotCanal1);  
        
    analogWrite(8PotCanal2);  
        
    analogWrite(9PotCanal3);  
        
    analogWrite(7PotCanal4);  
         
        
    lcd.setCursor(0,0);  
        
    lcd.print("Canal 1");  
        
    lcd.setCursor(0,1);  
        
    lcd.print("Apagando ");  
        
    lcd.print(Porcent);   
        
    lcd.print("%");  

         

      }  

     
    //Control  

     
    if(PotCanal1 0)   
      {  
       
    PotCanal1=0;  
      }  
        
       if(
    PotCanal2 0)   
      {  
        
    PotCanal2=0;  
      }  
        
       if(
    PotCanal3 0)   
      {  
       
    PotCanal3=0;  
      }  
        
      if(
    PotCanal4 0)   
      {  
       
    PotCanal4=0;  
      }  

       

    if(
    PotCanal1 MaxCanal1)   
      {  
       
    PotCanal1MaxCanal1;  
      }  
        
      if(
    PotCanal2 MaxCanal2)   
      {  
       
    PotCanal2MaxCanal2;  
      }  
        
      if(
    PotCanal3 MaxCanal3)  
      {  
       
    PotCanal3MaxCanal3;  
      }  
        
      if(
    PotCanal4 MaxCanal4)   
      {  
       
    PotCanal4MaxCanal4;  
      }  
          
    }   


    void leehora() 

         
    getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);//Almacenamos los valores actualizados en las variables 


    void verhora() 

      
    lcd.setCursor(11,0); 
      if (
    hour 10){lcd.print("0");} 
      
    lcd.print(hourDEC); 
      
    lcd.print(":");   
      if (
    minute 10){lcd.print("0");} 
      
    lcd.print(minuteDEC); 
       
    }  
     
  19. alsimu

    alsimu

    Mensajes:
    125
    Registrado:
    27 Jun 2009
    Ubicación:
    España
    Hola.

    Mi respuesta llega suuuuper tarde :yb62[1]:, he tenido una larga temporada en la que he estado desconectado por temas que no vienen a cuento... , supongo que ya lo habrás solucionado, pero por si lo has dejado aparcado o has matado la mosca con un cañonazo, te digo:

    Pienso lo mismo que jmcadsl. Me inclino por que es un fallo en el bus i2c, lo que quiere decir que o tienes un mal contacto en algún terminal o alguna interferencia importante en el cable o algo por el estilo. Por que las resistencias pullup están puestas ¿no? (creo que el reloj ese lleva unas que servirían para todo el bus) es que en el diagrama que has puesto no aparecen.

    Saludos.