Ayuda con mi codigo por favor

28 Sep 2008
2.216
España
Provincia
Rivas Vaciamadrid (Madrid)
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(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

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(7, OUTPUT); //Azules//
pinMode(8, OUTPUT); //Blancos//
pinMode(9, OUTPUT); //Mixtos//
pinMode(10, OUTPUT); //Mixtos2//

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

lcd.setCursor(0, 0); 
lcd.print(" ACUARIO MARINO ");
delay(1000);
lcd.setCursor(0,1);
lcd.print(" Cargando ");
delay(1000);
for (int i=0; i<5; i++)
  {
  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(11, 0);
if (hora < 10) 
  lcd.print("0"); 
lcd.print(hora, DEC);
lcd.print(":"); 
if (minuto < 10) 
  lcd.print("0"); 
lcd.print(minuto, DEC);


tiempo=(hora*60)+minuto;

Luces (tiempo);

}


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

 int PotAzul, PotBlanco, PotMix, PotMix2, Porcent;

 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 IanocheceBlancos= 1321; //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(10, PotAzul);
   analogWrite(8, PotBlanco);
   analogWrite(9, PotMix);
   analogWrite(7, PotMix2);
    
   for (int i=0; i<30; i++)
   { 
     lcd.setCursor(0,0);
     lcd.print("Luces");
     lcd.setCursor(0,1);
     lcd.print("apagadas ");
     delay(979);
   } 
   for (int i=0; i<30; i++)
   {
     lcd.setCursor(0, 0); 
     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(10, PotAzul);
   analogWrite(8, PotBlanco);
   analogWrite(9, PotMix);
   analogWrite(7, PotMix2);
   
   for (int i=0; i<30; i++)
   { 
     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=0; i<30; i++)
   {
     lcd.setCursor(0, 0); 
     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(10, PotAzul);
   analogWrite(8, PotBlanco);
   analogWrite(9, PotMix);
   analogWrite(7, PotMix2);
   
   for (int i=0; i<30; i++)
   { 
     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=0; i<30; i++)
   {
     lcd.setCursor(0, 0); 
     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(10, PotAzul);
   analogWrite(8, PotBlanco);
   analogWrite(9, PotMix);
   analogWrite(7, PotMix2);
  
   Porcent=(PotMix*100)/MaxBlancos;
   
   for (int i=0; i<30; i++)
   {
     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=0; i<30; i++)
   {
     lcd.setCursor(0, 0); 
     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(10, PotAzul);
    analogWrite(8, PotBlanco);
    analogWrite(9, PotMix);
    analogWrite(7, PotMix2);
    lcd.setCursor(15,1);
                     
    
    for (int i=0; i<30; i++)
   {
     lcd.setCursor(0,0);
     lcd.print("Luces");
     lcd.setCursor(0,1);
     lcd.print("encendidas        ");
     delay(979);
   }
    for (int i=0; i<30; i++)
   {
     lcd.setCursor(0, 0); 
     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(10, PotAzul);
   analogWrite(8, PotBlanco);
   analogWrite(9, PotMix);
   analogWrite(7, PotMix2);
   
   for (int i=0; i<30; i++)
   {
     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=0; i<30; i++)
   {
     lcd.setCursor(0, 0); 
     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(10, PotAzul);
    analogWrite(8, PotBlanco);
    analogWrite(9, PotMix);
    analogWrite(7, PotMix2); 
   
   for (int i=0; i<30; i++)
   {
     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=0; i<30; i++)
   {
     lcd.setCursor(0, 0); 
     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(10, PotAzul);
    analogWrite(8, PotBlanco);
    analogWrite(9, PotMix);
    analogWrite(7, PotMix2);
   
  for (int i=0; i<30; i++)
  {
    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=0; i<30; i++)
  {
    lcd.setCursor(0, 0); 
    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==5 && minuto==0) 
 {
  x=0;
 }
 
}


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

Gracias!!
 
10 Ago 2009
472
España
Provincia
Madrid (Leganés)
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
 
28 Sep 2008
2.216
España
Provincia
Rivas Vaciamadrid (Madrid)
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

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
 
20 Abr 2008
86
España
Provincia
Madrid( Rivas )
Tengo un DS1307 y lo tengo conectado asi:

Ver el archivos adjunto 77153

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


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
 
6 Ago 2012
7.576
Sevilla
Provincia
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.
 
28 Sep 2008
2.216
España
Provincia
Rivas Vaciamadrid (Madrid)
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

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?
 
28 Sep 2008
2.216
España
Provincia
Rivas Vaciamadrid (Madrid)
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.

Los puse y el problema seguia asi que los quite...

La verdad que no se que puede ser...
 
20 Abr 2008
86
España
Provincia
Madrid( Rivas )
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?

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.
 

jmcadsl

Miembro Honorífico
17 Ene 2010
1.023
España
Provincia
Madrid
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
 
28 Sep 2008
2.216
España
Provincia
Rivas Vaciamadrid (Madrid)
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

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...
 
20 Abr 2008
86
España
Provincia
Madrid( Rivas )
Perdona que insista .

Pero con 6v no alimentas bien al arduino .

El regulador necesita al menso 7v para poder funcionar en condiciones.
 
28 Sep 2008
2.216
España
Provincia
Rivas Vaciamadrid (Madrid)
Perdona que insista .

Pero con 6v no alimentas bien al arduino .

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

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...
 
20 Abr 2008
86
España
Provincia
Madrid( Rivas )
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...
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
 
28 Sep 2008
2.216
España
Provincia
Rivas Vaciamadrid (Madrid)
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

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 second, minute, hour, dayOfWeek, dayOfMonth, month, year,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_ADDRESS, 7);

  // 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, 0, 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.init();//Inicializamos el LCD
lcd.backlight();//Encendemos la luz


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

lcd.noBlink(); 



lcd.setCursor(0, 0);  
lcd.print(" ACUARIO MARINO "); 
delay(1000); 
lcd.setCursor(0,1); 
lcd.print(" Cargando "); 
delay(1000); 
for (int i=0; i<5; i++) 
  { 
  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 PotCanal1, PotCanal2, PotCanal3, PotCanal4, Porcent; 

 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 IanocheceCanal2= 1321; //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(10, PotCanal1); 
   analogWrite(8, PotCanal2); 
   analogWrite(9, PotCanal3); 
   analogWrite(7, PotCanal4); 
     
  
     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,1, MaxCanal1); 
   PotCanal2=0; 
   PotCanal3=0; 
   PotCanal4=0; 
   Porcent=(PotCanal1*100)/ MaxCanal1; 
   analogWrite(10, PotCanal1); 
   analogWrite(8, PotCanal2); 
   analogWrite(9, PotCanal3); 
   analogWrite(7, PotCanal4); 
    
   
     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)  

  { 

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

     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)  

  { 

   PotCanal1= MaxCanal1; 
   PotCanal2= MaxCanal2;    
   PotCanal3=map(tiempo,IamaneceCanal3y4,FamaneceCanal3y4,1, MaxCanal3); 
   PotCanal4=map(tiempo,IamaneceCanal3y4,FamaneceCanal3y4,1, MaxCanal4); 
   
   analogWrite(10, PotCanal1); 
   analogWrite(8, PotCanal2); 
   analogWrite(9, PotCanal3); 
   analogWrite(7, PotCanal4); 
   
   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) 
   
  { 
    PotCanal1= MaxCanal1; 
    PotCanal2= MaxCanal2; 
    PotCanal3= MaxCanal3; 
    PotCanal4= MaxCanal4; 
    analogWrite(10, PotCanal1); 
    analogWrite(8, PotCanal2); 
    analogWrite(9, PotCanal3); 
    analogWrite(7, PotCanal4); 
    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) 

  { 

   PotCanal1= MaxCanal1; 
   PotCanal2= MaxCanal2; 

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

   analogWrite(10, PotCanal1); 
   analogWrite(8, PotCanal2); 
   analogWrite(9, PotCanal3); 
   analogWrite(7, PotCanal4); 
    
     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) 

  { 

    PotCanal1= MaxCanal1; 
    PotCanal2=map(tiempo,IanocheceCanal2,FanocheceCanal2, MaxCanal2,1); 
    
    PotCanal3=0; 
    PotCanal4=0; 
    Porcent=(PotCanal2*100)/ MaxCanal2; 
  
    analogWrite(10, PotCanal1); 
    analogWrite(8, PotCanal2); 
    analogWrite(9, PotCanal3); 
    analogWrite(7, PotCanal4);  
    
     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,FanocheceCanal1, MaxCanal1,1); 
    PotCanal2=0; 
    PotCanal3=0; 
    PotCanal4=0; 
    Porcent=(PotCanal1*100)/ MaxCanal1; 

    analogWrite(10, PotCanal1); 
    analogWrite(8, PotCanal2); 
    analogWrite(9, PotCanal3); 
    analogWrite(7, PotCanal4); 
    
    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)  
  { 
   PotCanal1= MaxCanal1; 
  } 
   
  if(PotCanal2 > MaxCanal2)  
  { 
   PotCanal2= MaxCanal2; 
  } 
   
  if(PotCanal3 > MaxCanal3) 
  { 
   PotCanal3= MaxCanal3; 
  } 
   
  if(PotCanal4 > MaxCanal4)  
  { 
   PotCanal4= MaxCanal4; 
  } 
     
}  


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(hour, DEC);
  lcd.print(":");  
  if (minute < 10){lcd.print("0");}
  lcd.print(minute, DEC);
  
}
 
Última edición:
28 Sep 2008
2.216
España
Provincia
Rivas Vaciamadrid (Madrid)
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
 

jmcadsl

Miembro Honorífico
17 Ene 2010
1.023
España
Provincia
Madrid
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?
 
28 Sep 2008
2.216
España
Provincia
Rivas Vaciamadrid (Madrid)
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(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); 
#define DS1307_I2C_ADDRESS 0x68//RELOJ Direccion 



//RELOJ 
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year,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_ADDRESS, 7); 

  // 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(10, OUTPUT); //Canal1// 
pinMode(8, OUTPUT); //Canal2//  
pinMode(9, OUTPUT); //Canal3//  
pinMode(7, OUTPUT); //Canal4//   

lcd.noBlink();  



lcd.setCursor(0, 0);   
lcd.print(" ACUARIO MARINO ");  
delay(1000);  
lcd.setCursor(0,1);  
lcd.print(" Cargando ");  
delay(1000);  
for (int i=0; i<5; i++)  
  {  
  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 PotCanal1, PotCanal2, PotCanal3, PotCanal4, Porcent;  

 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 IanocheceCanal2= 1321; //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(10, PotCanal1);  
   analogWrite(8, PotCanal2);  
   analogWrite(9, PotCanal3);  
   analogWrite(7, PotCanal4);  
      
   
     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,1, MaxCanal1);  
   PotCanal2=0;  
   PotCanal3=0;  
   PotCanal4=0;  
   Porcent=(PotCanal1*100)/ MaxCanal1;  
   analogWrite(10, PotCanal1);  
   analogWrite(8, PotCanal2);  
   analogWrite(9, PotCanal3);  
   analogWrite(7, PotCanal4);  
     
    
     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)   

  {  

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

     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)   

  {  

   PotCanal1= MaxCanal1;  
   PotCanal2= MaxCanal2;     
   PotCanal3=map(tiempo,IamaneceCanal3y4,FamaneceCanal3y4,1, MaxCanal3);  
   PotCanal4=map(tiempo,IamaneceCanal3y4,FamaneceCanal3y4,1, MaxCanal4);  
    
   analogWrite(10, PotCanal1);  
   analogWrite(8, PotCanal2);  
   analogWrite(9, PotCanal3);  
   analogWrite(7, PotCanal4);  
    
   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)  
    
  {  
    PotCanal1= MaxCanal1;  
    PotCanal2= MaxCanal2;  
    PotCanal3= MaxCanal3;  
    PotCanal4= MaxCanal4;  
    analogWrite(10, PotCanal1);  
    analogWrite(8, PotCanal2);  
    analogWrite(9, PotCanal3);  
    analogWrite(7, PotCanal4);  
    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)  

  {  

   PotCanal1= MaxCanal1;  
   PotCanal2= MaxCanal2;  

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

   analogWrite(10, PotCanal1);  
   analogWrite(8, PotCanal2);  
   analogWrite(9, PotCanal3);  
   analogWrite(7, PotCanal4);  
     
     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)  

  {  

    PotCanal1= MaxCanal1;  
    PotCanal2=map(tiempo,IanocheceCanal2,FanocheceCanal2, MaxCanal2,1);  
     
    PotCanal3=0;  
    PotCanal4=0;  
    Porcent=(PotCanal2*100)/ MaxCanal2;  
   
    analogWrite(10, PotCanal1);  
    analogWrite(8, PotCanal2);  
    analogWrite(9, PotCanal3);  
    analogWrite(7, PotCanal4);   
     
     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,FanocheceCanal1, MaxCanal1,1);  
    PotCanal2=0;  
    PotCanal3=0;  
    PotCanal4=0;  
    Porcent=(PotCanal1*100)/ MaxCanal1;  

    analogWrite(10, PotCanal1);  
    analogWrite(8, PotCanal2);  
    analogWrite(9, PotCanal3);  
    analogWrite(7, PotCanal4);  
     
    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)   
  {  
   PotCanal1= MaxCanal1;  
  }  
    
  if(PotCanal2 > MaxCanal2)   
  {  
   PotCanal2= MaxCanal2;  
  }  
    
  if(PotCanal3 > MaxCanal3)  
  {  
   PotCanal3= MaxCanal3;  
  }  
    
  if(PotCanal4 > MaxCanal4)   
  {  
   PotCanal4= MaxCanal4;  
  }  
      
}   


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(hour, DEC); 
  lcd.print(":");   
  if (minute < 10){lcd.print("0");} 
  lcd.print(minute, DEC); 
   
}
 
27 Jun 2009
127
España
Provincia
Alicante
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.
 
Arriba