Pages: [1]   Go Down
Author Topic: ++OPGELOST ++ Scroll text met PCF8574A I2C  (Read 2501 times)
0 Members and 1 Guest are viewing this topic.
Netherlands
Offline Offline
Newbie
*
Karma: 1
Posts: 49
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Allen,

Ik probeer hem eens op het NL-Forum,

Ik ben bezig met een I2c schakeling , wat nu werkt,
De LCD gekoppeld aan een PCF8574A ,
Nu heb ik in ROW 1 een scrollende text , dit werkt goed.
Maar wil een vaste text in ROW 2  , dit werkt dus niet , deze scrollt namelijk ook mee wat dus niet de bedoeling is.

Dit is mijn setup:




En dit is mijn Sketch:


Code:
/*
  Scroll
  * this sketch scrolls text left when tilted
  * text scrolls right when not tilted.
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// initialize the library with the numbers of the interface pins

const int numRows = 2;
const int numCols = 16;



const char textString[] = "                  * ArduinoPat *      ";
const int textLen = sizeof(textString) -1; // the number of characters

LiquidCrystal_I2C lcd(0x38,16,2);

void setup()
{
   lcd.init();
   lcd.backlight();
  // set up the LCD's number of columns and rows:
  
  lcd.print(textString);
}

void loop()
{
  {
    // here if tilted left so scroll text left
  
    for (int position = 0; position  < textLen; position++)
    {
      lcd.scrollDisplayLeft();
      delay(150);
    }
  }
 
  {
    // here if previously tilted but now flat, so scroll text right
    
    for (int position = 0; position  < textLen; position++)
    {
      lcd.scrollDisplayRight();
      delay(150);
    }
  }
}
      
    


Ik hoop dat iemand mij hiermee op weg kan helpen,

Alvast bedankt,

ArduinoPat
« Last Edit: December 16, 2012, 12:54:33 pm by ArduinoPat » Logged

Patrick ,The Netherlands

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 211
Posts: 13471
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


simpelste manier is om zelf de geshifte tekst naar regel 1 te schrijven
maak een array van char waar de tekst in staat ,

shift deze en schrijf hem geheel weg naar regel 1.
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Forum Moderator
Hamme, Belgium
Offline Offline
Sr. Member
*****
Karma: 4
Posts: 386
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

een andere oplossing is beide regels constant opnieuw te schrijven en bij de onderste de positie niet te veranderen.

Code:
lcd.setCursor(0,0); // set first line on the LCD
lcd.print( "scrollende tekst");
lcd.setCursor(0,1); // set second line on the LCD
lcd.print( "vaste tekst");

besef wel goed, dat met je delay's om te scrollen, je niets anders kan gaan doen naast het tonen van tekst op je LCD scherm, zolang de tekst aan het scrollen is. kijk eens naar blink without delay.
Logged


Netherlands
Offline Offline
Newbie
*
Karma: 1
Posts: 49
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Beste JO3RI,

Dit gaat helaas niet op , beide teksten scrollen ook met deze code ??
Ik heb al van alles geprobeerd, maar ben er nog niet uit  smiley-mad

Code:
/*
  Scroll
  * this sketch scrolls text left when tilted
  * text scrolls right when not tilted.
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// initialize the library with the numbers of the interface pins

const int numRows = 2;
const int numCols = 16;



const char textString[] = "                  * ArduinoPat *      ";
const int textLen = sizeof(textString) -1; // the number of characters

LiquidCrystal_I2C lcd(0x27,16,2);

void setup()
{
   lcd.init();
   lcd.backlight();
  // set up the LCD's number of columns and rows:
  lcd.setCursor(0, 1);
  lcd.print(textString);
 
  lcd.setCursor(0, 0);
  lcd.print("Vaste Tekst");
}

void loop()
{
  {
    // here if tilted left so scroll text left
   
    for (int position = 0; position  < textLen; position++)
    {
     
      lcd.scrollDisplayLeft();
      delay(150);
    }
  }
 
  {
    // here if previously tilted but now flat, so scroll text right
   
    for (int position = 0; position  < textLen; position++)
    {
     
      lcd.scrollDisplayRight();
      delay(150);
    }
  }
}
     
   

Misschien iemnand nog een optie ??
Logged

Patrick ,The Netherlands

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 211
Posts: 13471
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

vrijwel altijd zitten de 2 regels in een lineair/ sequentieel geheugen, en is de scroll geimplementeerd als schuiven in het geheugen. En dan schuift alles ..

probeer dit eens.
Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int numRows = 2;
const int numCols = 16;

const char textString[] = "                  * ArduinoPat *        ";
const int textLen = sizeof(textString) -1; // the number of characters

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Vaste Tekst");
}

void loop()
{
    for (int position = 0; position  < textLen; position++)
    {
      lcd.setCursor(0,1);  // of moet dit zijn 1,0?
      lcd.print(textString[position])
      delay(150);
    }
    for (int position = textLen; position  >0; position--)
    {
      lcd.setCursor(0,1);
      lcd.print(textString[position])
      delay(150);
    }
}
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Netherlands
Offline Offline
Newbie
*
Karma: 1
Posts: 49
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Goedenavond Rob,

Helaas gaat dit ook niet lukken  smiley-mad
Nu laat die de vaste tekst staan op rij 1 , en zie ik in rij 2 nu in het eerste blok steeds 1 letter weergeven ( van mijn scrolltext )


Ik denk wat ik wil niet gaat lukken ,

Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int numRows = 2;
const int numCols = 16;

const char textString[] = "                  * ArduinoPat *        ";
const int textLen = sizeof(textString) -1; // the number of characters

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Vaste Tekst");
}

void loop()
{
    for (int position = 0; position  < textLen; position++)
    {
      lcd.setCursor(0,1);  // of moet dit zijn 1,0?
      lcd.print(textString[position]);
      delay(150);
    }
    for (int position = textLen; position  >0; position--)
    {
      lcd.setCursor(0,1);
      lcd.print(textString[position]);
      delay(150);
    }
}


Maar voor als nog hartelijk dank voor jou input !!
Logged

Patrick ,The Netherlands

Forum Moderator
Hamme, Belgium
Offline Offline
Sr. Member
*****
Karma: 4
Posts: 386
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ik bedoelde dat je de cursor positie kan wijzigen en dus niet gebruikt maakt van de scroll functie die in de library zit.
Code:
for (int i = -16; i < 32; i++)
{
  lcd.setCursor(i,0); // set first line on the LCD
  lcd.print( "scrollende tekst");
  lcd.setCursor(0,1); // set second line on the LCD
  lcd.print( "vaste tekst");
  delay (150);
}

Een andere mogelijkheid is om inderdaad een buffer te gebruiken, maar dan heb je er wel 2 nodig: eentje voor lijn 1 en eentje voor lijn 2. Die moeten dan beiden 17 bytes groot zijn. Je kopieert dan telkens de tekst naar een andere plaats in de buffer en toont telkens bufffer1 op lijn 1 en buffer2 op lijn2.
Logged


Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 211
Posts: 13471
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


2e poging
Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const int numRows = 2;
const int numCols = 16;

const char textString[] = "                  * ArduinoPat *        ";
const int textLen = sizeof(textString) -1; // the number of characters

LiquidCrystal_I2C lcd(0x27, numCols, numRows );

void setup()
{
  lcd.init();
  lcd.backlight();

  // vaste text
  lcd.setCursor(0,1);
  lcd.print("vaste text");
}

void loop()
{
  // scroll text
  for (int position = 0; position  < textLen; position++)
  {
    lcd.setCursor(0, 0);
    lcd.print(&textString[position])       // was het & (adress) vergeten
    delay(100);
  }
  for (int position = textLen; position  >0; position--)
  {
    lcd.setCursor(0,0);
    lcd.print(&textString[position]);
    delay(100);
  }
}
probeer eens
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Netherlands
Offline Offline
Newbie
*
Karma: 1
Posts: 49
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hoi Rob,

Helemaal super , dit blijkt te werken !!!   smiley-grin

Many thanks ,

Sorry voor late reply ,

Fijne dagen toegewenst en een prettige jaarwisseling voor 2013

Groet,

Patrick, ArduinoPat, Maarssen
Logged

Patrick ,The Netherlands

Global Moderator
Netherlands
Offline Offline
Shannon Member
*****
Karma: 211
Posts: 13471
In theory there is no difference between theory and practice, however in practice there are many...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Goed om te horen dat het werkt,

net op tijd om een automatische Arduino nieuwjaars afteller te maken smiley-wink

Zoeen met een timer die terugloopt, nog 255 uur... 254 uur ... nog 5 4 3 2 1 Happy Newyear "
Logged

Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Pages: [1]   Go Up
Jump to: