Ir ao conteúdo
  • Cadastre-se
Nuno Azevedo

Display mostra caracteres estranhos passado uns segundos

Recommended Posts

Olá a todos, sou um estudante e estou a fazer um projeto que consiste mostrar num display o meu nome e de um colega, a hora e data e o codigo de uma tag RFID e estou a usar uma arduino uno. O problema e que apos alguns segundos o display começa a mostrar coisas que não devia e ficam algumas coisas fora do sito. Agradeço desde já toda a ajuda 

e aqui esta um video do funcionamento 

---------------------------------------------------------------------------
#include <SoftwareSerial.h>
SoftwareSerial RFID(2, 3);
#include "Wire.h"

#define DS1307_ADDRESS 0x68

byte zero = 0x00; 

int segundos = 0;
int  minutos = 0;
int  horas = 0; 
int  diadasemana = 0; 
int  diadomes = 0;
int  mes = 0;
int  ano = 0;
void setup()
{
  Wire.begin();
  RFID.begin(9600);
  Serial.begin(9600);
  //SelecionaDataeHora(); 

  clearLCD();
Hidecursor();
backlightOn(); 
}
int Tempo=0; 
int Tempo2=0;
void loop()
{

char i; 
  if (RFID.available() > 0)
{
i = RFID.read();

if (i==2){
cursorSet(1,61);

}
if (i>47){
  Serial.print(char(i));

}


}
if(Tempo>1000){
  Mostrarelogio();
  Tempo=0;

}
if(Tempo2>1000){
  titulo();
  Tempo2=0;

}
delay(4);
  Tempo=Tempo+4;
Tempo2=Tempo2+4;
}

void SelecionaDataeHora()   //Seta a data e a hora do DS1307
{
  byte segundos = 0; //Valores de 0 a 59
  byte minutos = 24; //Valores de 0 a 59
  byte horas = 11; //Valores de 0 a 23
  byte diadasemana = 4; //Valores de 0 a 6 - 0=Domingo, 1 = Segunda, etc.
  byte diadomes = 12; //Valores de 1 a 31
  byte mes = 2; //Valores de 1 a 12
  byte ano = 15; //Valores de 0 a 99
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);

  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(); 
}

byte ConverteParaBCD(byte val){ //Converte o número de decimal para BCD
  return ( (val/10*16) + (val%10) );
}

byte ConverteparaDecimal(byte val)  { //Converte de BCD para decimal
  return ( (val/16*10) + (val%16) );
}

void Mostrarelogio()
{
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);
   segundos = ConverteparaDecimal(Wire.read());
   minutos = ConverteparaDecimal(Wire.read());
   horas = ConverteparaDecimal(Wire.read() & 0b111111); 
   diadasemana = ConverteparaDecimal(Wire.read()); 
   diadomes = ConverteparaDecimal(Wire.read());
   mes = ConverteparaDecimal(Wire.read());
   ano = ConverteparaDecimal(Wire.read());
    cursorSet(1,21);
  Serial.print("   Hora: ");
  Serial.print(horas);
  Serial.print(":");
  Serial.print(minutos);
  Serial.print(":");
  Serial.print(segundos);
  Serial.print(" ");
   cursorSet(1,41);
  Serial.print("   Data: ");
  Serial.print(diadomes);
  Serial.print("/");
  Serial.print(mes);
  Serial.print("/");
  Serial.print(ano);
  Serial.print(" ");

}
void clearLCD(){
  Serial.write(12);
}


// start a new line
void newLine() { 
  Serial.write(10); 
}


// move the cursor to the home position
void cursorHome(){
  Serial.write(1);

}

// turn on backlight
void backlightOn(){
  Serial.write(char(19)); // use 0 minutes to turn the backlight on indefinitely   
}
void Hidecursor(){
Serial.write(4);
}
void cursorSet(int xpos, int ypos){  
  Serial.write(char(3));               
  Serial.write(xpos);   //Column position   
  Serial.write(ypos); //Row position 

void titulo(){
   cursorSet(1,1);
  Serial.print("   NUNO / TIAGO");

----------------------------------------------------------------------------

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não uso o arduino, mas crie um loop infinito logo após aparecerem os dados corretos.

Se o problema persistir é hardware caso contrário pode ser software.

MOR_AL

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Nuno Azevedo,

Me parece que voce está utilizando a saida serial para enviar dados ao display. Se for isto, experimente colocar um resistor de 4k7 na saida serial, ligado ao + 5V, pode ser que o sinal de RF esteja causando ruidos na linha de Tx.

E para garantir, coloque um capacitor de 100 nF soldado diretamente do display, entre o +5V e o terra.

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×