Libraries are great places, and not yet illegal in the United States! If you ever need to learn how to do something, like say fix a motorcycle, you can go to your local library and take out a book. Sure you could buy the book but the library is nice because as a resource you can get the book whenever you need it, keeping your house uncluttered.

+

This tutorial has moved to [[http://​learn.adafruit.com/arduino-tips-tricks-and-techniques/arduino-libraries|http://learn.adafruit.com/arduino-tips-tricks-and-techniques/arduino-libraries]]

-

+

-

Software Libraries are very similar. We already studied what a procedure is, in [[http://​www.ladyada.net/learn/​arduino/​lesson3.html|lesson 3]]: a procedure is a list of things to do. A library is a big collection of procedures, where all the procedures are related! If you, say, want to control a motor, you may want to find a Motor Control Library: a collection of procedures that have already been written for you that you can use without having to do the dirty work of learning the nuances of motors.

+

-

+

-

For example, this is the Serial Library, which allows the Arduino to send data back to the computer:

+

-

+

-

{{http://​www.ladyada.net/​images/arduino/​serial%20library.gif}}

+

-

+

-

====== Using libraries ======

+

-

+

-

One of the best features of the Arduino project is the ability to add on pre-crafted libraries that add hardware support. There'​s tons of them, and you can pick and choose which to install. They'​re only loaded in when the sketch you're working on needs them, so for the most part you can download and stash them for future use.

+

-

+

-

Sketches will often **depend** on libraries, you can see what they are by looking at the top of the sketch. If you see something like <​code>#​include <​FatReader.h></​code>​ that means that you'll need a library called FatReader or a library that contains the file FatReader. If you dont have it installed you'll get an error:

+

-

+

-

{{http://​www.ladyada.net/​images/arduino/​fatreadernoliberror.gif}}

+

-

+

-

===== Whats in a library? =====

+

-

+

-

A library is a folder with some files in it, the files will end in **.cpp** (C++ code file) and **.h** (C++ header file).

+

-

+

-

{{http://www.ladyada.net/images/arduino/​nsslibrary.gif}}

+

-

+

-

There may also be some **.o** files. The **.o** files are C++ compiled Objects. If you end up working on the library and modifying it, be sure to delete the **.o** files as that will force the Arduino IDE to recompile the modified ​ **.cpp**'​s into fresh **.o**'​s

+

-

+

-

+

-

Two optional files you may see are **keywords.txt** (this is a hints file to tell the Arduino IDE how to colorize your sketch and **examples** folder, which may have some handy test-sketches. These will show up under the File->​Examples->Library dropdown

+

-

+

-

+

-

{{http://​www.ladyada.net/​images/​arduino/​examplelibdropdown.gif}}

+

-

+

-

==== Its important to remember! ====

+

-

+

-

The structure of the library folder is very important! The **.c** ​and **.h** files must be in the '​lowest level' of folders. For example, you cant have **Arduino/​libraries/​WaveHC/​WaveHC/​file.c** or **Arduino/​libraries/​MyLibraries/​WaveHC/​file.c** ​- it must be **Arduino/libraries/​WaveHC/​file.c**

+

-

+

-

===== How to install libraries =====

+

-

+

-

In Arduino v16 and earlier, libraries were stored in the **ArduinoInstallDirectory/​hardware/​libraries** folder, which also contained all the built-in libraries ​(like Wire and Serial).

+

-

+

-

In v17 and up, the user libraries are now stored in the **ArduinoSketchDirectory/​libraries** folder. You may need to make the **libraries** sub-folder the first time. However, the good thing about this is you wont have to move & reinstall your libraries every time you upgrade the software.