collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[27 de Março de 2024, 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Ajuda num Display 20x4 caracteres estranhos  (Lida 5529 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline NunoAzevedo

  • Mini Robot
  • *
  • Mensagens: 7
Ajuda num Display 20x4 caracteres estranhos
« em: 21 de Março de 2015, 10:33 »
Bom dia, este e o meu primeiro topico no forum. Sou um estudante de 17 anos que esta a tirar o curso de eletronica e neste momento estou a fazer um pequeno projeto com um Leitor RFID 125KHz (SEN11425P), um RTC Relogio tempo Real DS1307 e um 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:

#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());
 
}
« Última modificação: 21 de Março de 2015, 11:20 por NunoAzevedo »

StarRider

  • Visitante
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #1 em: 21 de Março de 2015, 10:56 »
Ajudar até podia ... mas não vou !

Este seu tópico é um exemplo acabado do que NÃO DEVE SER FEITO !
- Falta a educação para primeiro fazer a sua apresentação
- Este forum não é uma "oficina de reparações", não deve despejar para aqui
código e esperar que façam o trabalho por si.

Pela parte que me toca, tópicos de pessoas com esta atitude deviam ser sumáriamente
removidos !

É a tal coisa, arduino no seu melhor ... só serve para criar este tipo de situações, pessoas
mal educadas e preguiçosas !


...sim, acordei mal disposto  >:(
« Última modificação: 21 de Março de 2015, 11:00 por StarRider »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #2 em: 21 de Março de 2015, 12:41 »
Porque tal coisa não acontece com qualquer pessoa a usar qualquer micro quando agarra num display desses e numa biblioteca das internets.....

Que display é esse?
Certamente tem uma placa atrás para falar por serial.
Avr fanboy

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.189
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #3 em: 21 de Março de 2015, 12:51 »
Display 20x4 Green
Tenta mudar para um Display 20x4 Red, funcionam melhores, creio ser esse o problema  ::)

Offline NunoAzevedo

  • Mini Robot
  • *
  • Mensagens: 7
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #4 em: 21 de Março de 2015, 13:20 »
Porque tal coisa não acontece com qualquer pessoa a usar qualquer micro quando agarra num display desses e numa biblioteca das internets.....

Que display é esse?
Certamente tem uma placa atrás para falar por serial.
O display e este http://www.robot-electronics.co.uk/htm/Lcd05tech.htm

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #5 em: 21 de Março de 2015, 13:24 »
Changing display type
Because there are four variations of the LCD display that the LCD05 connects to a software command can be used to switch between them.
Firstly a command of 24 must be issued, this is then followed by the display type attached:
Avr fanboy

Offline NunoAzevedo

  • Mini Robot
  • *
  • Mensagens: 7
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #6 em: 21 de Março de 2015, 13:35 »
Tenho de mudar o tipo do display no setup?

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #7 em: 21 de Março de 2015, 17:36 »
tenho um desses, mas uso o picaxe para o seu controlo, o código é diferente

Offline NunoAzevedo

  • Mini Robot
  • *
  • Mensagens: 7
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #8 em: 21 de Março de 2015, 17:45 »
O problema e que apos alguns segundos ele começa a escrever letras ao acaso e tenho de fazer reset no arduino para voltar ao normal

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #9 em: 21 de Março de 2015, 19:09 »
O problema e que apos alguns segundos ele começa a escrever letras ao acaso e tenho de fazer reset no arduino para voltar ao normal

pode ser falat de corrente e ele começa a atrofiar, tens as resistências na comunicação i2c?

Offline NunoAzevedo

  • Mini Robot
  • *
  • Mensagens: 7
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #10 em: 21 de Março de 2015, 19:20 »
estou a usar comunicação serial e nao i2c

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #11 em: 21 de Março de 2015, 19:36 »
estou a usar comunicação serial e nao i2c

ah ok, eu na altura que andava a começar a tentar usar o lcd tambem me aparecia esses caracteres estranhos, mas era devido aos comandos que enviava para la

Offline NunoAzevedo

  • Mini Robot
  • *
  • Mensagens: 7
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #12 em: 21 de Março de 2015, 19:44 »
mudei algumas coisas no codigo como podes ver
e aqui esta um video do funcionamento https://www.youtube.com/watch?v=LOEH346Uq8w&feature=youtu.be


#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");
}

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #13 em: 21 de Março de 2015, 20:06 »
não seio como funciona o arduino, ve se não estas a escrever varias vezes por cima do que tens, ou tenta dar uma pausa entre cada escrita/ leitura na comunicação i2c para testar isso tipo 10ms

Offline NunoAzevedo

  • Mini Robot
  • *
  • Mensagens: 7
Re: Ajuda num Display 20x4 caracteres estranhos
« Responder #14 em: 21 de Março de 2015, 20:26 »
Vou testar