Jump to content
ELFORUM - Forumul electronistilor
Sign in to follow this  
Guest

Arduino_LCD text scroll

Recommended Posts

Guest

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

 

Share this post


Link to post
Share on other sites

Guest

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

Edited by Guest

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Guest

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);
 
}
Edited by Guest

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Guest

In regula, dar ai masurat sa vezi daca ai continuitate intre pinul 18 - metal frame -  si rama diplay-ului?

Share this post


Link to post
Share on other sites
Guest

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 .

Edited by Guest

Share this post


Link to post
Share on other sites
Guest 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

Share this post


Link to post
Share on other sites

 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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines