Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 11336

Ajuda num Display 20x4 caracteres estranhos

$
0
0
Estou a fazer um projeto com um Leitor RFID 125KHz (SEN11425P), um RTC Relogio tempo Real DS1307 e uum Display 20x4 Green com um arduino uno. O problema e que o Display escreve o que eu quero em sitios diferentes, as vezes nao aparece nada do que eu quero. Alguem me pode ajudar?

Codigo que estou a usar:

Código (C):
#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.write(char(12));
  Serial.begin(9600);

  //SelecionaDataeHora();

  Serial.write(char(12));
  Serial.write(char(19));
  Serial.write(char(4));


}
int Tempo=0;
void loop()
{
char i;
  if (RFID.available() > 0)
{
i = RFID.read();

if (i==2){

  Serial.print(char(1));


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



}
 
  //_____________________________________________//

  if(Tempo>1000 & !RFID.available()){
  Mostrarelogio();
  Tempo=0;
        Serial.print(char(1));


  Serial.print("        NUNO / TIAGO   ");
  Serial.print(char(0x01));
  Serial.print(char(10));
  Serial.print(horas);
  Serial.print(":");
  Serial.print(minutos);
  Serial.print(":");
  Serial.print(segundos);
  Serial.print("   ");
  Serial.print(diadomes);
  Serial.print("/");
  Serial.print(mes);
  Serial.print("/");
  Serial.print(ano);
  Serial.print(" ");


   }
 
  delay(4);
  Tempo=Tempo+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());

}

Viewing all articles
Browse latest Browse all 11336

Trending Articles