¿Son los mismos modulos de reloj?

16 Sep 2011
83
Valencia
Provincia
Valencia
Cuando termine esto, prometo que hare un manual tipo: Arduino para dumies (que yo lo soy) por que esto es un mundo muy grande, asi el que quiera seguir los pasos que yo he seguido con vuestra ayuda, no tendran que ir preguntando como yo lo hago. En serio, sera de gran ayuda por que como yo supongo que habra miles que no cogeran al toro por los cuernos por que un paso sencillo se convierte en uno dificilisimo.

Bueno al toro, me he encontrado con otro problema, a la hora de conectar la pantalla lcd he visto varios problemas:

Esta es mi pantalla LCD:

Y ahora los problemillas:

1º La pantalla tiene un "acople" que segun el que me la vendio eso disminuye (a 4) los cables para conexionarlos :S, esos 4 cables son VCC (5V), GCD,SDA y SCL. Esos 4 cables los he conectado a una regleta que he hecho para tener mas 5V, el GND a su sitio y aqui viene el problema, el SDA y SCL los he conectado en los PINs correspondientes en el apartado de COMUNNICATION, pero AHI tenia los del modulo del reloj. Asi que he cogido y he metido los del reloj en el apartado de ANALOG IN en los PINs A4 y A5. No se si estara bien.

https://imageshack.us/photo/my-images/856/x6n9.jpg/
https://imageshack.us/photo/my-images/96/6akq.jpg/
https://imageshack.us/photo/my-images/266/x3ri.jpg/
https://imageshack.us/photo/my-images/832/zxm7.jpg/
https://imageshack.us/photo/my-images/708/q8x8.jpg/



2º Pongo los ejemplos de Hello World en el programa y nada de nada.

¿Que hago?

Dios mio que caos jejejejeje


Un saludo!!
 
21 Oct 2011
88
Benifaio
Provincia
Valencia
Para las conexiones de SCA y SCL haz una regleta tambien xd. Busca un post que hice sobre dimeo de leds y veras el codigo que utilizo, y asegurate de tener las librerias puestas del lcd

Enviat des del meu SK17i
 
16 Sep 2011
83
Valencia
Provincia
Valencia
Ya he conseguido que aparezca el ejemplo de Hello world, lo he cambiado y sale lo que pongo ahi, pero estoy volviendome loco para que salga la hora y la fecha. Ahora seguire trasteando a ver.


Un saludo!
 
21 Oct 2011
88
Benifaio
Provincia
Valencia
En el enlace que té puse tienes unos ejemplos de como sacar la hora en el lcd, miratelo bien.

Enviat des del meu SK17i
 
16 Sep 2011
83
Valencia
Provincia
Valencia
¿En que enlace? En el que dices tuyo o en el que me pusiste al principio. La verdad es que estoy compilando barbaridad de codigos y nada. Se muestra todo bien en pantalla, nombres, numeros, chorradas, etc pero la hora y la fecha...ni patras.


Un saludo!!!
 
16 Sep 2011
83
Valencia
Provincia
Valencia
Vale muchas gracias Goldenpas. De momento estaba soldando sensores y demas cosas, y me iba a poner con los botones que, que se me antoja conplicado tambien xD

Un saludo!!!
 
23 May 2006
183
España
Provincia
Barcelona
primero sigue los pasos de este enlace que ya tenias en el post
https://www.tuelectronica.es/tutoriales/arduino/reloj-rtc-i2c-con-arduino.html
despues elimina de la libreria la carpeta RTClib y la sustituyes por DS1307 que es la del reloj, asi es como me guarda a mi la hora actual, cargas este codigo y te tiene que mostrar hora actual fecha y un canal de luz para dimear, apartir de aqui trastea a tu gusto....

si te da error tiene que ser problema de la s librerias

esta es la parte de codigo

#include <OneWire.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h> //
#define DS1307_I2C_ADDRESS 0x68
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
int PinBlancas=24;//15 rele blancas
int Retraso=5000;


void setup()
{

pinMode(PinBlancas, OUTPUT);
///pines pwm//

pinMode(9, OUTPUT);//BLANCAS//
//Establecer el número de la pantalla LCD de columnas y filas:
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

Wire.begin();
lcd.backlight();
lcd.noBlink();
lcd.begin(20,4);


// Cambie estos valores a los que usted quiere poner su reloj.
// Usted probablemente solo quiere poner su reloj una vez y luego quitar
// la llamada de setDateDs1307.
// si desea poner en hora, active esta parte y luego vuelva a quitarla
/*
second = 00;
minute = 59;
hour = 23;
dayOfWeek = 4;
dayOfMonth = 30;
month =8;
year = 12;
setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
*/
}



void loop() {
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); //Obtenemos la hora
sensores.requestTemperatures();
Luces(minute, hour);





lcd.noBlink();
if (minute < 2) Retraso=2000;
else if (hour < 5) Retraso=2000;
else Retraso=2000;
}


// Convierte números normales decimales a BCD (binario decimal codificado)
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
// Convierte BCD (binario decimal codificado) a números normales decimales
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}

// Parar el DS1307, pero esto tiene el efecto secundario de segundos que se ponen a 0
// probablemente solo quiera usar esto para pruebas.
/*
void stopDs1307()
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.write(0x80);
Wire.endTransmission();
}
*/
// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
// Assumes you're passing in valid numbers
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 a bit 7 inicia el reloj
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour)); // Si usted quiere 12 hora am/pm usted tiene que poner el
// bit 6 (tambien tiene que cambiar readDateDs1307)
Wire.write(decToBcd(dayOfWeek));
Wire.write(decToBcd(dayOfMonth));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.endTransmission();
}
// Establece la fecha y el tiempo del ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Resetea el registro puntero
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
// Alguno de estos necesitan enmascarar porque ciertos bits son bits de control
*second = bcdToDec( Wire.read() & 0x7f);
*minute = bcdToDec( Wire.read());
*hour = bcdToDec( Wire.read() & 0x3f); //¿Necesita cambiar esto si 12 horas am / pm
*dayOfWeek = bcdToDec( Wire.read());
*dayOfMonth = bcdToDec( Wire.read());
*month = bcdToDec( Wire.read());
*year = bcdToDec( Wire.read());
}
/////////////PORCENTAJE//////////
int Porcent(int Valor, int Maximo)
{
int result;
result=Valor*50;
result=result/Maximo;
return result;
}


void Luces(int minutos, int horas) {


int BlBlancas;
int InicioAmanecerBlancas=900;//15:00//
int FinAmanecerBlancas=960;//16:00//
int InicioAnochecerBlancas=1200;//20:00//
int FinAnochecerBlancas=1260;//21:00//
int MaxBlancas=250;
int PorcentBlancas;
int PasoBlancasAM=MaxBlancas/(FinAmanecerBlancas-InicioAmanecerBlancas);
int PasoBlancasPM=MaxBlancas/(FinAnochecerBlancas-InicioAnochecerBlancas);
int Tiempo;
Tiempo=horas*60+minutos;
// if (Tiempo < 60)Tiempo=Tiempo+1440;
// Tiempo=Tiempo-60; //Horario de Invierno
//################################# BLANCAS ###################################
//Noche
if (Tiempo < InicioAmanecerBlancas) BlBlancas=0;
//Amanecer
if (Tiempo >= InicioAmanecerBlancas && Tiempo <= FinAmanecerBlancas)BlBlancas=(Tiempo-InicioAmanecerBlancas)*PasoBlancasAM;
//Dia
if (Tiempo > FinAmanecerBlancas && Tiempo < InicioAnochecerBlancas) BlBlancas=MaxBlancas;
//Anochecer
if (Tiempo >= InicioAnochecerBlancas && Tiempo <= FinAnochecerBlancas) BlBlancas=(FinAnochecerBlancas-Tiempo)*PasoBlancasPM;
//Control
if( BlBlancas <0) BlBlancas=0;
if( BlBlancas >MaxBlancas) BlBlancas=MaxBlancas;
analogWrite(9, BlBlancas );
PorcentBlancas =Porcent(BlBlancas ,255)*2;

lcd.clear();
lcd.setCursor(0,0);
lcd.print("ILUMINACION");
lcd.setCursor(0,3);
if (hour < 10) lcd.print("0");
lcd.print(hour, DEC);
lcd.print(":");
if (minute < 10) lcd.print("0");
lcd.print(minute, DEC);
lcd.setCursor(0,1);
lcd.print("BLANCAS:");
if (PorcentBlancas< 10);
lcd.print(PorcentBlancas);
lcd.print("%");
lcd.setCursor(10,3);
if (dayOfMonth < 10) lcd.print("0");
lcd.print(dayOfMonth, DEC);
lcd.print("/");
if (month < 10) lcd.print("0");
lcd.print(month, DEC);
lcd.print("/");
lcd.print("20");
if (year < 10) lcd.print("0");
lcd.print(year, DEC);
lcd.print("");
lcd.setCursor(0,2);
if (Tiempo > InicioAmanecerBlancas&& Tiempo < FinAmanecerBlancas) lcd.print ("AMANECER-BLANCAS");
if (Tiempo > FinAmanecerBlancas&& Tiempo < InicioAnochecerBlancas) lcd.print ("PLENUM-BLANCAS");
if (Tiempo >= InicioAnochecerBlancas&& Tiempo <= FinAnochecerBlancas) lcd.print ("ANOCHECER-BLANCAS");
if (Tiempo > FinAnochecerBlancas|| Tiempo < InicioAmanecerBlancas) lcd.print ("ZENIT-BLANCAS");

lcd.setCursor(10, 1);
if (Tiempo >= InicioAmanecerBlancas&& Tiempo <= FinAnochecerBlancas)//decimos al rele el encendido y apagado//
{
digitalWrite(PinBlancas, LOW);

}
else
{
digitalWrite(PinBlancas, HIGH);

}
delay(Retraso);
}
 
Última edición:
16 Sep 2011
83
Valencia
Provincia
Valencia
Pues veras, me lo carga sin problemas, bueno me dice algo de los sensores que se lo quito y se soluciona, pero no hace nada, en la pantalla sigue apareciendo lo de Hello World. No se que podra ser, o si sera que despues de lo de Hello... tendre que hacer otro paso, pero el tema es que el codigo me lo carga sin errores.


Al menos he avanzado en algo jejejeje


Un saludo y gracias.
 
21 Oct 2011
88
Benifaio
Provincia
Valencia
Si has puesto el codigo de Goldenpas te deberia de salir algunas anotaciones de luz y demas. Cuelga tu codigo y asi veremos donde tienes el error. Ya te avanzo que para cada linea que quieras escribir le tienes que decir al arduino donde esta "lcd.setCursor(linea, columna)"
 
16 Sep 2011
83
Valencia
Provincia
Valencia
Yo he puesto el codigo de Golden tal cual sin cambiar nada, simplemente en esta linea:

void loop() {
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); //Obtenemos la hora
sensores.requestTemperatures();
Luces(minute, hour);

eso me daba error y supuse que era para lo sensores que aun no tengo 100% operativos asi que lo quite. Pero nada, sigue sin ir y ahora lo mas fuerte es que la pantalla no aparece nada, ni hello wolrd ni nada :( un paso atras por que no aparece nada de nada.

Me parece...que voy a tirar la toalla por que me esta superando. En mis vacaciones....desquiciado xDDD



Un saludo!!
 
16 Sep 2011
83
Valencia
Provincia
Valencia
despues elimina de la libreria la carpeta RTClib y la sustituyes por DS1307 que es la del reloj, asi es como me guarda a mi la hora actual

Ese paso no lo acabo de entender, osea voy a la libreria y borro la carpeta RTClib, y que hago, creo una carpeta nueva que diga DS1307?

Dios bendito que cosa mas liante es todo esto jejejejeje y a la vez mola mucho (en plan hardcore) xD


Un saludo.
 
21 Oct 2011
88
Benifaio
Provincia
Valencia
Creo que té estàs liando demasiado, pienso que llegados a este punto seria mejor crear un plan de programacion mucho mas basico:

1. Inicializar y escribir en todas las linias del LCD lo que tu quieras, incluso con paginacion.
2. Cargar el reloj, y después poner la fecha y hora en el LCD
3. Sensores de temperatura.

Si intentas hacerlo todo junto sin saber que estàs haciendo no aprenderas bien, y después si hay algun problema o tienes que cambiar algo no sabras como.

Mirate tambien todos los ejemplos que tiene el arduino en el programa, para el lcd, reloj y sondas de temperatura.

Yo empece así, y cuando tenia algo bien hecho, lo guardaba y còpia en un nuevo programa, para tener siempre una còpia de seguridad.

1Saludo

Enviat des del meu SK17i
 
16 Sep 2011
83
Valencia
Provincia
Valencia
Nono, si no he hecho nada nuevo, lo de las sondas lo dije por que aun no las tengo soldadas, faltan las resistencias. Aunque no lo creais, llevo desde ayer dandole para que aparezca la hora y aun no lo he conseguido ejejeje. Todo lo que hago nuevo lo guardo en un text, y asi se por donde voy. Estoy en el punto de que no saco ahora nada en la pantalla, sin hacer nada nuevo, simplemente le he dado a un ejemplo de arduino que ponia "SerialDisplay" y creo que es por eso. Ahora estoy leyendo por ahi por si fuera que he quitado los caracteres (que tiene pinta) o a ver que pasa por que estoy volviendo sobre mis pasos para ver que hice mal, y solo se me ocurre eso.


Un saludo!!
 
Última edición:
21 Oct 2011
88
Benifaio
Provincia
Valencia
Igual ese ejemplo no es bueno para tu lcd, si té coges mi codigo creo que té funcionaria todo

Enviat des del meu SK17i
 
16 Sep 2011
83
Valencia
Provincia
Valencia
Pues nada, me doy por vencido. Lo he probado todo, soldar cables nuevos, cambiando pines y cables, borrado todo, reiniciado, puesto en otros pines...todo lo posible y nada. O es que se ha roto la pantalla o el arduino, o no se que gaitas ha pasado. Anoche al menos me mostraba los textos que yo le escribia, pero hoy ni eso. No lo entiendo. Si alguien tiene una solucion o le ha pasado un caso similar al mio que me diga, si no pues no se.


Un saludo :(
 
16 Sep 2011
83
Valencia
Provincia
Valencia
Pues nada, ya esta solucionado el problemon (a priori). Despues de investigar, poner mil librerias, probar todos los ejemplos y hacer tooooodo lo que podia, he empezado a centrarme e ir paso a paso, y he dado con la solucion.

La solucion era tan simple como esta linea:

#include <OneWire.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h> //
#define DS1307_I2C_ADDRESS 0x68
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
int PinBlancas=24;//15 rele blancas
int Retraso=5000


Donde pone (0x27,20,4) ahi he puesto (0x20,20,4) y ha funcionado. No se que significa el 20 y el 27, se que el otro 20 y el 4 son los caracteres y las columnas, pero el 20 lo he deducido al ver un tio que hizo una libreria y ponia exactamente mi pantalla, pero con sus 3 modelos diferentes, pues ahi estaba el 0x20 asi que lo he cambiado y...tachaaaan funciona a la perfección. Pequeño error pero a mi me ha costado mas de 10 horas dar con el :p


Espero que a alguien le ayude alguna vez por que cuando lo he encontrado, vamos, como ser padre otra vez jajajajaja


Un saludo!!!
 
16 Sep 2011
83
Valencia
Provincia
Valencia
Tengo un pequeño problema. Si quito el cable USB, la hora no sigue contanto. Se queda desde donde quite el cable. ¿A que se debe? He repasado el codigo y tienen la orden de llamar al reloj pero no lo hace.


Un saludo.
 
21 Oct 2011
88
Benifaio
Provincia
Valencia
Podria deberse a que el reloj no tenga guardada correctamente la hora, revisa y vuelve si hace falta a compilar el codigo para inicializar el reloj.

Enviat des del meu SK17i
 
Arriba