Pages: 1 [2]   Go Down
Author Topic: Problems with I2C 2004 display  (Read 290 times)
0 Members and 1 Guest are viewing this topic.
Dallas, TX USA
Offline Offline
Faraday Member
**
Karma: 63
Posts: 2649
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Did you move the entire folder "LiquidCrystal" contained within the .zip or just one of the files within? The entire folder should be moved.

Also, try removing or renaming any other LCD libraries you have installed. Both in you sketchbook/Libraries and in Program Files (x86)/Arduino/Libraries. Just drag the whole folder of the old one out onto the desktop temporarily or something.

It's possible the one you installed may be conflicting with the one that comes with the IDE. I may have had to do that with my project but I don't remember.

I used the auto install feature within arduino ide 1.0.5 according to the arduino website guide - and the library is called LiquidCrystal_I2C, which shouldn't interfere with the other, as it is named otherwise (According to my understanding)

The error of missing "POSITIVE" is indicating that the wrong library is being used,
which is due to the either the wrong library installed, or fm's LiquidCrystal library being installed incorrectly.

So I'm with snowman in that I would bet cash money, and lots of it, that there is a library
installation issue.


fm's LiquidCrystal library is not called LiquidCrystal_I2C
It is called LiquidCrystal
If LiquidCrystal_I2C was the name of the zip/library you installed,
you have installed the incorrect library.
The latest zip of  fm's LiquidCrystal library is LiquidCrystal_V2.1.1.zip

If you installed the LiquidCrystal_I2C library
in order to use fm's LiquidCrystal library you will have to fully uninstall LiquidCrystal_I2C

The issue is that fm's LiquidCrystal library is replacement for the standard LiquidCrystal
library and there can be header file collisions with other libraries.
Essentially, fm's LiquidCrystal library can be thought of as multiple libraries bundled together in one library.
In reality it is one library but can support many different interfaces by using different constructors.
Because of this it can be a bit confusing because the constructor names don't always match
up with the library name.
For example  in this case, the library name is LiquidCrystal but the constructor
name is LiquidCrystal_I2C

The zip image that fm created really isn't quite correct for using the IDE to install it.
I'd recommend installing manually.
You can install it in your home sketchbook/libraries directory instead of replacing
the LiquidCrystal library that came with the IDE
but you have to make sure it is named "LiquidCrystal" and that there is no other
LiquidCrystal IC2 library installed.

BulldogLowell's advice on the constructor is wrong for fm's LiquidCrystal library.
The constructor he provided was for the LiquidCrystal_I2C library which works differently.

So while both fm's LiquidCrystal library and the LiquidCrystal_I2C library both have a constructor
called LiquidCrystal_I2C, that is used to initialize the library for a PCF8574 based LCD backpack,
they are different libraries and use very different parameters in the constructors.

fm's LiquidCrystal library works with any backpack so it requires that you tell it how the PCF8547 is wired to the LCD.
LiquidCrystal_I2C library only supports a particular wiring so it does not need to now how it is wired up
but it may not work with your backpack.

The examples on Terry's yourduino.com site, referenced above are for fm's LiquidCrystal library not
the LiquidCrystal_I2C library.

You can only have one of these libraries installed at a time other wise, strange things can happen
since they collide with each other and the IDE can pick the wrong one or potentially even pick and choose different ones
at different points of time during the build process.
Which is why you see the POSITIVE error message.

--- bill
« Last Edit: June 29, 2014, 02:53:10 pm by bperrybap » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allright.
So, how would i go about uninstalling librarys? Simply just moving them, and/or renaming them - then start/re-start the arduino ide?
And should i remove every library containing the words liquid*?
And now you really must be patient with me. I've searched my computer for a folder called sketchbook without any luck. Can i get some clarification?

Also, i am not able to google search the v2.1.1 library - is it called any different perhaps?
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 50
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

If you go to File -> Preferences in your Arduino IDE, right at the top, it will show you the location of your sketchbook folder.

As for uninstalling libraries, for this case at least, I would move any folder with the word "Liquid", "crystal" or "LCD" in it's name completely out of your libraries folder. From both library locations.

Then follow the directions I posted above.
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

If you go to File -> Preferences in your Arduino IDE, right at the top, it will show you the location of your sketchbook folder.

As for uninstalling libraries, for this case at least, I would move any folder with the word "Liquid", "crystal" or "LCD" in it's name completely out of your libraries folder. From both library locations.

Then follow the directions I posted above.

This made a lot of sense.
Nothing left with LCD, liquid or crystal remaining in either folder smiley

Ran a i2c scanner in the meantime;
"Scanning...
I2C device found at address 0x27  !
done"

So it's there allright
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I'm up and running with the library from Snowman815901 - i'm quite pleased smiley

You all been a great help! And this isnt the last you heard from me, because now i'll venture in to serial communications with an engine management, and how to get it to display on the arduino LCD smiley-grin

Thank you very much everybody

Code:
/* YourDuino.com Example Software Sketch
 20 character 4 line I2C Display
 Backpack Interface labelled "LCM1602 IIC  A0 A1 A2"
 terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include <Wire.h>  // Comes with Arduino IDE
// Get the LCD I2C Library here:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
// Move any other LCD libraries to another folder or delete them
// See Library "Docs" folder for possible commands etc.
#include <LiquidCrystal_I2C.h>

/*-----( Declare Constants )-----*/
//none
/*-----( Declare objects )-----*/
// set the LCD address to 0x20 for a 20 chars 4 line display
// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address


/*-----( Declare Variables )-----*/
//none

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600);  // Used to type in characters

  lcd.begin(20,4);         // initialize the lcd for 20 chars 4 lines and turn on backlight

// ------- Quick 3 blinks of backlight  -------------
  for(int i = 0; i< 3; i++)
  {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight(); // finish with backlight on 
 
//-------- Write characters on the display ----------------
// NOTE: Cursor Position: CHAR, LINE) start at 0 
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("     RSMTUNING      ");
  delay(1000);
  lcd.setCursor(0,1);
  lcd.print("   Megasquirt 1   ");
  delay(500); 
  lcd.setCursor(0,2);
  lcd.print("   Race-display     ");
  lcd.setCursor(0,3);
  delay(500);   
  lcd.print("  Under udvikling  ");
  delay(1000);
  lcd.clear();
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("   RPM: 1000");
  delay(250);
  lcd.setCursor(0,1);
  lcd.print("   MAP: 127 kpa");
  delay(250); 
  lcd.setCursor(0,2);
  lcd.print("   AFR: 12.5");
  lcd.setCursor(0,3);
  delay(250);   
  lcd.print("  Temp: 88");
  delay(8000);



// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
//  lcd.setCursor(0,0); //Start at character 0 on line 0
//  lcd.print("Start Serial Monitor");
//  lcd.setCursor(0,1);
//  lcd.print("Type chars 2 display");   


}/*--(end setup )---*/


void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  {
    // when characters arrive over the serial port...
    if (Serial.available()) {
      // wait a bit for the entire message to arrive
      delay(100);
      // clear the screen
      lcd.clear();
      // read all the available characters
      while (Serial.available() > 0) {
        // display each character to the LCD
        lcd.write(Serial.read());
      }
    }
  }

}/* --(end main loop )-- */


/* ( THE END ) */
Logged

Dallas, TX USA
Offline Offline
Faraday Member
**
Karma: 63
Posts: 2649
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

You don't have to move/remove the original LiquidCrystal library that came with the IDE.
Libraries in your user sketchbook area override libraries that came with the IDE as long
as the names of the directories are the same.
So if you name the directory "LiquidCrystal" when you installed fm's LiquidCrystal library
it would override the LiquidCrystal library that same with the IDE.

As a small note:
For the time being, the IDE rejects library directory names that have a dot/period in them
So if you rename a library from foo to foo.sav then the library will not be used.
The only drawback is that you will see a warning when the IDE starts up.
Sometimes this is useful in certain situations or for testing as you can simply rename the directory
and restart the IDE to get the IDE to ignore a library.

So for example, if left the original LiquidCrystal library in place and installed fm's library down in
your sketchbook directory, it would override the IDE LiquidCrystal library if you named it LiquidCrystal.
If at some point you wanted to use the original LiquidCrystal again, if you renamed fm's library directory
to LiquidCrystal.sav then it would be ignored and you would use the original IDE library.
However when the IDE starts it will give you a warning that it is ignoring that library.

--- bill
Logged

Pages: 1 [2]   Go Up
Jump to: