Nontrivial compiling issues

Hi, I am a first time Arduino user but a professional software developer.

I downloaded a library from:

http://playground.arduino.cc/Code/LCD12864

The files are now placed in:

C:\Users\Al\Documents\Arduino\libraries\LCD12864

I have a very basic code so far just to see that the library import and linking works:

#include "LCD12864.h" 

void setup()
{
  LCDA.Initialise();
  Serial.begin(9600);
}

void loop()
{
  Serial.println("HELLO");
}

but that is already giving me the following issues and I have no idea where to start:

C:\Users\Al\Documents\Arduino\libraries\LCD12864\LCD12864.cpp: In member function 'void LCD12864::selectCS1()':
C:\Users\Al\Documents\Arduino\libraries\LCD12864\LCD12864.cpp:74: error: 'digitalWrite' was not declared in this scope
C:\Users\Al\Documents\Arduino\libraries\LCD12864\LCD12864.cpp: In member function 'void LCD12864::Initialise()':
C:\Users\Al\Documents\Arduino\libraries\LCD12864\LCD12864.cpp:82: error: 'B00000001' was not declared in this scope
C:\Users\Al\Documents\Arduino\libraries\LCD12864\LCD12864.cpp:83: error: 'B00000010' was not declared in this scope
C:\Users\Al\Documents\Arduino\libraries\LCD12864\LCD12864.cpp:84: error: 'B00000100' was not declared in this scope
C:\Users\Al\Documents\Arduino\libraries\LCD12864\LCD12864.cpp:85: error: 'B00001000' was not declared in this scope
C:\Users\Al\Documents\Arduino\libraries\LCD12864\LCD12864.cpp:86: error: 'B00010000' was not declared in this scope
C:\Users\Al\Documents\Arduino\libraries\LCD12864\LCD12864.cpp:87: error: 'B00100000' was not declared in this scope
C:\Users\Al\Documents\Arduino\libraries\LCD12864\LCD12864.cpp:88: error: 'B01000000' was not declared in this scope
C:\Users\Al\Documents\Arduino\libraries\LCD12864\LCD12864.cpp:89: error: 'B10000000' was not declared in this scope
C:\Users\Al\Documents\Arduino\libraries\LCD12864\LCD12864.cpp:92: error: 'OUTPUT' was not declared in this scope
C:\Users\Al\Documents\Arduino\libraries\LCD12864\LCD12864.cpp:92: error: 'pinMode' was not declared in this scope

Any ideas?
Thanks

You downloaded the library but where did you put it?
Also this "LCD12864.h" should be this <LCD12864.h> in the library is not in the same folder as the sketch.

Looks like an old library, pre-1.0.

You might be able to get away with a simple change in LCD12864.cpp.

Change "Wiring.h" to "Arduino.h".

Hi, I already tried that. It gave me tons of error instead. I can not run it right now but I will post the errors later.

Hi, what version of the IDE are you using, also look in the directory where the application file for the IDE resides and look to see if there is a LIBRARY folder there.
If so place the library in there, like you have in

C:\Users\Al\Documents\Arduino\libraries\LCD12864

That is where I place all my library files for vers 1.5 and have no problems.

C:\arduino-1.5\libraries

Hope it helps.

Tom..... :slight_smile:

Guys,
clearly if the library .cpp module is being found (and it is, since you see the compile errors),
it is not any sort of issue with where the library is placed.

It also isn't an issue of "" vs <> on the include file as that won't matter given the include search
path given to the compiler the IDE and the gcc rules for using/searching it.

James is correct about being a pre 1.x library, and
for this you can give a big Thank You to the Arduino team that
decided it was a good idea to intentionally
break the world of existing libraries (100% of 3rd party libraries)
when moving from the release candidate to the final 1.0 release.
They opted not to provide backward compatibility header files.

Unlike the title of the thread, the issues actually are quite trivially resolved.
The library is simply written before the 1.0 release changed things
and broke everything.

In your case, you need the Arduino.h include at the top of LCD12864.cpp
before the other includes and definitely not inside the C extern.
(I'm guessing you simply changed wiring.h to Arduino.h)
I have no idea how what they had even worked on pre 1.x

All that said, that library is fairly old and hasn't been maintained.
A big issue for you might be that it does not support the Print class
so you can't easily output any text.

If you want a full featured library for that display you should take
a look at this library:
http://code.google.com/p/u8glib/

--- bill

Bill thank you for the very detailed answer.

As you mentioned once I added #include "Arduino.h" at the top of LCD12864.cpp I was able to compile. (I am not home so I can not test the code on the Display yet).

I do not understand what you mean by it not supporting the Print class. You mean I can not use Serial.println anymore? or do you mean that the library I have chosen does not support printing ASCII on the display?

I will also check Google Code Archive - Long-term storage for Google Code Project Hosting..

The Serial object is unaffected by using the LCD12864 library.
The Serial object uses the the HardwareSerial class library.
HardwareSerial includes Stream which includes Print.
The Print class is what provides the services for all the print()/println() functions.
If a library does not support the Print class, then you will not be able to use the print()/println() functions.

The LCD12864 library class library creates a default object, LCDA
Since the LCD12864 library does not support the Print class,
the LCDA object will not be able to use the print()/println() functions.
The LCD12864 library contains a small set of graphic only routines.
You can see them in the LCD12864.h header file.

--- bill

Thanks again Bill, I looked over the library and saw that it actually did not do much.
I switched over to u8glib. Hopefully it will work better.