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