Sari la conținut
ELFORUM - Forumul electronistilor

Arduino_LCD text scroll


Vizitator

Postări Recomandate

Salut.

Am o mica problema, ca incepator in programare arduino ( si voi ramane mereu pt ca, tot timpul apare ceva nou),

si anume cum fac ca un text sa ruleze doar pe linia care o doresc.

La un afisaj 16x2 este ok, dar la unul 20x4 apare textul si pe linia a 2a (din 0-3linii) asa cum se vede in poza.

 

Acesta este codul:

 

#include <LiquidCrystal.h>
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(20, 4);
  lcd.clear(); 
}
 
void loop() {
  lcd.setCursor(0, 0); 
  lcd.print("elforum arduino scroll text LCD 20X4");
  for (int positionCounter = 9; positionCounter < 30; positionCounter++) {
    // scroll one position left:
    lcd.scrollDisplayLeft();
    // wait a bit:
    delay(150);
  }
  lcd.setCursor(0,1);
  lcd.print("0123456789");
  lcd.setCursor(0,2);
  lcd.print("abcdefghij");
  lcd.setCursor(0,3);
  lcd.print(" ^_^ ");
  delay(2000);
  lcd.clear();
  }

 

Link spre comentariu
  • Răspunsuri 10
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • spark

    2

  • nico_2010

    1

  • loleksibolek

    1

  • core

    1

Top autori în acest subiect

Am reusit folosindu-ma de acest exemplu:

 

//written for the public domain by RajDarge.
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#define LCD_COL 20 //LCD is 20x4
#define LCD_ROWS 4

LiquidCrystal_I2C lcd(0x27,LCD_COL,LCD_ROWS);
const char * scrollText = "Your welcome Fruitloop ";

void setup() 
  {
    // setup the LCD panel 20x4 here.
    Serial.begin(250000); 
    lcd.init();
    lcd.setCursor(0,0);
    lcd.backlight();
    lcd.print("  Non Scrolling Text");
  }

void loop() 
  {


    LCD_Juumpy_scroll(scrollText, LCD_COL, 1); //just keep calling the function
    delay(60); //make text readable

  }
// ****** - ******
// Function to scroll text
// INPUT: Txt2Scroll ----- const char string to scroll
// INPUT: LCD_col ----- number of columns
// INPUT: t_Row ----- which row to scroll

void LCD_Juumpy_scroll(const char*  Txt2Scroll, int LCD_col, int t_Row)
{
  static int charIndex = 0 ; //AVOIDING A GLOBAL 
  int txtLen =  strlen(Txt2Scroll);// get the length of the text
  char chrBuffer[LCD_col+1];//width of the sceen 
  for (int x = 0; x < LCD_col; ++x) //do characters till the end
    chrBuffer[x]=char(32); //initialize chrBuffer
  chrBuffer[LCD_col]=char(0); // put a zero at theend
  if ((charIndex + LCD_col +1 ) > txtLen) //loop to end of cols 
    {
      int x = 0; //use x for both loops must be outside for loop 
      for( ; x < (txtLen-charIndex);x++) //if off end get till the end. 
      {
        chrBuffer[x] = Txt2Scroll[charIndex + x]; //grab characters form Txt2scroll from the end
      }
       int currx = x; //memorise the counter for the chrBuffer 
      for( ; x < LCD_col; x++) //continue using the x for a counter
      {
        chrBuffer[x] = Txt2Scroll[x-currx]; //Grab the text from the beginning and attach. 
      }
      if (charIndex == txtLen)
        charIndex = 0; //reset counter
    }
  else 
  {
    int x = 0;
      for( ; x < LCD_col; x++)
    { // buffer containes string of LCD_col
      chrBuffer[x]= Txt2Scroll[charIndex + x];
     }
  }

  charIndex++; //update charindex 
  chrBuffer[LCD_col]=char(0); 
  lcd.setCursor(0,t_Row); //move to row of cursor.
  lcd.print(chrBuffer); //print it :)
}

 

pe care il gasiti aici:

https://forum.arduino.cc/index.php?topic=360920.0

 

si rezultatul cu mici modificari:

https://www.youtube.com/watch?v=Nf1kRbXIvPk

Editat de Vizitator
Link spre comentariu

daca tot se vorbeste despre lcd-uri , o intrebare va rog

la un display lcd 20x4  (( are 20 pini ))_este un pin denumit ""metal frame"" la ce se foloseste care este rolul lui ??___multumiri cu anticipatie

Link spre comentariu

daca tot se vorbeste despre lcd-uri , o intrebare va rog

la un display lcd 20x4  (( are 20 pini ))_este un pin denumit ""metal frame"" la ce se foloseste care este rolul lui ??___multumiri cu anticipatie

Din cate stiu LCD-eurile 20x4 au doar 16 pini.

Cu 20 pini nici google nu a gasit decat la afisajele grafice LCD 128x64.

Poate ne dai mai multe detalii cum ar fi o poza, model,...

Metal frame este de fapt rama afisajului care este legata la masa, adica la GND.

 

Un alt exemplu de scroll textpe o singura linie:

 

#include<LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 
String txtsc,txtnosc;
void setup(){
  txtnosc="Text No Scroll";
  txtsc="Text Scrolling      ";
  lcd.begin(20, 4);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(txtnosc);
  lcd.setCursor(0, 2);
  lcd.print(txtnosc);
  lcd.setCursor(0, 3);
  lcd.print(txtnosc);
}
 
void loop(){
 
          lcd.setCursor(0, 1);
           txtsc=ScrollTxt(txtsc);
           lcd.print(txtsc);
           delay(300);
}
 
String ScrollTxt(String txt){
 return txt.substring(1,txt.length()) + txt.substring(0, 1);
 
}
Editat de Vizitator
Link spre comentariu

disply-ul se numeste DV 2041_Data Vision , este model nou ca inca nu are dattashet

[/url]">http://Posted Image

[/url]">http://Posted Image

[/url]">http://Posted Image

[/url]">http://http://postimg.org/image/oo5u2o5c5/'>Posted Image

banuiesc ca nu a fost facut pentru comert direct , cu toate ca se gaseste pe e-bay , polonia , rusia___are un consum de 30mA la 5,7v ( backlight ) _ iar cipul la 5v pe contrast tipic 0,7v

Link spre comentariu

Revin cu un nou cod : 

#include <LiquidCrystal.h>LiquidCrystal lcd(12, 11, 5, 4, 3, 2);char text1[] = ("01234567");char text2[] = ("89ABCDEF");void setup(){  lcd.begin(8, 2);}void loop(){  abcd();  }   void abcd() {  unsigned int i = 0, j = 0;  // set the cursor to (0, 0):  lcd.setCursor(0, 0);    while (text1[i] != '0')  {    lcd.print(text1[i]);     delay(350);        i++;   }    lcd.setCursor(0, 1);  while (text2[j] != '0')  {    lcd.print(text2[j]);          delay(350);        j++;   }  delay(1500);  for (int positionCounter = 0; positionCounter < 8; positionCounter++) {    // scroll one position left:    lcd.scrollDisplayLeft();    // wait a bit:    delay(250);  }  // clear screen for the next loop:  lcd.clear();}

... si cu o intrebare:

se poate ca sa nu utilizez de doua ori char text1[ ] si char text2[ ] , sa utilizez doar o singura data, de exemplu char text[ 2 ] = ("x", "y"); 

ps: stiu ca sunt sute de exemple pe net, dar poate este cuiva de folos si acest model in topicul Arduino_LCD text scroll .

Editat de Vizitator
Link spre comentariu
  • 1 lună mai târziu...
Vizitator Tanasoiu Mihai

ma poate ajuta cineva cu un cod pentru:1)daca valoarea senzorului de umiditate este mai mica decat 300 timp de 5 minute pe LCD va aparea mesajul “ESTE SECETA” si se aprinde ledul galben. 2)daca valoarea creste pana la 900 timp de 3 minute se aprinde ledul rosu cu intensitatea maxima cand ajunge la 900(minim 300) iar pe LCD se afiseaza valoarea umiditatii. 3) daca valoarea > 900 se aprinde ledul verde cu intensitatea minima la 900 si se afiseaza mesajul “ESTE UMIDITATE MARE”. :d :D :d

Link spre comentariu

 Acum eu sunt megaincepator in arduino dar fa si tu o schema,un inceput de program,descrie macar mai exact ce vrei.Probabil vrei sa masori umiditatea solului,se poate face mult mai simplu cu senzori de umiditate,chestia cu afisatul si aprinsul ledului cred ca e destul de simpla,am facut asa ceva cu ajutorul colegilor de forum pt temperatura.Daca te ajuta cu ceva un sistem de udare cu 4 senzori si 4 iesiri pentru pompe da un semn,il pot modifica in anumite limite permise de ceea ce stiu dar repet,descrie mai pe larg ce doresti.

 O zi buna.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări