Go Down

Topic: [SOLUCIONADO] reloj digital con i2c (Read 971 times) previous topic - next topic

Giroth

Oct 27, 2016, 10:13 pm Last Edit: Nov 01, 2016, 11:48 pm by Giroth
Hola, Buenas a todos soy nuevo en este foro y usando arduino y queria ver si podian ayudarme con un problema que ya me da dolor de cabeza.



Primero que todo.. uh no se como decirlo pero basicamente no soy ingeniero electronico ni nada parecido, soy un bachiller que como proyecto escolar trato de meterse con el arduino y pues no se nada, he seguido guias claro, de todo tipo.

tengo el arduino uno r3 smd, un display lcd 2x16 un adaptador i2c una protoboard de 270 pines (no encontre mas grande) los jumpers y unos pines macho (los negritos esos solos)

segui una guia que veia bastante basica y simple, esta https://www.youtube.com/watch?v=6taJlsSLhoQ  segui los pasos indicados y use la libreria que ellos usaban pero cuando termine de montar todo y poner el codigo (este)
Code: [Select]
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal.h>


LiquidCrystal_I2C lcd(0x3F,16,2);

  int minutos=59;
  int segundos=50;
  int horas=11;
  int dia=27;
  int mes=05;
  int anio=2015;
 
  int cont=2;
 
void setup() {
  lcd.backlight();
  lcd.init();
}

void loop() {
   lcd.clear();
   lcd.print("Hora:");
   segundos++;
  if(segundos>59){
    minutos++;
    segundos=0;
  }
  if(minutos>59){
    horas++;
    minutos=0;
    segundos=0;
  }
  if(horas>=12)
  {
    cont++;
    horas=0;
    minutos=0;
    segundos=0;
    if (cont==3)
    {
      cont=1;
      dia++;
     
      if (((mes==1) || (mes==3)||(mes==5) ||(mes==7) || (mes==8) || (mes==10) ||(mes==12))&&(dia>31))
    {
        mes++;
        dia=1;
   
    }
      if (mes==13)
            {
              mes=1;
              anio++;
              dia=1;
            }
   
 
     if (((mes==4)||(mes==6) ||(mes==9) || (mes==11)&& (dia>30)))
         {
           mes++;
           dia=1;
         }
 
    if (((mes==2) && (dia>28)))
        {
         mes++;
         dia=1;
        }
     
    }
  } 
 
 
 if (horas==0)
 {
  lcd.print("12");
  lcd.print(":");
  if(minutos<10)lcd.print("0");
  lcd.print(minutos);
  lcd.print(":");
  if(segundos<10)lcd.print("0");
  lcd.print(segundos);
  lcd.print(" ");
  if(cont==1)lcd.print("AM");
  if(cont==2)lcd.print("PM");
  lcd.setCursor(0,1);
  lcd.print("Fecha:");
  if(dia<10)lcd.print("0");
  lcd.print(dia);
  lcd.print("/");
  if(mes<10)lcd.print("0");
  lcd.print(mes);
  lcd.print("/");
  lcd.print(anio);
  delay(950);
 }
 
 if (horas!=0)
 {
  if(horas<10)lcd.print("0");
  lcd.print(horas);
  lcd.print(":");
  if(minutos<10)lcd.print("0");
  lcd.print(minutos);
  lcd.print(":");
  if(segundos<10)lcd.print("0");
  lcd.print(segundos);
  lcd.print(" ");
  if(cont==1)lcd.print("AM");
  if(cont==2)lcd.print("PM");
  lcd.setCursor(0,1);
  lcd.print("Fecha:");
  if(dia<10)lcd.print("0");
  lcd.print(dia);
  lcd.print("/");
  if(mes<10)lcd.print("0");
  lcd.print(mes);
  lcd.print("/");
  lcd.print(anio);
  delay(950);
 }
}


verifique que los cables estuvieran bien y que el codigo estuviera bien, lo compile no salia error y decidi correrlo en la placa pero, no paso nada el lcd se quedo negro ni encendia ni nada y luego de toquetear un poco me di cuenta que si presionaba un poco el adaptador a la pantalla esta se prendia pero no mostraba nada ni con el codigo subido y esto es lo que me deja perplejo (el adaptador no esta soldado por si acaso) este fue el primer problema que tuve, luego me decidi armarlo de otra manera.

fui a la universidad qeu queda aqui cerca y me encontre con un profesor que sabia trabajar con esto, el me explico un poco (aunque la verdad que no entiendo bien esto, repito soy bachiller aun) y me mostro un ejemplo digital con el proteus y me paso un codigo para que lo usara con una protoboard
Code: [Select]
/*
 Name: reloj.ino
 Created: 19/10/2016 17:56:14
 Author: Ing Milher Tovar
*/

// the setup function runs once when you press reset or power the board
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(A0, A1, 10, 11, 12, 13);

int hora;
int minutos;
int segundos;

void setup() {
lcd.begin(16, 2);
hora = 0;
minutos = 0;
segundos = 0;
}

// the loop function runs over and over again until power down or reset
void loop() {
lcd.clear();
lcd.print(String(hora) + ":" + String(minutos) + ":" + String(segundos));
segundos = segundos + 1;
if (segundos == 59) {
minutos = minutos + 1;
segundos = 0;
}
if (minutos == 59) {
hora = hora + 1;
}
if (hora == 13)
{
hora = 1;
}
delay(10); //se deja en 1000 cada mil milisegundos es un segundo
}



decidi armarlo y me di cuenta de un pequeño pero importantisimo detalle, tengo pines macho - hembra y me lleva a la siguiente pregunta que espero no sea estupida, se pueden adaptar los pines hembra a macho?. esas son todas mis preguntas. reitero que no se mucho sobre esto, si pueden explicarme de manera simple les quedo agradecido.





--La solucion fue un tanto curiosa para mi, cabe aclarar que opte por soldarlo al modulo i2c y aun asi no mostraba nada en la pantalla, lo unico que hice fue cambiar la linea
Code: [Select]
LiquidCrystal_I2C lcd(0x3F,16,2); aunque antes ya estaba asi por alguna razon funciono.

Go Up