collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 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: LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL  (Lida 13010 vezes)

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

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL
« em: 12 de Julho de 2009, 17:06 »
Bem, pessoal.. A pedido de várias famílias, e com uns toques de outras tantas, venho cá postar um exemplo simples de como pôr o texto dos vossos lcds a rodar no ecrã:

Código Actualizado
Código: [Seleccione]
#include <MsTimer2.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
int i=16;
char teste[35] = "abcd";   // arrays de caracteres de tamanho máximo recomendável de 412 caracteres
char aux[35] = "";                             // de forma a que estes sejam impressos sem qualquer tipo de problema

void escreve() {
  lcd.clear();
  if(i==0){
    if (teste!=aux){
      for(int a=0; a<sizeof(teste); a++){
        aux[a] = teste[a];
      }
    }
  }
  if(i<0){
    for(int a=0; a<sizeof(aux); a++){
      aux[a] = aux[a+1];  
    }
    lcd.setCursor(0,0);
    lcd.print(aux);
    if(aux[0]=='\0'){
      i=16;
    }
  }
  else{
    lcd.setCursor(i,0);
    lcd.print(teste);
    i--;
  }
}
void setup() {
  analogWrite(6,80);  // isto serve para quem tem o pino 6 do arduino ligado ao pino que regula o contraste do lcd
  MsTimer2::set(250, escreve);  // 250 é o tempo em ms.. se quiserem ter o texto a rodar mais depressa diminuam o tempo, se quiserem mais devagar aumentem..
  MsTimer2::start();
}

void loop() {
}

com isto, e sem nenhum outro recurso a hardware podem pôr arrays de 412 caracteres a passar no vosso lcd.. (isto numa linha, conforme o exemplo, se quiserem nas duas terão que dividir o valor).
se os vossos projectos forem mais exigentes a nível de caracteres, podem sempre pensar em aplicar o tutorial do tr3s, que vos ensina a interagir entre arduino e eeproms, que podem encontrar aqui.

alguma sugestão correcção será bem vinda..
(bem como os vossos videos, já que eu n tenho como postar aqui um)

ps: ainda faço referência à possibilidade de, para quem isso interessar, poder controlar o shift do lcd, que permite fazer o scroll do texto que está no lcd. este tem a capacidade para 80 caracteres, como diz o datasheet. para fazer uso deste shift: lcd.command(24);

pss: agradeço também a disponibilidade do metRo_ e do Tr3s que me deram umas dicas sobre isto.. ;)
« Última modificação: 12 de Julho de 2009, 21:57 por ricardo-reis »

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re:LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL
« Responder #1 em: 12 de Julho de 2009, 18:19 »
agora só falta um videoxito :)
Mas parece bem.

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Re:LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL
« Responder #2 em: 12 de Julho de 2009, 18:20 »
na libraria LCD4bit, já existem funções pré definidas para o scroll de texto :P

mas por acaso também gosto mais da Liquid Crystal, acho-a mais "madura"

na cpp da LCD4bit está este código:
Código: [Seleccione]
#define CMD_LEFT 0x18

void LCD4Bit::leftScroll(int num_chars, int delay_time){
  for (int i=0; i<num_chars; i++) {
    commandWrite(CMD_LEFT);
    delay(delay_time);
  }
}

parece-me remeter para o tal shift interno do lcd

tenho que experimentar esse teu código. Isto era giro era com um ecrã 20x4  8)
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
« Última modificação: 12 de Julho de 2009, 18:57 por little resources »

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL
« Responder #5 em: 12 de Julho de 2009, 19:08 »
e já agora, como se faz para o texto ir da esquerda para a direita??

em vez de começar na posição 16 deve passar a começar da posição 0 ou -1, em vez de decrementares o i, incrementas, em vez de apagar a primeira posição do array aux passas a apagar a ultima.. assim de repente é só..

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re:LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL
« Responder #6 em: 12 de Julho de 2009, 19:23 »
e já agora, como se faz para o texto ir da esquerda para a direita??

em vez de começar na posição 16 deve passar a começar da posição 0 ou -1, em vez de decrementares o i, incrementas, em vez de apagar a primeira posição do array aux passas a apagar a ultima.. assim de repente é só..

ahh ok ok, eu procurei algo no código, mas não pensei que fosse isso, até puz 1250, em vez de 250 :P


se a lguem comprar uns daqueles LCD's de 4X20 char, peça mais um pra mim se faz favor :)

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL
« Responder #7 em: 12 de Julho de 2009, 19:27 »
como eu digo no comentário ao 250, alterar aquele valor só altera o tempo de rotação do texto.. um valor mais baixo e o texto anda mais depressa, um valor mais alto e o texto anda mais devagar..

Offline tcustodio

  • Mini Robot
  • *
  • Mensagens: 344
  • "beware of programmers who carry a soldering iron"
    • Youtube
Re:LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL
« Responder #8 em: 12 de Julho de 2009, 19:52 »
se a lguem comprar uns daqueles LCD's de 4X20 char, peça mais um pra mim se faz favor :)

se eu comprar, aviso-te  8)
Tiago Custódio,
- Não me dêem álcool se estiver um piano por perto.

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re:LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL
« Responder #9 em: 12 de Julho de 2009, 21:23 »
ok obrigado :)


tenho uma questão, não me lembro onde, mas vi esse código já noutro local...

mas só tinha 6 fios ligados ao arduino... como? porque? era o mesmo LCD...

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL
« Responder #10 em: 12 de Julho de 2009, 21:46 »
este código n deves ter visto (pk é meu e só o postei aqui), mas se viste, podes dizer onde e quando..


quanto aos 6 fios, é mt simples.. eu tenho 8, dos quais posso tirar um, que é o do contraste e ligá-lo a vcc com uma resistencia ou potenciometro, e o 11 (se n tou em erro) que podes ligar a gnd (confirma no outro topico)..

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re:LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL
« Responder #11 em: 12 de Julho de 2009, 21:49 »
está aí
http://arduino.cc/en/Tutorial/LiquidCrystalScroll

mas agora que olhei com olhos de ver, reparei que é diferente...

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL
« Responder #12 em: 12 de Julho de 2009, 21:51 »
pessoal, quem está a usar o código aqui postado, passem a usar esta versão que apresento neste post.

só acrescentei uma linha, mas que permite ao lcd limpar a ram. reparei que ele passado algum tempo se começava a baralhar e a imprimir coisas fora do sítio.

Código: [Seleccione]
#include <MsTimer2.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
int i=16;
char teste[35] = "abcd";   // arrays de caracteres de tamanho máximo recomendável de 412 caracteres
char aux[35] = "";                             // de forma a que estes sejam impressos sem qualquer tipo de problema

void escreve() {
  lcd.clear();
  if(i==0){
    if (teste!=aux){
      for(int a=0; a<sizeof(teste); a++){
        aux[a] = teste[a];
      }
    }
  }
  if(i<0){
    for(int a=0; a<sizeof(aux); a++){
      aux[a] = aux[a+1];  
    }
    lcd.setCursor(0,0);
    lcd.print(aux);
    if(aux[0]=='\0'){
      lcd.print("                ");
      i=16;
    }
  }
  else{
    lcd.setCursor(i,0);
    lcd.print(teste);
    i--;
  }
}
void setup() {
  analogWrite(6,80);  // isto serve para quem tem o pino 6 do arduino ligado ao pino que regula o contraste do lcd
  MsTimer2::set(250, escreve);  // 250 é o tempo em ms.. se quiserem ter o texto a rodar mais depressa diminuam o tempo, se quiserem mais devagar aumentem..
  MsTimer2::start();
}

void loop() {
}

Offline ricardo-reis

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.338
Re:LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL
« Responder #13 em: 12 de Julho de 2009, 21:54 »
está aí
http://arduino.cc/en/Tutorial/LiquidCrystalScroll

mas agora que olhei com olhos de ver, reparei que é diferente...

ok.. fui lá ver o código e explico-te por alto as diferenças essenciais:

no que eu apresentei, é usada a mstimer2, que vos permite que o programa continue a executar sem parar..
no que está nesse link, são usados os delays, que páram a execução de código, pelo tempo do delay, não permitindo que seja executado mais nada.

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re:LCD YM1602C 16x2 (Compatível HD44780) TEXT SCROLL
« Responder #14 em: 12 de Julho de 2009, 22:02 »
ahh ok :)

então este em 100 vezes melhor!!

mas não podia fazer mesmo mais nada nada nada?