#614 Arduino Cookbook
Book notes: Arduino Cookbook, by Michael Margolis. First published October 15, 2010.

Notes
See also:
Contents
1. Getting Started
Chapter |
LEAP? |
1.1 Installing the Integrated Development Environment (IDE) |
n/a |
1.2 Setting Up the Arduino Board |
n/a |
1.3 Using the Integrated Development Environment (IDE) to Prepare an Arduino Sketch |
n/a |
1.4 Uploading and Running the Blink Sketch 11 |
n/a |
1.5 Creating and Saving a Sketch 13 |
n/a |
1.6 Using Arduino 15 |
n/a |
2. Making the Sketch Do Your Bidding
Chapter |
LEAP? |
2.1 Structuring an Arduino Program 20 |
n/a |
2.2 Using Simple Primitive Types (Variables) 21 |
n/a |
2.3 Using Floating-Point Numbers 23 |
n/a |
2.4 Working with Groups of Values 25 |
n/a |
2.5 Using Arduino String Functionality 28 |
n/a |
2.6 Using C Character Strings 30 |
n/a |
2.7 Splitting Comma-Separated Text into Groups 32 |
n/a |
2.8 Converting a Number to a String 34 |
n/a |
2.9 Converting a String to a Number 36 |
n/a |
2.10 Structuring Your Code into Functional Blocks 38 |
n/a |
2.11 Returning More Than One Value from a Function 41 |
n/a |
2.12 Taking Actions Based on Conditions 44 |
n/a |
2.13 Repeating a Sequence of Statements 45 |
n/a |
2.14 Repeating Statements with a Counter 47 |
n/a |
2.15 Breaking Out of Loops 49 |
n/a |
2.16 Taking a Variety of Actions Based on a Single Variable 50 |
n/a |
2.17 Comparing Character and Numeric Values 52 |
n/a |
2.18 Comparing Strings 54 |
n/a |
2.19 Performing Logical Comparisons 55 |
n/a |
2.20 Performing Bitwise Operations 56 |
n/a |
2.21 Combining Operations and Assignment 58 |
n/a |
3. Using Mathematical Operators
Chapter |
LEAP? |
3.1 Adding, Subtracting, Multiplying, and Dividing |
|
3.2 Incrementing and Decrementing Values |
|
3.3 Finding the Remainder After Dividing Two Values |
|
3.4 Determining the Absolute Value |
|
3.5 Constraining a Number to a Range of Values |
|
3.6 Finding the Minimum or Maximum of Some Values |
|
3.7 Raising a Number to a Power |
|
3.8 Taking the Square Root |
|
3.9 Rounding Floating-Point Numbers Up and Down |
|
3.10 Using Trigonometric Functions |
|
3.11 Generating Random Numbers |
|
3.12 Setting and Reading Bits |
|
3.13 Shifting Bits |
|
3.14 Extracting High and Low Bytes in an int or long |
|
3.15 Forming an int or long from High and Low Bytes |
|
4. Serial Communications
Chapter |
LEAP? |
4.1 Sending Debug Information from Arduino to Your Computer |
|
4.2 Sending Formatted Text and Numeric Data from Arduino |
|
4.3 Receiving Serial Data in Arduino |
|
4.4 Sending Multiple Text Fields from Arduino in a Single Message |
|
4.5 Receiving Multiple Text Fields in a Single Message in Arduino |
|
4.6 Sending Binary Data from Arduino |
|
4.7 Receiving Binary Data from Arduino on a Computer |
|
4.8 Sending Binary Values from Processing to Arduino |
|
4.9 Sending the Value of Multiple Arduino Pins |
|
4.10 How to Move the Mouse Cursor on a PC or Mac |
|
4.11 Controlling Google Earth Using Arduino |
|
4.12 Logging Arduino Data to a File on Your Computer |
|
4.13 Sending Data to Two Serial Devices at the Same Time |
|
4.14 Receiving Serial Data from Two Devices at the Same Time |
|
4.15 Setting Up Processing on Your Computer to Send and Receive Serial Data |
|
Chapter |
LEAP? |
5.1 Using a Switch |
|
5.2 Using a Switch Without External Resistors |
|
5.3 Reliably Detecting the Closing of a Switch |
|
5.4 Determining How Long a Switch Is Pressed |
|
5.5 Reading a Keypad 149 |
|
5.6 Reading Analog Values 152 |
|
5.7 Changing the Range of Values 154 |
|
5.8 Reading More Than Six Analog Inputs 156 |
|
5.9 Displaying Voltages Up to 5V 158 |
|
5.10 Responding to Changes in Voltage 161 |
|
5.11 Measuring Voltages More Than 5V (Voltage Dividers) 162 |
|
Chapter |
LEAP? |
6.1 Detecting Movement 167 |
|
6.2 Detecting Light 170 |
|
6.3 Detecting Motion (Integrating Passive Infrared Detectors) 171 |
|
6.4 Measuring Distance 173 |
|
6.5 Measuring Distance Accurately 176 |
|
6.6 Detecting Vibration |
#376 Piezo Vibration Detector and BPM Counter |
6.7 Detecting Sound |
|
6.8 Measuring Temperature |
|
6.9 Reading RFID Tags |
|
6.10 Tracking the Movement of a Dial |
#118 RotaryEncoderMethods |
6.11 Tracking the Movement of More Than One Rotary Encoder |
|
6.12 Tracking the Movement of a Dial in a Busy Sketch |
#118 RotaryEncoderMethods |
6.13 Using a Mouse |
|
6.14 Getting Location from a GPS |
#387 GpsBasics |
6.15 Detecting Rotation Using a Gyroscope 206 |
|
6.16 Detecting Direction 208 |
|
6.17 Getting Input from a Game Control Pad (PlayStation) 211 |
|
6.18 Reading Acceleration 214 |
|
7. Visual Output
Chapter |
LEAP? |
7.1 Connecting and Using LEDs 220 |
|
7.2 Adjusting the Brightness of an LED 223 |
|
7.3 Driving High-Power LEDs 224 |
|
7.4 Adjusting the Color of an LED 226 |
|
7.5 Sequencing Multiple LEDs: Creating a Bar Graph 229 |
|
7.6 Sequencing Multiple LEDs: Making a Chase Sequence (Knight Rider) 232 |
|
7.7 Controlling an LED Matrix Using Multiplexing 234 |
|
7.8 Displaying Images on an LED Matrix 236 |
|
7.9 Controlling a Matrix of LEDs: Charlieplexing 239 |
|
7.10 Driving a 7-Segment LED Display 245 |
|
7.11 Driving Multidigit, 7-Segment LED Displays: Multiplexing 248 |
|
7.12 Driving Multidigit, 7-Segment LED Displays Using MAX7221 Shift Registers |
|
7.13 Controlling an Array of LEDs by Using MAX72xx Shift Registers 253 |
|
7.14 Increasing the Number of Analog Outputs Using PWM Extender Chips (TLC5940) 255 |
|
7.15 Using an Analog Panel Meter As a Display |
|
8. Physical Output
Chapter |
LEAP? |
8.1 Controlling the Position of a Servo 264 |
|
8.2 Controlling One or Two Servos with a Potentiometer or Sensor 266 |
|
8.3 Controlling the Speed of Continuous Rotation Servos 267 |
|
8.4 Controlling Servos from the Serial Port 269 |
|
8.5 Driving a Brushless Motor (Using a Hobby Speed Controller) 271 |
|
8.6 Controlling Solenoids and Relays 272 |
#102 SolenoidControl |
8.7 Making an Object Vibrate 273 |
|
8.8 Driving a Brushed Motor Using a Transistor 276 |
|
8.9 Controlling the Direction of a Brushed Motor with an H-Bridge 277 |
|
8.10 Controlling the Direction and Speed of a Brushed Motor with an H-Bridge 280 |
|
8.11 Using Sensors to Control the Direction and Speed of Brushed Motors (L293 H-Bridge) 282 |
|
8.12 Driving a Bipolar Stepper Motor 287 |
|
8.13 Driving a Bipolar Stepper Motor (Using the EasyDriver Board) 290 |
|
8.14 Driving a Unipolar Stepper Motor (ULN2003A) 293 |
|
9. Audio Output
Chapter |
LEAP? |
9.1 Playing Tones 299 |
|
9.2 Playing a Simple Melody 301 |
#051 El Jarabe Tapatío |
9.3 Generating More Than One Simultaneous Tone 303 |
#019 Popcorn |
9.4 Generating Audio Tones and Fading an LED 305 |
|
9.5 Playing a WAV File 308 |
|
9.6 Controlling MIDI 311 |
|
9.7 Making an Audio Synthesizer 314 |
|
10. Remotely Controlling External Devices
Chapter |
LEAP? |
10.1 Responding to an Infrared Remote Control 318 |
|
10.2 Decoding Infrared Remote Control Signals 321 |
|
10.3 Imitating Remote Control Signals 324 |
|
10.4 Controlling a Digital Camera 327 |
|
10.5 Controlling AC Devices by Hacking a Remote Controlled Switch 330 |
|
11. Using Displays
Chapter |
LEAP? |
11.1 Connecting and Using a Text LCD Display 334 |
|
11.2 Formatting Text 337 |
|
11.3 Turning the Cursor and Display On or Off 340 |
|
11.4 Scrolling Text 342 |
|
11.5 Displaying Special Symbols 345 |
|
11.6 Creating Custom Characters 347 |
|
11.7 Displaying Symbols Larger Than a Single Character 349 |
|
11.8 Displaying Pixels Smaller Than a Single Character 352 |
|
11.9 Connecting and Using a Graphical LCD Display 355 |
|
11.10 Creating Bitmaps for Use with a Graphical Display 359 |
|
11.11 Displaying Text on a TV 361 |
|
12. Using Time and Dates
Chapter |
LEAP? |
12.1 Creating Delays 367 |
|
12.2 Using millis to Determine Duration 368 |
#457 Precisiontimer |
12.3 More Precisely Measuring the Duration of a Pulse 372 |
|
12.4 Using Arduino As a Clock 373 |
|
12.5 Creating an Alarm to Periodically Call a Function 380 |
|
12.6 Using a Real-Time Clock 384 |
|
13. Communicating Using I2C and SPI
Chapter |
LEAP? |
13.1 Controlling an RGB LED Using the BlinkM Module 392 |
|
13.2 Using the Wii Nunchuck Accelerometer 397 |
|
13.3 Interfacing to an External Real-Time Clock 402 |
|
13.4 Adding External EEPROM Memory 405 |
|
13.5 Reading Temperature with a Digital Thermometer 408 |
|
13.6 Driving Four 7-Segment LEDs Using Only Two Wires 413 |
|
13.7 Integrating an I2C Port Expander 416 |
|
13.8 Driving Multidigit, 7-Segment Displays Using SPI 419 |
|
13.9 Communicating Between Two or More Arduino Boards 422 |
|
14. Wireless Communication
Chapter |
LEAP? |
14.1 Sending Messages Using Low-Cost Wireless Modules 427 |
|
14.2 Connecting Arduino to a ZigBee or 802.15.4 Network 433 |
|
14.3 Sending a Message to a Particular XBee 440 |
|
14.4 Sending Sensor Data Between XBees 442 |
|
14.5 Activating an Actuator Connected to an XBee 448 |
|
15. Ethernet and Networking
Chapter |
LEAP? |
15.1 Setting Up the Ethernet Shield 455 |
|
15.2 Obtaining Your IP Address Automatically 457 |
|
15.3 Resolving Hostnames to IP Addresses (DNS) 460 |
|
15.4 Requesting Data from a Web Server 464 |
|
15.5 Requesting Data from a Web Server Using XML 468 |
|
15.6 Setting Up an Arduino to Be a Web Server 471 |
|
15.7 Handling Incoming Web Requests 473 |
|
15.8 Handling Incoming Requests for Specific Pages 476 |
|
15.9 Using HTML to Format Web Server Responses 481 |
|
15.10 Serving Web Pages Using Forms (POST) 485 |
|
15.11 Serving Web Pages Containing Large Amounts of Data 488 |
|
15.12 Sending Twitter Messages 495 |
|
15.13 Sending and Receiving Simple Messages (UDP) 498 |
|
15.14 Getting the Time from an Internet Time Server 504 |
|
15.15 Monitoring Pachube Feeds 509 |
|
15.16 Sending Information to Pachube 512 |
|
16. Using, Modifying, and Creating Libraries
Chapter |
LEAP? |
16.1 Using the Built-in Libraries |
|
16.2 Installing Third-Party Libraries |
|
16.3 Modifying a Library |
|
16.4 Creating Your Own Library |
|
16.5 Creating a Library That Uses Other Libraries 529 |
|
17. Advanced Coding and Memory Handling
Chapter |
LEAP? |
17.1 Understanding the Arduino Build Process 534 |
n/a |
17.2 Determining the Amount of Free and Used RAM 537 |
|
17.3 Storing and Retrieving Numeric Values in Program Memory 539 |
|
17.4 Storing and Retrieving Strings in Program Memory 542 |
#020 Internals |
17.5 Using #define and const Instead of Integers 544 |
n/a |
17.6 Using Conditional Compilations 545 |
n/a |
18. Using the Controller Chip Hardware
Chapter |
LEAP? |
18.1 Storing Data in Permanent EEPROM Memory 553 |
|
18.2 Using Hardware Interrupts 556 |
|
18.3 Setting Timer Duration 559 |
|
18.4 Setting Timer Pulse Width and Duration 561 |
|
18.5 Creating a Pulse Generator 564 |
|
18.6 Changing a Timer’s PWM Frequency 567 |
|
18.7 Counting Pulses 569 |
|
18.8 Measuring Pulses More Accurately 571 |
|
18.9 Measuring Analog Values Quickly 573 |
#458 FastAnalogRead |
18.10 Reducing Battery Drain 574 |
|
18.11 Setting Digital Pins Quickly 576 |
|