Bom dia , to montando um medidor de temperatura com relógio e LCD 1602, mas fica aparecendo data e hora estranhas e com alguns numeros no final .
ex: Dom, 01/06/176655
23:41:2665
em alguns momentos esse numeros no final ficam mudando e tem horas que o lcd trava, como se nao estivesse sendo atualizado a hora.
alguém pode me Ajudar ?
fica aparecendo data e hora estranhas e com alguns numeros no final
Simples, só não enviar para o LCD esses números no final.
Essa é a melhor resposta quando você NÃO fornece o código fonte.
Sem ele, não é possível dar uma solução específica, pois pode ter sido escrito de infinitas formas.
em alguns momentos esse numeros no final ficam mudando e tem horas que o lcd trava, como se nao estivesse sendo atualizado a hora.
Código, por favor.
Meu Código :
/* Configuraoes do 74hc595
- Pino 1 - RS LCD
- Pino 2 - VAZIO
- Pino 3 - E LCD
- Pino 4 - D4 LCD
- Pino 5 - D5 LCD
- Pino 6 - D6 LCD
- Pino 7 - D7 LCD
- Pino 8 - GROUND
- Pino 9 - VAZIO
- Pino 10 - 5V
- Pino 11 - D13 ARDUINO
- Pino 13 - D9 ARDUINO
- Pino 13 - GROUND
- Pino 14 - D11 ARDUINO
- Pino 15 - VAZIO
- Pino 16 - 5V
*/
/* Configuraoes do LCD 1602
- Pino 1 - GROUND
- Pino 2 - 5V
- Pino 3 - CONTRASTE
- Pino 4 - PINO 1 CI74hc595
- Pino 5 - GROUND
- Pino 6 - PINO 3 CI74hc595
- Pino 7 - DESCONECTADO
- Pino 8 - DESCONECTADO
- Pino 9 - DESCONECTADO
- Pino 10 - DESCONECTADO
- Pino 11 - PINO 4 CI74hc595
- Pino 12 - PINO 5 CI74hc595
- Pino 13 - PINO 6 CI74hc595
- Pino 14 - PINO 7 CI74hc595
- Pino 15 - LUZ LCD
- Pino 16 - GROUND
- CONTRASTE VAI DE 0 A 150;
*/
/*Configuraoes do DHT11
- PINO 1 - 5V
- PINO 2 - PORTA A3 ARDUINO
- PINO 3 - DESCONECTADO
- PINO 4 - GROUND
*/
//Converte o número de decimal para BCD
byte ConverteParaBCD(byte val){
return ( (val/1016) + (val%10) );
}
//Converte de BCD para decimal
byte ConverteparaDecimal(byte val) {
return ( (val/1610) + (val%16) );
}
//BIBLIOTECAS
#include <Wire.h>
#include <SPI.h>
#include <LiquidCrystal.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
//PINOS
int PinoDht = 2; // DEFINE LOCAL DO SENSOR DHT11
int PinoLuzLCD = 5; // DEFINE LOCAL DA LUZ LCD
int PinoContraste = 6; // DEFINE LOCAL DO CONTRASTE LCD
//DEFINIÇÕES
LiquidCrystal lcd(9); // DEFINE LOCAL DO LCD CI74hc595
#define DHTTYPE DHT11 // DEFINE MODELO DO SENSOR
DHT_Unified dht(PinoDht, DHTTYPE);
#define DS1307_ADDRESS 0x68
byte zero = 0x00;
//VARIAVEIS
uint32_t delayMS;
//Simbolos Array LCD
byte temperatura[8] = {
B00100,
B01010,
B01010,
B01010,
B01110,
B11111,
B11111,
B01110
};
byte umidade[8] = {
B00100,
B00100,
B01010,
B01010,
B10001,
B10001,
B10001,
B01110
};
byte grau[8] = {
B11100,
B10100,
B11100,
B00000,
B00000,
B00000,
B00000,
B00000
};
byte erro[8] = {
B00100,
B00100,
B00100,
B00100,
B00100,
B00000,
B00000,
B00100
};
void setup() {
Wire.begin();
pinMode(PinoLuzLCD, OUTPUT);
CaractereLCD();
dht.begin();
lcd.begin(16, 2);
digitalWrite(PinoLuzLCD, HIGH);
delay(5000);
lcd.clear();
Serial.begin(9600);
}
void loop() {
ContrasteLCD();
CarregarRelogio();
Serial.println("TESTE");
}
void CaractereLCD(){
lcd.createChar(1, temperatura);
lcd.createChar(2, umidade);
lcd.createChar(3, grau);
lcd.createChar(4, erro);
}
void TemperaturaHumidade (){
// delay(delayMS);
// CARREGA TEMPERATURA E UMIDADE
sensors_event_t event;
dht.temperature().getEvent(&event);
// VERIFICA A TEMPERATURA
if (isnan(event.temperature)) {
lcd.setCursor(0,0);
lcd.write((byte)1);
lcd.setCursor(2,0);
lcd.write((byte)4);
lcd.write((byte)3);
lcd.print("C");
}
else {
lcd.setCursor(0,0);
lcd.write((byte)1);
lcd.setCursor(2,0);
lcd.print(event.temperature);
lcd.write((byte)3);
lcd.print("C");
}
// VERIFICA A UMUIDADE
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
lcd.setCursor(0,1);
lcd.write((byte)2);
lcd.setCursor(2,1);
lcd.write((byte)4);
}
else {
lcd.setCursor(0,1);
lcd.write((byte)2);
lcd.setCursor(2,1);
lcd.print(event.relative_humidity);
}
}
void ContrasteLCD(){
analogWrite(PinoContraste, 100);
}
void ConfigurarDataHora() //Seta a data e a hora do DS1307
{
byte segundos = 40; //Valores de 0 a 59
byte minutos = 55; //Valores de 0 a 59
byte horas = 22; //Valores de 0 a 23
byte diadasemana = 0; //Valores de 0 a 6 - 0=Domingo, 1 = Segunda, etc.
byte diadomes = 1; //Valores de 1 a 31
byte mes = 6; //Valores de 1 a 12
byte ano = 17; //Valores de 0 a 99
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados
//As linhas abaixo escrevem no CI os valores de
//data e hora que foram colocados nas variaveis acima
Wire.write(ConverteParaBCD(segundos));
Wire.write(ConverteParaBCD(minutos));
Wire.write(ConverteParaBCD(horas));
Wire.write(ConverteParaBCD(diadasemana));
Wire.write(ConverteParaBCD(diadomes));
Wire.write(ConverteParaBCD(mes));
Wire.write(ConverteParaBCD(ano));
Wire.write(zero); //Start no CI
Wire.endTransmission();
}
void CarregarRelogio(){
// Le os valores (data e hora) do modulo DS1307
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int segundos = ConverteparaDecimal(Wire.read());
int minutos = ConverteparaDecimal(Wire.read());
int horas = ConverteparaDecimal(Wire.read() & 0b111111);
int diadasemana = ConverteparaDecimal(Wire.read());
int diadomes = ConverteparaDecimal(Wire.read());
int mes = ConverteparaDecimal(Wire.read());
int ano = ConverteparaDecimal(Wire.read());
// Mostra os dados no display
lcd.setCursor(0,0);
switch(diadasemana)
{
case 0:lcd.print("Dom, ");
break;
case 1:lcd.print("Seg, ");
break;
case 2:lcd.print("Ter, ");
break;
case 3:lcd.print("Quar, ");
break;
case 4:lcd.print("Qui, ");
break;
case 5:lcd.print("Sex, ");
break;
case 6:lcd.print("Sab, ");
}
if (diadomes < 10){
lcd.print("0");
}
lcd.print(diadomes);
lcd.print("/");
if (mes < 10){
lcd.print("0");
}
lcd.print(mes);
lcd.print("/");
lcd.print(ano);
lcd.setCursor(0,1);
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);
}
Meu Código :
Você esqueceu as tag [ code][ /code], para seu código aparecer assim:
Código
Edite seu post e adicione as tag, que ajudam a ler o código.
Se não for um requisito usar a biblioteca Wire diretamente, recomendo usar uma biblioteca para o DS1307, que já está tudo pronto e testado para funcionar.
Link para uma das muitas bibliotecas:
Veja esses links em português:
Relógio com o módulo RTC DS1307 e Arduino
Relógio com o módulo RTC DS1307 e LCD 20×4
Leia, teste e traga as dúvidas.