Dificultades con la lectura de la hora y sensor

Hola. Necesito si por favor me pueden orientar hice para un proyecto un velador táctil con TTP223B ,un modulo Ds3231 y un lcd 16x2 con modulo i2c, El problema es que el sensor no es tan sensible como para el encendido y apagado del led y la hora me aparece de la siguiente manera en el LCD D:2001/11/0 T: 40:57:0, he probado viendo alguno tutoriales pero sigo sin éxito.
Desde ya muchas gracias

// NOTA: se debe cargar dos veces este programa 1.Con la linea 9= RTC.adjust(DateTime(__DATE__, __TIME__));
//                                              2. Sin esa linea

#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS1307 RTC;

int identificador = 0;
int led = 13;


void setup() {
  pinMode(led, OUTPUT);
  Wire.begin();  // Inicia el puerto I2C
  RTC.begin();   // Inicia la comunicaci¢n con el RTC
  RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora (Comentar una vez establecida la hora)
  //el anterior se usa solo en la configuracion inicial
  Serial.begin(9600);  // Establece la velocidad de datos del puerto serie
  lcd.init();
  lcd.backlight();
  lcd.clear();
}
void loop() {
  DateTime now = RTC.now();  // Obtiene la fecha y hora del RTC

  Serial.print(now.year(), DEC);  // A§o
  Serial.print('/');
  Serial.print(now.month(), DEC);  // Mes
  Serial.print('/');
  Serial.print(now.day(), DEC);  // Dia
  Serial.print(' ');
  Serial.print(now.hour(), DEC);  // Horas
  Serial.print(':');

  Serial.print(now.minute(), DEC);  // Minutos
  Serial.print(':');
  Serial.print(now.second(), DEC);  // Segundos
  Serial.println();
  lcd.setCursor(0, 0);
  lcd.print("D:");
  lcd.print(now.year(), DEC);
  lcd.print("/");
  lcd.print(now.month(), DEC);
  lcd.print("/");
  lcd.print(now.day(), DEC);
  lcd.print(" ");
  lcd.setCursor(0, 1);
  lcd.print("T: ");
  lcd.print(now.hour(), DEC);
  lcd.print(":");
  lcd.print(now.minute(), DEC);
  lcd.print(":");
  lcd.print(now.second(), DEC);
  delay(1000);  // La informaci¢n se actualiza cada 1 seg.
  lcd.setCursor(0, 0);
  lcd.print("               ");
  lcd.setCursor(0, 1);
  lcd.print("               ");

  if (digitalRead(7) == HIGH) {
    delay(200);
    if (identificador == 0) {
      digitalWrite(led, HIGH);
      identificador += 1;
    } else {
      digitalWrite(led, LOW);
      identificador -= 1;
    }
  }
}

Qué tienes conectado en el pin 7?
Cómo debería verse la fecha/hora?

El código funciona bien, al menos en lo que respecta al reloj.
Habría que hacer alguna corrección en cuanto al formato de minutos y segundos.

Que tiene que ver el sensor con la presentación de la hora?

Prueba el sensor Touch por un lado y luego haz lo mismo con la hora.
Ninguna hora puede mostrar 2001/11/0 T: 40:57:0 qué es eso?

Primero estas definiendo un módulo
RTC_DS1307 RTC;

Programa corregido

#include <Wire.h>
#include <stdio.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>

RTC_DS3231 RTC;
// RTC_DS1307 RTC;
int segundo,minuto,hora,dia,mes;
long anio; //variable año
DateTime HoraFecha;
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup () {
   
  Serial.begin(9600);
  pinMode(9, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(3, INPUT_PULLUP);
  // char TIMEX[]={__TIME__[0],__TIME__[1]};
  // int x;
  // sscanf(TIMEX, "%d", &x);
  // x -= 5;
  // char str[9];
  // sprintf(str, "%d:%c%c:%c%c", x,__TIME__[3],__TIME__[4],__TIME__[6],__TIME__[7]);
  // Serial.println(str);
  
  RTC.begin(); //Inicializamos el RTC
 // Serial.println("Estableciendo Hora y fecha...");
  // Serial.println(tm1637);
  
  RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
  lcd.init();
  lcd.backlight();
  lcd.clear();
}

bool puntoActiva=false;
bool alarma=true;
bool tiempoAlarma=false;

void loop () {
  char buffer[20];

  DateTime now = RTC.now();  // Obtiene la fecha y hora del RTC
  sprintf(buffer,"D:%02d/%02d/%4d", now.day(), now.month(), now.year());
  Serial.println(buffer);
  lcd.setCursor(0, 0);
  lcd.print(buffer);
  sprintf(buffer,"T:%02d:%02d:%02d", now.hour(), now.minute(), now.second());
  Serial.println(buffer);
  lcd.setCursor(0, 1);
  lcd.print(buffer);
  delay(1000);  // La informaci¢n se actualiza cada 1 seg.
     
}
1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.