¿Son los mismos modulos de reloj?

Tema en 'Mi Controlador' iniciado por Rubenet, 3 Jul 2013.

  1. Rubenet

    Rubenet

    Mensajes:
    83
    Registrado:
    16 Sep 2011
    Ubicación:
    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: http://www.ebay.es/itm/LCD-i2c-seri...UL-/321137767480?ssPageName=ADME:L:OC:ES:3160

    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.

    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]



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

    ¿Que hago?

    Dios mio que caos jejejejeje


    Un saludo!!
     
  2. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    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
     
  3. Rubenet

    Rubenet

    Mensajes:
    83
    Registrado:
    16 Sep 2011
    Ubicación:
    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!
     
  4. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    En el enlace que té puse tienes unos ejemplos de como sacar la hora en el lcd, miratelo bien.

    Enviat des del meu SK17i
     
  5. Rubenet

    Rubenet

    Mensajes:
    83
    Registrado:
    16 Sep 2011
    Ubicación:
    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!!!
     
  6. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    En cualquiera de los dos tienes el codigo para mostrar la hora y fecha.

    Enviat des del meu SK17i
     
  7. Goldenpas

    Goldenpas

    Mensajes:
    184
    Registrado:
    23 May 2006
    Ubicación:
    España
    si puedo a lo largo de la tarde te paso un trozo de codigo con la hora y fecha y un canal de dimeo
     
  8. Rubenet

    Rubenet

    Mensajes:
    83
    Registrado:
    16 Sep 2011
    Ubicación:
    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!!!
     
  9. Goldenpas

    Goldenpas

    Mensajes:
    184
    Registrado:
    23 May 2006
    Ubicación:
    España
    primero sigue los pasos de este enlace que ya tenias en el post
    http://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: 4 Jul 2013
  10. Rubenet

    Rubenet

    Mensajes:
    83
    Registrado:
    16 Sep 2011
    Ubicación:
    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.
     
  11. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    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)"
     
  12. Rubenet

    Rubenet

    Mensajes:
    83
    Registrado:
    16 Sep 2011
    Ubicación:
    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!!
     
  13. Rubenet

    Rubenet

    Mensajes:
    83
    Registrado:
    16 Sep 2011
    Ubicación:
    Valencia
    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.
     
  14. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    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
     
  15. Rubenet

    Rubenet

    Mensajes:
    83
    Registrado:
    16 Sep 2011
    Ubicación:
    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: 5 Jul 2013
  16. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    Igual ese ejemplo no es bueno para tu lcd, si té coges mi codigo creo que té funcionaria todo

    Enviat des del meu SK17i
     
  17. Rubenet

    Rubenet

    Mensajes:
    83
    Registrado:
    16 Sep 2011
    Ubicación:
    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 :(
     
  18. Rubenet

    Rubenet

    Mensajes:
    83
    Registrado:
    16 Sep 2011
    Ubicación:
    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!!!
     
  19. Rubenet

    Rubenet

    Mensajes:
    83
    Registrado:
    16 Sep 2011
    Ubicación:
    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.
     
  20. fredy666

    fredy666

    Mensajes:
    88
    Registrado:
    21 Oct 2011
    Ubicación:
    Benifaio
    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