Mes Top 5 Ouvrages
Termes les plus recherchés
Recipes to Begin, Expand, and
Enhance Your Projects
Electronics/ Software Engineering/Robotics
Want to create devices that interact with the physical world? This
cookbook is perfect for anyone who wants to experiment with the
popular Arduino microcontroller and programming environment.
You'll find more than 200 tips and techniques for building a
variety of objects and prototypes such as toys, detectors, robots,
and interactive clothing that can sense and respond to touch,
sound, position, heat, and light.
You don't need experience with Arduino or programming to get
started. Updated for the Arduino 1.0 release, the recipes in this
second edition include practical examples and guidance to help
you begin, expand, and enhance your projects right away —
whether you're an artist, designer, hobbyist, student, or engineer.
■ Get up to speed quickly on the Arduino board and essential
■ Learn basic techniques for reading digital and analog signals
■ Use Arduino with a variety of popular input devices and
■ Drive visual displays, generate sound, and control several
types of motors
■ Interact with devices that use remote controls, including TVs
■ Learn techniques for handling time delays and time
■ Apply advanced coding and memory handling techniques
"Michael Margolis 's
comprehensive set of
recipes is a fine gift to the
your background or skill,
the Cookbook provides
solutions for that project
you 're wrestling with
today and fuel for
imagining what you '11
build tomorrow. I doubt
it will ever leave my
— Mikal Hart
Arduino Uno Advisory Team
Michael Margolis is a technologist in the field of real-time computing,
with expertise in developing hardware and software for interacting
with the environment. He has more than 30 years of experience at
senior levels with Sony, Microsoft, and Lucent/Bell Labs, and has written
libraries and core software included in the Arduino 1.0 distribution.
US$44.99 CAN $47.99
78 1 4 49 M 3 13876
5 4 4 9 9
Beijing • Cambridge • Farnham • Koln • Sebastopol • Tokyo
Arduino Cookbook, Second Edition
by Michael Margolis
Copyright © 2012 Michael Margolis, Nicholas Weldin. All rights reserved.
Printed in the United States of America.
Published by O'Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472.
O'Reilly books may be purchased for educational, business, or sales promotional use. Online editions
are also available for most titles (http://my.safaribooksonline.com). For more information, contact our
corporate/institutional sales department: (800) 998-9938 or email@example.com.
Editors: Shawn Wallace and Brian Jepson
Production Editor: Teresa Elsey
Proofreader: Kiel Van Horn
Indexer: Lucie Haskins
Cover Designer: Karen Mont gomery
Interior Designer: David Futato
Illustrator: Robert Romano
March 201 1 : First Edition.
December 2011: Second Edition.
Revision History for the Second Edition:
2011-12-09 First release
See http://oreilly.com/catalog/errata.csp?isbn=9781449313876 for release details.
Nutshell Handbook, the Nutshell Handbook logo, and the O'Reilly logo are registered trademarks of
O'Reilly Media, Inc. Arduino Cookbook, the image of a toy rabbit, and related trade dress are trademarks
of O'Reilly Media, Inc.
Many of the designations used by manufacturers and sellers to distinguish their products are claimed as
trademarks. Where those designations appear in this book, and O'Reilly Media, Inc., was aware of a
trademark claim, the designations have been printed in caps or initial caps.
While every precaution has been taken in the preparation of this book, the publisher and authors assume
no responsibility for errors or omissions, or for damages resulting from the use of the information con-
Table of Contents
1. Getting Started 1
1.1 Installing the Integrated Development Environment (IDE) 4
1.2 Setting Up the Arduino Board 8
1.3 Using the Integrated Development Environment (IDE) to Prepare
an Arduino Sketch 10
1.4 Uploading and Running the Blink Sketch 13
1.5 Creating and Saving a Sketch 14
1.6 Using Arduino 17
2. Making the Sketch Do Your Bidding 23
2.1 Structuring an Arduino Program 24
2.2 Using Simple Primitive Types (Variables) 25
2.3 Using Floating-Point Numbers 27
2.4 Working with Groups of Values 29
2.5 Using Arduino String Functionality 32
2.6 Using C Character Strings 37
2.7 Splitting Comma-Separated Text into Groups 38
2.8 Converting a Number to a String 41
2.9 Converting a String to a Number 43
2.10 Structuring Your Code into Functional Blocks 45
2.11 Returning More Than One Value from a Function 49
2.12 Taking Actions Based on Conditions 52
2.13 Repeating a Sequence of Statements 53
2.14 Repeating Statements with a Counter 55
2.15 Breaking Out of Loops 58
2.16 Taking a Variety of Actions Based on a Single Variable 59
2.17 Comparing Character and Numeric Values 61
2.18 Comparing Strings 63
2.19 Performing Logical Comparisons 64
2.20 Performing Bitwise Operations 65
2.21 Combining Operations and Assignment 68
3. Using Mathematical Operators 69
3.1 Adding, Subtracting, Multiplying, and Dividing 69
3.2 Incrementing and Decrementing Values 70
3.3 Finding the Remainder After Dividing Two Values 71
3.4 Determining the Absolute Value 72
3.5 Constraining a Number to a Range of Values 73
3.6 Finding the Minimum or Maximum of Some Values 74
3.7 Raising a Number to a Power 75
3.8 Taking the Square Root 76
3.9 Rounding Floating-Point Numbers Up and Down 76
3.10 Using Trigonometric Functions 77
3.11 Generating Random Numbers 78
3.12 Setting and Reading Bits 80
3.13 Shifting Bits 84
3.14 Extracting High and Low Bytes in an int or long 85
3.15 Forming an int or long from High and Low Bytes 87
4. Serial Communications 89
4. 1 Sending Debug Information from Arduino to Your Computer 94
4.2 Sending Formatted Text and Numeric Data from Arduino 97
4.3 Receiving Serial Data in Arduino 100
4.4 Sending Multiple Text Fields from Arduino in a Single Message 105
4.5 Receiving Multiple Text Fields in a Single Message in Arduino 111
4.6 Sending Binary Data from Arduino 114
4.7 Receiving Binary Data from Arduino on a Computer 118
4.8 Sending Binary Values from Processing to Arduino 120
4.9 Sending the Value of Multiple Arduino Pins 122
4. 10 How to Move the Mouse Cursor on a PC or Mac 125
4. 1 1 Controlling Google Earth Using Arduino 130
4. 12 Logging Arduino Data to a File on Your Computer 135
4. 13 Sending Data to Two Serial Devices at the Same Time 138
4. 14 Receiving Serial Data from Two Devices at the Same Time 141
4. 15 Setting Up Processing on Your Computer to Send
and Receive Serial Data 145
5. Simple Digital and Analog Input 1 47
5.1 Using a Switch 150
5.2 Using a Switch Without External Resistors 154
5.3 Reliably Detecting the Closing of a Switch 155
5.4 Determining How Long a Switch Is Pressed 158
iv | Table of Contents
5.5 Reading a Keypad 163
5.6 Reading Analog Values 166
5.7 Changing the Range of Values 168
5.8 Reading More Than Six Analog Inputs 170
5.9 Displaying Voltages Up to 5V 173
5.10 Responding to Changes in Voltage 176
5.11 Measuring Voltages More Than 5V (Voltage Dividers) 177
6. Getting Input from Sensors 181
6.1 Detecting Movement 183
6.2 Detecting Light 186
6.3 Detecting Motion (Integrating Passive Infrared Detectors) 187
6.4 Measuring Distance 189
6.5 Measuring Distance Accurately 193
6.6 Detecting Vibration 197
6.7 Detecting Sound 198
6.8 Measuring Temperature 202
6.9 Reading RFID Tags 206
6.10 Tracking Rotary Movement 208
6.11 Tracking the Movement of More Than One Rotary Encoder 211
6.12 Tracking Rotary Movement in a Busy Sketch 214
6.13 Using a Mouse 216
6.14 Getting Location from a GPS 220
6.15 Detecting Rotation Using a Gyroscope 225
6.16 Detecting Direction 230
6.17 Getting Input from a Game Control Pad (PlayStation) 235
6.18 Reading Acceleration 237
7. Visual Output 241
7.1 Connecting and Using LEDs 245
7.2 Adjusting the Brightness of an LED 248
7.3 Driving High-Power LEDs 249
7.4 Adjusting the Color of an LED 252
7.5 Sequencing Multiple LEDs: Creating a Bar Graph 255
7.6 Sequencing Multiple LEDs: Making a Chase Sequence (Knight
Rider) ' 258
7.7 Controlling an LED Matrix Using Multiplexing 259
7.8 Displaying Images on an LED Matrix 262
7.9 Controlling a Matrix of LEDs: Charlieplexing 265
7.10 Driving a 7-Segment LED Display 271
7.11 Driving Multidigit, 7-Segment LED Displays: Multiplexing 274
7. 12 Driving Multidigit, 7-Segment LED Displays Using MAX7221 Shift
Table of Contents | v
7. 13 Controlling an Array of LEDs by Using MAX72xx Shift Registers 279
7.14 Increasing the Number of Analog Outputs Using PWM Extender
Chips (TLC5940) 281
7. 15 Using an Analog Panel Meter as a Display 285
8. Physical Output 289
8.1 Controlling the Position of a Servo 292
8.2 Controlling One or Two Servos with a Potentiometer or Sensor 294
8.3 Controlling the Speed of Continuous Rotation Servos 296
8.4 Controlling Servos Using Computer Commands 298
8.5 Driving a Brushless Motor (Using a Hobby Speed Controller) 299
8.6 Controlling Solenoids and Relays 300
8.7 Making an Object Vibrate 302
8.8 Driving a Brushed Motor Using a Transistor 304
8.9 Controlling the Direction of a Brushed Motor with an H-Bridge 306
8.10 Controlling the Direction and Speed of a Brushed Motor with an
8.11 Using Sensors to Control the Direction and Speed of Brushed
Motors (L293 H-Bridge) ' 311
8.12 Driving a Bipolar Stepper Motor 317
8. 13 Driving a Bipolar Stepper Motor (Using the EasyDriver Board) 320
8.14 Driving a Unipolar Stepper Motor (ULN2003A) 323
9. Audio Output 327
9.1 Playing Tones 329
9.2 Playing a Simple Melody 331
9.3 Generating More Than One Simultaneous Tone 333
9.4 Generating Audio Tones and Fading an LED 335
9.5 Playing a WAV File 338
9.6 Controlling MIDI 341
9.7 Making an Audio Synthesizer 344
10. Remotely Controlling External Devices 347
10.1 Responding to an Infrared Remote Control 348
10.2 Decoding Infrared Remote Control Signals 350
10.3 Imitating Remote Control Signals 354
10.4 Controlling a Digital Camera 357
10.5 Controlling AC Devices by Hacking a Remote-Controlled Switch 359
11. Using Displays 363
11.1 Connecting and Using a Text LCD Display 364
11.2 Formatting Text 367
11.3 Turning the Cursor and Display On or Off 370
vi | Table of Contents
11.4 Scrolling Text 372
11.5 Displaying Special Symbols 375
11.6 Creating Custom Characters 377
11.7 Displaying Symbols Larger Than a Single Character 379
11.8 Displaying Pixels Smaller Than a Single Character 382
11.9 Connecting and Using a Graphical LCD Display 385
11.10 Creating Bitmaps for Use with a Graphical Display 389
11.11 Displaying Text on a TV 391
12. Using Time and Dates 397
12.1 Creating Delays 397
12.2 Using millis to Determine Duration 398
12.3 More Precisely Measuring the Duration of a Pulse 402
12.4 Using Arduino as a Clock 404
12.5 Creating an Alarm to Periodically Call a Function 412
12.6 Using a Real-Time Clock 415
13. Communicating Using I2C and SPI 421
13. 1 Controlling an RGB LED Using the BlinkM Module 425
13.2 Using the Wii Nunchuck Accelerometer 430
13.3 Interfacing to an External Real-Time Clock 435
13.4 Adding External EEPROM Memory 437
13.5 Reading Temperature with a Digital Thermometer 441
13.6 Driving Four 7-Segment LEDs Using Only Two Wires 445
13.7 Integrating an I2C Port Expander 449
13.8 Driving Multidigit, 7-Segment Displays Using SPI 451
13.9 Communicating Between Two or More Arduino Boards 454
14. Wireless Communication 459
14.1 Sending Messages Using Low-Cost Wireless Modules 459
14.2 Connecting Arduino to a ZigBee or 802.15.4 Network 465
14.3 Sending a Message to a Particular XBee 472
14.4 Sending Sensor Data Between XBees 475
14.5 Activating an Actuator Connected to an XBee 480
14.6 Sending Messages Using Low-Cost Transceivers 486
14.7 Communicating with Bluetooth Devices 491
15. Ethernet and Networking 495
15. 1 Setting Up the Ethernet Shield 498
15.2 Obtaining Your IP Address Automatically 500
15.3 Resolving Hostnames to IP Addresses (DNS) 502
15.4 Requesting Data from a Web Server 504
15.5 Requesting Data from a Web Server Using XML 508
Table of Contents | vii
15.6 Setting Up an Arduino to Be a Web Server 511
15.7 Handling Incoming Web Requests 514
15.8 Handling Incoming Requests for Specific Pages 517
15.9 Using HTML to Format Web Server Responses 521
15.10 Serving Web Pages Using Forms (POST) 525
15.11 Serving Web Pages Containing Large Amounts of Data 528
15.12 Sending Twitter Messages 535
15.13 Sending and Receiving Simple Messages (UDP) 539
15.14 Getting the Time from an Internet Time Server 545
15.15 Monitoring Pachube Feeds 550
15.16 Sending Information to Pachube 556
16. Using, Modifying, and Creating Libraries 561
16.1 Using the Built-in Libraries 561
16.2 Installing Third-Party Libraries 563
16.3 Modifying a Library 565
16.4 Creating Your Own Library 568
16.5 Creating a Library That Uses Other Libraries 574
16.6 Updating Third-Party Libraries for Arduino 1.0 580
1 7. Advanced Coding and Memory Handling 583
17. 1 Understanding the Arduino Build Process 584
17.2 Determining the Amount of Free and Used RAM 587
17.3 Storing and Retrieving Numeric Values in Program Memory 589
17.4 Storing and Retrieving Strings in Program Memory 592
17.5 Using #define and const Instead of Integers 594
17.6 Using Conditional Compilations 595
18. Using the Controller Chip Hardware 599
18.1 Storing Data in Permanent EEPROM Memory 603
18.2 Using Hardware Interrupts 606
18.3 Setting Timer Duration 609
18.4 Setting Timer Pulse Width and Duration 611
18.5 Creating a Pulse Generator 614
18.6 Changing a Timer's PWM Frequency 617
18.7 Counting Pulses 620
18.8 Measuring Pulses More Accurately 621
18.9 Measuring Analog Values Quickly 624
18.10 Reducing Battery Drain 626
18.11 Setting Digital Pins Quickly 627
18.12 Uploading Sketches Using a Programmer 630
18.13 Replacing the Arduino Bootloader 632
18.14 Reprogram the Uno to Emulate a Native USB device 633
viii | Table of Contents
A. Electronic Components 637
B. Using Schematic Diagrams and Data Sheets 643
C. Building and Connecting the Circuit 651
D. Tips on Troubleshooting Software Problems 655
E. Tips on Troubleshooting Hardware Problems 659
F. Digital and Analog Pins 663
G. ASCII and Extended Character Sets 667
H. Migrating to Arduino 1 .0 671
Table of Contents | ix
This book was written by Michael Margolis with Nick Weldin to help you explore the
amazing things you can do with Arduino.
Arduino is a family of microcontrollers (tiny computers) and a software creation envi-
ronment that makes it easy for you to create programs (called sketches) that can interact
with the physical world. Things you make with Arduino can sense and respond to
touch, sound, position, heat, and light. This type of technology, often referred to as
physical computing, is used in all kinds of things from the iPhone to automobile elec-
tronics systems. Arduino makes it possible for anyone with an interest — even people
with no programming or electronics experience — to use this rich and complex
Who This Book Is For
Unlike in most technical cookbooks, experience with software and hardware is not
assumed. This book is aimed at readers interested in using computer technology to
interact with the environment. It is for people who want to quickly find the solution to
hardware and software problems. The recipes provide the information you need to
accomplish a broad range of tasks. It also has details to help you customize solutions
to meet your specific needs. There is insufficient space in a book limited to 700 pages
to cover general theoretical background, so links to external references are provided
throughout the book. See "What Was Left Out" on page xiv for some general refer-
ences for those with no programming or electronics experience.
If you have no programming experience — perhaps you have a great idea for an inter-
active project but don't have the skills to develop it — this book will help you learn what
you need to know to write code that works, using examples that cover over 200 com-
If you have some programming experience but are new to Arduino, the book will help
you become productive quickly by demonstrating how to implement specific Arduino
capabilities for your project.
People already using Arduino should find the content helpful for quickly learning new
techniques, which are explained using practical examples. This will help you to embark
on more complex projects by showing how to solve problems and use capabilities that
may be new to you.
Experienced C/C++ programmers will find examples of how to use the low-level AVR
resources (interrupts, timers, I2C, Ethernet, etc.) to build applications using the
How This Book Is Organized
The book contains information that covers the broad range of the Arduino's capabili-
ties, from basic concepts and common tasks to advanced technology. Each technique
is explained in a recipe that shows you how to implement a specific capability. You do
not need to read the content in sequence. Where a recipe uses a technique covered in
another recipe, the content in the other recipe is referenced rather than repeating details
in multiple places.
Chapter 1, Getting Started, introduces the Arduino environment and provides help on
getting the Arduino development environment and hardware installed and working.
The next couple of chapters introduce Arduino software development. Chapter 2,
Making the Sketch Do Your Bidding, covers essential software concepts and tasks, and
Chapter 3, Using Mathematical Operators, shows how to make use of the most common
Chapter 4, Serial Communications, describes how to get Arduino to connect and com-
municate with your computer and other devices. Serial is the most common method
for Arduino input and output, and this capability is used in many of the recipes
throughout the book.
Chapter 5, Simple Digital and Analog Input, introduces a range of basic techniques for
reading digital and analog signals. Chapter 6, Getting Input from Sensors, builds on this
with recipes that explain how to use devices that enable Arduino to sense touch, sound,
position, heat, and light.
Chapter 7, Visual Output, covers controlling light. Recipes cover switching on one or
many LEDs and controlling brightness and color. This chapter explains how you can
drive bar graphs and numeric LED displays, as well as create patterns and animations
with LED arrays. In addition, the chapter provides a general introduction to digital and
analog output for those who are new to this.
Chapter 8, Physical Output, explains how you can make things move by controlling
motors with Arduino. A wide range of motor types is covered: solenoids, servo motors,
DC motors, and stepper motors.
xii | Preface
Chapter 9, Audio Output, shows how to generate sound with Arduino through an out-
put device such as a speaker. It covers playing simple tones and melodies and playing
WAV files and MIDI.
Chapter 10, Remotely Controlling External Devices, describes techniques that can be
used to interact with almost any device that uses some form of remote controller, in-
cluding TV, audio equipment, cameras, garage doors, appliances, and toys. It builds
on techniques used in previous chapters for connecting Arduino to devices and
Chapter 11, Using Displays, covers interfacing text and graphical LCD displays. The
chapter shows how you can connect these devices to display text, scroll or highlight
words, and create special symbols and characters.
Chapter 12, Using Time and Dates, covers built-in Arduino time-related functions and
introduces many additional techniques for handling time delays, time measurement,
and real-world times and dates.
Chapter 13, Communicating Using I2C and SPI, covers the Inter-Integrated Circuit
(12 C) and Serial Peripheral Interface (SPI) standards. These standards provide simple
ways for digital information to be transferred between sensors and Arduino. This chap-
ter shows how to use I2C and SPI to connect to common devices. It also shows how to
connect two or more Arduino boards, using I2C for multiboard applications.
Chapter 14, Wireless Communication, covers wireless communication with XBee and
other wireless modules. This chapter provides examples ranging from simple wireless
serial port replacements to mesh networks connecting multiple boards to multiple
Chapter 15, Ethernet and Networking, describes the many ways you can use Arduino
with the Internet. It has examples that demonstrate how to build and use web clients
and servers and shows how to use the most common Internet communication protocols
Arduino software libraries are a standard way of adding functionality to the Arduino
environment. Chapter 16, Using, Modifying, and Creating Libraries, explains how to
use and modify software libraries. It also provides guidance on how to create your own
Chapter 17, Advanced Coding and Memory Handling, covers advanced programming
techniques, and the topics here are more technical than the other recipes in this book
because they cover things that are usually concealed by the friendly Arduino wrapper.
The techniques in this chapter can be used to make a sketch more efficient — they can
help improve performance and reduce the code size of your sketches.
Chapter 18, Using the Controller Chip Hardware, shows how to access and use hard-
ware functions that are not fully exposed through the documented Arduino language.
It covers low-level usage of the hardware input/output registers, timers, and interrupts.
Preface | xiii
Appendix A, Electronic Components, provides an overview of the components used
throughout the book.
Appendix B, Using Schematic Diagrams and Data Sheets, explains how to use schematic
diagrams and data sheets.
Appendix C, Building and Connecting the Circuit, provides a brief introduction to using
a breadboard, connecting and using external power supplies and batteries, and using
capacitors for decoupling.
Appendix D, Tips on Troubleshooting Software Problems, provides tips on fixing com-
pile and runtime problems.
Appendix E, Tips on Troubleshooting Hardware Problems, covers problems with elec-
Appendix F, Digital and Analog Pins, provides tables indicating functionality provided
by the pins on standard Arduino boards.
Appendix G, ASCII and Extended Character Sets, provides tables showing ASCII
Appendix H, Migrating to Arduino 1.0, explains how to modify code written for pre-
vious releases to run correctly with Arduino 1.0.
What Was Left Out
There isn't room in this book to cover electronics theory and practice, although guid-
ance is provided for building the circuits used in the recipes. For more detail, readers
may want to refer to material that is widely available on the Internet or to books such
as the following:
• Make: Electronics by Charles Piatt (O'Reilly; search for it on oreilly.com)
• Getting Started in Electronics by Forrest M. Mims III (Master Publishing)
• Physical Computing by Dan O'Sullivan and Tom Igoe (Cengage)
• Practical Electronics for Inventors by Paul Scherz (McGraw-Hill)
This cookbook explains how to write code to accomplish specific tasks, but it is not an
introduction to programming. Relevant programming concepts are briefly explained,
but there is insufficient room to cover the details. If you want to learn more about
programming, you may want to refer to the Internet or to one of the following books:
• Practical C Programming by Steve Oualline (O'Reilly; search for it on oreilly.com)
• A Book on C by Al Kelley and Ira Pohl (Addison- Wesley)
xiv | Preface
My favorite, although not really a beginner's book, is the book I used to learn
• The C Programming Language by Brian W. Kernighan and Dennis M. Ritchie
Code Style (About the Code)
The code used throughout this book has been tailored to clearly illustrate the topic
covered in each recipe. As a consequence, some common coding shortcuts have been
avoided, particularly in the early chapters. Experienced C programmers often use rich
but terse expressions that are efficient but can be a little difficult for beginners to read.
For example, the early chapters increment variables using explicit expressions that are
easy for nonprogrammers to read:
result = result + X; II increment the count
Rather than the following, commonly used by experienced programmers, that does the
result++; // increment using the post increment operator
Feel free to substitute your preferred style. Beginners should be reassured that there is
no benefit in performance or code size in using the terse form.
Some programming expressions are so common that they are used in their terse form.
For example, the loop expressions are written as follows:
for(int i=0; i < 4; i++)
This is equivalent to the following:
for(i=0; i < 4; i = i+l)
See Chapter 2 for more details on these and other expressions used throughout the
Good programming practice involves ensuring that values used are valid (garbage in
equals garbage out) by checking them before using them in calculations. However, to
keep the code focused on the recipe topic, very little error-checking code has been
Arduino Platform Release Notes
This edition has been updated for Arduino 1.0. All of the code has been tested with the
latest Arduino 1.0 release candidate at the time of going to press (RC2). The download
code for this edition will be updated online if necessary to support the final 1.0 release,
so check the book's website to get the latest code. The download contains a file named
changelog.txt that will indicate code that has changed from the published edition.
Preface | xv
Although many of the sketches will run on earlier Arduino releases, you need to change
the extension from .ino to .pde to load the sketch into a pre-1.0 IDE. If you have not
migrated to Arduino 1.0 and have good reason to stick with an earlier release, you can
use the example code from the first edition of this book (available at http://shop.oreilly
.com/product/9780596802486.do), which has been tested with releases from 0018 to
0022. Note that many recipes in the second edition have been enhanced, so we en-
courage you to upgrade to Arduino 1.0. If you need help migrating older code, see
There's also a link to errata on that site. Errata give readers a way to let us know about
typos, errors, and other problems with the book. Errata will be visible on the page
immediately, and we'll confirm them after checking them out. O'Reilly can also fix
errata in future printings of the book and on Safari, making for a better reader experi-
ence pretty quickly.
If you have problems making examples work, check the changelog.txt file in the latest
code download to see if the sketch has been updated. If that doesn't fix the problem,
see Appendix D , which covers troubleshooting software problems . The Arduino forum
is a good place to post a question if you need more help: http://www.arduino.cc.
If you like — or don't like — this book, by all means, please let people know. Amazon
reviews are one popular way to share your happiness or other comments. You can also
leave reviews at the O'Reilly site for the book.
The following font conventions are used in this book:
Indicates pathnames, filenames, and program names; Internet addresses, such as
domain names and URLs; and new items where they are defined
Indicates command lines and options that should be typed verbatim; names and
keywords in programs, including method names, variable names, and class names;
and HTML element tags
Constant width bold
Indicates emphasis in program code lines
Constant width italic
Indicates text that should be replaced with user-supplied values
Conventions Used in This Book
This icon signifies a tip, suggestion, or general note.
xvi | Preface
This icon indicates a warning or caution.
Using Code Examples
This book is here to help you make things with Arduino. In general, you may use the
code in this book in your programs and documentation. You do not need to contact
us for permission unless you're reproducing a significant portion of the code. For ex-
ample, writing a program that uses several chunks of code from this book does not
require permission. Selling or distributing a CD-ROM of examples from this book
does require permission. Answering a question by citing this book and quoting example
code does not require permission. Incorporating a significant amount of example code
from this book into your product's documentation does require permission.
We appreciate, but do not require, attribution. An attribution usually includes the title,
author, publisher, and ISBN. For example: "Arduino Cookbook, Second Edition, by
Michael Margolis with Nick Weldin (O'Reilly). Copyright 2012 Michael Margolis,
Nicholas Weldin, 978-1-4493-1387-6."
If you feel your use of code examples falls outside fair use or the permission given here,
feel free to contact us at firstname.lastname@example.org.
With a subscription, you can read any page and watch any video from our library online.
Read books on your cell phone and mobile devices. Access new titles before they are
available for print, and get exclusive access to manuscripts in development and post
feedback for the authors. Copy and paste code samples, organize your favorites, down-
load chapters, bookmark key sections, create notes, print out pages, and benefit from
tons of other time-saving features.
O'Reilly Media has uploaded this book to the Safari Books Online service. To have full
digital access to this book and others on similar topics from O'Reilly and other pub-
lishers, sign up for free at http://my.safaribooksonline.com.
We have tested and verified the information in this book to the best of our ability, but
you may find that features have changed (or even that we have made a few mistakes!).
Safari® Books Online
Safari Books Online is an on-demand digital library that lets you easily
search over 7,500 technology and creative reference books and videos to
find the answers you need quickly.
How to Contact Us
Preface | xvii
Please let us know about any errors you find, as well as your suggestions for future
editions, by writing to:
O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
707-829-05 15 (international/local)
We have a web page for this book, where we list errata, examples, and any additional
information. You can access this page at:
To comment or ask technical questions about this book, send email to:
For more information about our books, courses, conferences, and news, see our website
Find us on Facebook: http://facebook.com/oreilly
Follow us on Twitter: http://twitter.com/oreillymedia
Watch us on YouTube: http://www.youtube.com/oreillymedia
Nick Weldin's contribution was invaluable for the completion of this book. It was
90 percent written when Nick came on board — and without his skill and enthusiasm,
it would still be 90 percent written. His hands-on experience running Arduino work-
shops for all levels of users enabled us to make the advice in this book practical for our
broad range of readers. Thank you, Nick, for your knowledge and genial, collaborative
Simon St. Laurent was the editor at O'Reilly who first expressed interest in this book.
And in the end, he is the man who pulled it together. His support and encouragement
kept us inspired as we sifted our way through the volumes of material necessary to do
the subject justice.
Brian Jepson helped me get started with the writing of this book. His vast knowledge
of things Arduino and his concern and expertise for communicating about technology
in plain English set a high standard. He was an ideal guiding hand for shaping the book
and making technology readily accessible for readers. We also have Brian to thank for
the XBee content in Chapter 14.
Brian Jepson and Shawn Wallace were technical editors for this second edition and
provided excellent advice for improving the accuracy and clarity of the content.
xviii | Preface
Audrey Doyle worked tirelessly to stamp out typos and grammatical errors in the initial
manuscript and untangle some of the more convoluted expressions.
Philip Lindsay collaborated on content for Chapter 15 in the first edition. Adrian
McEwen, the lead developer for many of the Ethernet enhancements in Release 1.0,
provided valuable advice to ensure this Chapter reflected all the changes in that release.
Mikal Hart wrote recipes covering GPS and software serial. Mikal was the natural
choice for this — not only because he wrote the libraries, but also because he is a fluent
communicator, an Arduino enthusiast, and a pleasure to collaborate with.
Arduino is possible because of the creativity of the core Arduino development team:
Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, and David Mellis. On
behalf of all Arduino users, I wish to express our appreciation for their efforts in making
this fascinating technology simple and their generosity in making it free.
Special thanks to Alexandra Deschamps-Sonsino, whose Tinker London workshops
provided important understanding of the needs of users. Thanks also to Peter Knight,
who has provided all kinds of clever Arduino solutions as well as the basis of a number
of recipes in this book.
On behalf of everyone who has downloaded user-contributed Arduino libraries, I
would like to thank the authors who have generously shared their knowledge.
The availability of a wide range of hardware is a large part of what makes Arduino
exciting — thanks to the suppliers for stocking and supporting a broad range of great
devices. The following were helpful in providing hardware used in the book: SparkFun,
Maker Shed, Gravitech, and NKC Electronics. Other suppliers that have been helpful
include Modern Device, Liquidware, Adafruit, MakerBot Industries, Mindkits,
Oomlout, and SK Pang.
Nick would like to thank everyone who was involved with Tinker London, particularly
Alexandra, Peter, Brock Craft, Daniel Soltis and all the people who assisted on work-
shops over the years.
Nick's final thanks go to his family, Jeanie, Emily, and Finn, who agreed to let him do
this over their summer holiday, and of course, much longer after that than they origi-
nally thought, and to his parents, Frank and Eva, for bringing him up to take things
Last but not least, I express thanks to the following people:
Joshua Noble for introducing me to O'Reilly. His book, Programming Interactivity, is
highly recommended for those interested in broadening their knowledge in interactive
Robert Lacy-Thompson for offering advice early on with the first edition.
Mark Margolis for his support and help as a sounding board in the book's conception
Preface | xix
I thank my parents for helping me to see that the creative arts and technology were not
distinctive entities and that, when combined, they can lead to extraordinary results.
And finally, this book would not have been started or finished without the support of
my wife, Barbara Faden. My grateful appreciation to her for keeping me motivated and
for her careful reading and contributions to the manuscript.
Notes on the Second Edition
The second edition of this book has followed relatively quickly from the first, prompted
by the release of Arduino 1.0. The stated purpose of 1.0 is to introduce significant
change that will smooth the way for future enhancements but break some code written
for older software. These have necessitated changes to code in many of the chapters of
this book. Most changed are Chapter 15, Ethernet and Networking, and Chapter 13,
Communicating Using I2C and SPI, but all of the recipes in this edition have been mi-
grated to 1.0, with many being updated to use features new in this release. If you are
using a release prior to Arduino 1.0, then you can download code from the first edition
of this book. See "Arduino Platform Release Notes" on page xv for download details.
Appendix H, Migrating to Arduino 1.0, has been added to describe the changes intro-
duced by Arduino Release 1.0. This describes how to update older code to use with
Recipes for devices that are no longer widely available have been updated to use current
replacements and some new sensors and wireless devices have been added.
Errata posted on the O'Reilly site has been corrected, thanks to readers taking the time
to notify us of these.
We think you will like the improvements made in Arduino 1.0 as well as the enhance-
ments made to this edition of the Arduino Cookbook. The first edition was well received;
the constructive criticism being divided between people that wanted more technical
content and those that preferred less. In a book that we limited to only 700 or so pages
(to keep it affordable and portable), that seems to indicate that the right balance has
xx | Preface
The Arduino environment has been designed to be easy to use for beginners who have
no software or electronics experience. With Arduino, you can build objects that can
respond to and/or control light, sound, touch, and movement. Arduino has been used
to create an amazing variety of things, including musical instruments, robots, light
sculptures, games, interactive furniture, and even interactive clothing.
Arduino is used in many educational programs around the world, particularly by de-
signers and artists who want to easily create prototypes but do not need a deep under-
standing of the technical details behind their creations. Because it is designed to be used
by nontechnical people, the software includes plenty of example code to demonstrate
how to use the Arduino board's various facilities.
Though it is easy to use, Arduino's underlying hardware works at the same level of
sophistication that engineers employ to build embedded devices. People already work-
ing with microcontrollers are also attracted to Arduino because of its agile development
capabilities and its facility for quick implementation of ideas.
Arduino is best known for its hardware, but you also need software to program that
hardware. Both the hardware and the software are called "Arduino." The combination
enables you to create projects that sense and control the physical world. The software
is free, open source, and cross-platform. The boards are inexpensive to buy, or you can
build your own (the hardware designs are also open source). In addition, there is an
active and supportive Arduino community that is accessible worldwide through the
Arduino forums and the wiki (known as the Arduino Playground) . The forums and the
If you're not a beginner, please feel free to skip ahead to recipes that
wiki offer project development examples and solutions to problems that can provide
inspiration and assistance as you pursue your own projects.
The recipes in this chapter will get you started by explaining how to set up the devel-
opment environment and how to compile and run an example sketch.
Source code containing computer instructions for controlling Arduino
functionality is usually referred to as a sketch in the Arduino community.
The word sketch will be used throughout this book to refer to Arduino
The Blink sketch, which comes with Arduino, is used as an example for recipes in this
chapter, though the last recipe in the chapter goes further by adding sound and col-
lecting input through some additional hardware, not just blinking the light built into
the board. Chapter 2 covers how to structure a sketch for Arduino and provides an
introduction to programming.
*• . I If you already know your way around Arduino basics, feel free to jump
forward to later chapters. If you're a first-time Arduino user, patience
in these early recipes will pay off with smoother results later.
Software programs, called sketches, are created on a computer using the Arduino inte-
grated development environment (IDE). The IDE enables you to write and edit
Lire la suite
- 19.16 MB
Vous recherchez le terme ""