desktop

Problema con simulación de Arduino en Proteus (LCD)

Hola a todos estoy haciendo una simulacion en proteus 7.6 de un arduino uno r3, y necesito imprimir la hora obtenida por el componente DS1307, en un lcd LM041L; tengo el siguiente codigo hasta el momento, les adjunto el tutorial de donde me base para obtener la hora del DS1307 y las librerias para el manejo de teclado y reloj...El teclado solo funciona la mitad y esta mal configurado pero no me interesa por el momento, solo quiero imprimir la hora obtenida por el DS1307 en el lcd.
Código:
#include <Keypad.h>
#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;

const byte ROWS = 4; //four rows
const byte COLS = 3; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'7','8','9'},
  {'4','5','6'},
  {'1','2','3'},
  {'A','0','B'}
};
byte rowPins[ROWS] = {13, 10,9, 8}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {7, 6, 1}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(){
  Serial.begin(9600);
  pinMode(1, INPUT);
}
  
void loop(){
  char customKey = customKeypad.getKey();
    if (customKey != NO_KEY){
    Serial.print("tecla ");
    Serial.println(customKey);
    lcd.print(customKey);
  }
}
 

Adjuntos

  • rtclib.rar
    4.9 KB · Visitas: 9
  • keypad.zip
    18.5 KB · Visitas: 6
  • Reloj RTC I2C con Arduino - TuElectronica.es.pdf
    255.5 KB · Visitas: 14
  • Diseño en proteus.rar
    15.2 KB · Visitas: 10
Última edición:
no pues en el codigo que pones no se ve donde inicias el reloj y sobre todo no hay una funcion que te lea la hora, la fecha ni una funcion para escribir en ella

debes abrir la libreria y ver que funcion es la que lee o escribe

un ejemplo "no es de arduino"

gethora(hrs,min,sec);

esa funcion me dice la hora

algo asi deberia estar en tu programa
 
no pues en el codigo que pones no se ve donde inicias el reloj y sobre todo no hay una funcion que te lea la hora, la fecha ni una funcion para escribir en ella

debes abrir la libreria y ver que funcion es la que lee o escribe

un ejemplo "no es de arduino"

gethora(hrs,min,sec);

esa funcion me dice la hora

algo asi deberia estar en tu programa

Por eso puse el tutorial (PDF) de dónde me basé en lo del reloj.
Se supone que éstas líneas:
RTC_DS1307 RTC; // Crea el objeto RTC
en void setup:
Wire.begin(); // Establece la velocidad de datos del bus I2C
RTC.begin(); // Establece la velocidad de datos del RTC
en void loop:
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC

Quiero saber como imprimir lo que obtengo en el LCD, soy novato en esto de arduino y tampoco estudio electrónica, así que necesito asesoramiento.
 
Última edición por un moderador:
Hola.

Hace tiempo hice un proyecto parecido. Llevaba más cosas (sensor de temperatura, de humerdad, de luminosidad, presencia, alarma, podías cambiar la fecha y la hora del reloj... bastante complejo). Usaba una pantalla por I2C, pero creo que las funciones se usan igual, lo único que cambia es a la hora de inicializarla.

Pego aquí el código que te puede interesar. Puede que tenga algún fallo, he cortado la parte no interesante de forma rápida y no he comprobado que estén todas las llaves y demás.

De todas formas, en la página de Arduino está toda la información que necesitas para el uso de la biblioteca LiquidCrystal, con todas las funciones que puedes utilizar, y algunos ejemplos de uso. En cuanto a la RTClib, lo mejor que puedes hacer es mirar el código fuente y ver qué funciones tiene y cómo usarlas (suele haber comentarios).

¡Espero que te sirva!

Saludos

Código:
//Bibliotecas
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>

//ID LCD I2C
#define ID_lcd  0x27

RTC_DS1307 RTC; //Reloj RTC
LiquidCrystal_I2C pantalla(ID_lcd,16,2); //Pantalla I2C

//Variables
int any;  //año
byte dia, mes,      //Fecha
     h, m, s;       //Hora
DateTime tpo;    //Hora actual



//Rutina de inicializacion
void setup()
{
  Wire.begin();          //Inicia protocolo TWI/I2C
  RTC.begin();           //inicializacion reloj RTC
  pantalla.init();       //inicializacion de la pantalla
  pantalla.backlight();  //enciende la retroiluminacion
  if (! RTC.isrunning()) //Si el reloj no esta en marcha
  {
    RTC.adjust(DateTime(__DATE__, __TIME__)); //poner fecha y hora del momento de compilacion
  }
} //SETUP



//Bucle principal
void loop()
{
  //Obtiene los datos del RTC
  tpo = RTC.now();
  any = tpo.year();
  mes = tpo.month();
  dia = tpo.day();
  h = tpo.hour();
  m = tpo.minute();
  s = tpo.second();

  //Imprimir pantalla LCD
  Imprimir_LCD();  
  
  //espera activa hasta que pase 1 segundo
  while (s == tpo.second())
    {
    tpo = RTC.now();
    //actualizar valor de tpo
    }
} //LOOP




//para formatear 2 digitos
void formatTime(char Out[3], int num)
{
  Out[0] = '0' + (num / 10);
  Out[1] = '0' + (num % 10);
  Out[2] = '\0';
}

//para formatear 4 digitos
void formatYear(char Out[5], int num)
{
  Out[0] = '0' + (num / 1000);
  Out[1] = '0' + ((num / 100) % 10);
  Out[2] = '0' + ((num / 10) % 10);
  Out[3] = '0' + (num % 10);
  Out[4] = '\0';
}

//Muestra la informacion que corresponda por la pantalla
void Imprimir_LCD()
{
  char cad[3]; //variable temporal de cadena
  char can[5]; //para el año

    //Fecha  
      pantalla.setCursor(0,1);
      formatYear(can,any);
      pantalla.print(can);
      pantalla.setCursor(0,0);
      formatTime(cad,dia);
      pantalla.print(cad);
      pantalla.setCursor(2,0);
      switch (mes)
        {
        case 1:  pantalla.print(" ene"); break;
        case 2:  pantalla.print(" feb"); break;
        case 3:  pantalla.print(" mar"); break;
        case 4:  pantalla.print(" abr"); break;
        case 5:  pantalla.print(" may"); break;
        case 6:  pantalla.print(" jun"); break;
        case 7:  pantalla.print(" jul"); break;
        case 8:  pantalla.print(" ago"); break;
        case 9:  pantalla.print(" sep"); break;
        case 10: pantalla.print(" oct"); break;
        case 11: pantalla.print(" nov"); break;
        case 12: pantalla.print(" dec"); break;
        default: pantalla.print(" ERR"); break;
        } //switch mes

    //Hora
    pantalla.setCursor(10,0);
    pantalla.print(":  :");
    pantalla.setCursor(8,0);
    formatTime(cad,h);
    pantalla.print(cad);
    pantalla.setCursor(11,0);
    formatTime(cad,m);
    pantalla.print(cad);
    pantalla.setCursor(14,0);
    formatTime(cad,s);
    pantalla.print(cad);
}
 
Última edición:
Atrás
Arriba