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

Notes
See also:
Contents
1. Getting Started
| Chapter |
Project Link |
| 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 |
n/a |
| 1.5 Creating and Saving a Sketch |
n/a |
| 1.6 Using Arduino |
n/a |
2. Making the Sketch Do Your Bidding
| Chapter |
Project Link |
| 2.1 Structuring an Arduino Program |
n/a |
| 2.2 Using Simple Primitive Types (Variables) |
n/a |
| 2.3 Using Floating-Point Numbers |
n/a |
| 2.4 Working with Groups of Values |
n/a |
| 2.5 Using Arduino String Functionality |
n/a |
| 2.6 Using C Character Strings |
n/a |
| 2.7 Splitting Comma-Separated Text into Groups |
n/a |
| 2.8 Converting a Number to a String |
n/a |
| 2.9 Converting a String to a Number |
n/a |
| 2.10 Structuring Your Code into Functional Blocks |
n/a |
| 2.11 Returning More Than One Value from a Function |
n/a |
| 2.12 Taking Actions Based on Conditions |
n/a |
| 2.13 Repeating a Sequence of Statements |
n/a |
| 2.14 Repeating Statements with a Counter |
n/a |
| 2.15 Breaking Out of Loops |
n/a |
| 2.16 Taking a Variety of Actions Based on a Single Variable |
n/a |
| 2.17 Comparing Character and Numeric Values |
n/a |
| 2.18 Comparing Strings |
n/a |
| 2.19 Performing Logical Comparisons |
n/a |
| 2.20 Performing Bitwise Operations |
n/a |
| 2.21 Combining Operations and Assignment |
n/a |
3. Using Mathematical Operators
| Chapter |
Project Link |
| 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 |
Project Link |
| 4.1 Sending Debug Information from Arduino to Your Computer |
LEAP#746 Serial Control |
| 4.2 Sending Formatted Text and Numeric Data from Arduino |
|
| 4.3 Receiving Serial Data in Arduino |
LEAP#746 Serial Control |
| 4.4 Sending Multiple Text Fields from Arduino in a Single Message |
|
| 4.5 Receiving Multiple Text Fields in a Single Message in Arduino |
LEAP#747 Using TextFinder |
| 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 |
Project Link |
| 5.1 Using a Switch |
LEAP#728 Switch Inputs |
| 5.2 Using a Switch Without External Resistors |
LEAP#728 Switch Inputs |
| 5.3 Reliably Detecting the Closing of a Switch |
|
| 5.4 Determining How Long a Switch Is Pressed |
|
| 5.5 Reading a Keypad |
|
| 5.6 Reading Analog Values |
|
| 5.7 Changing the Range of Values |
|
| 5.8 Reading More Than Six Analog Inputs |
|
| 5.9 Displaying Voltages Up to 5V |
|
| 5.10 Responding to Changes in Voltage |
|
| 5.11 Measuring Voltages More Than 5V (Voltage Dividers) |
|
| Chapter |
Project Link |
| 6.1 Detecting Movement |
|
| 6.2 Detecting Light |
|
| 6.3 Detecting Motion (Integrating Passive Infrared Detectors) |
|
| 6.4 Measuring Distance |
|
| 6.5 Measuring Distance Accurately |
|
| 6.6 Detecting Vibration |
LEAP#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 |
LEAP#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 |
LEAP#118 RotaryEncoderMethods |
| 6.13 Using a Mouse |
|
| 6.14 Getting Location from a GPS |
LEAP#387 GpsBasics |
| 6.15 Detecting Rotation Using a Gyroscope |
|
| 6.16 Detecting Direction |
|
| 6.17 Getting Input from a Game Control Pad (PlayStation) |
|
| 6.18 Reading Acceleration |
|
7. Visual Output
| Chapter |
Project Link |
| 7.1 Connecting and Using LEDs |
|
| 7.2 Adjusting the Brightness of an LED |
|
| 7.3 Driving High-Power LEDs |
|
| 7.4 Adjusting the Color of an LED |
|
| 7.5 Sequencing Multiple LEDs: Creating a Bar Graph |
|
| 7.6 Sequencing Multiple LEDs: Making a Chase Sequence (Knight Rider) |
|
| 7.7 Controlling an LED Matrix Using Multiplexing |
|
| 7.8 Displaying Images on an LED Matrix |
|
| 7.9 Controlling a Matrix of LEDs: Charlieplexing |
|
| 7.10 Driving a 7-Segment LED Display |
|
| 7.11 Driving Multidigit, 7-Segment LED Displays: Multiplexing |
|
| 7.12 Driving Multidigit, 7-Segment LED Displays Using MAX7221 Shift Registers |
|
| 7.13 Controlling an Array of LEDs by Using MAX72xx Shift Registers |
|
| 7.14 Increasing the Number of Analog Outputs Using PWM Extender Chips (TLC5940) |
|
| 7.15 Using an Analog Panel Meter As a Display |
|
8. Physical Output
| Chapter |
Project Link |
| 8.1 Controlling the Position of a Servo |
|
| 8.2 Controlling One or Two Servos with a Potentiometer or Sensor |
|
| 8.3 Controlling the Speed of Continuous Rotation Servos |
|
| 8.4 Controlling Servos from the Serial Port |
|
| 8.5 Driving a Brushless Motor (Using a Hobby Speed Controller) |
|
| 8.6 Controlling Solenoids and Relays |
LEAP#102 SolenoidControl |
| 8.7 Making an Object Vibrate |
|
| 8.8 Driving a Brushed Motor Using a Transistor |
|
| 8.9 Controlling the Direction of a Brushed Motor with an H-Bridge |
|
| 8.10 Controlling the Direction and Speed of a Brushed Motor with an H-Bridge |
|
| 8.11 Using Sensors to Control the Direction and Speed of Brushed Motors (L293 H-Bridge) |
|
| 8.12 Driving a Bipolar Stepper Motor |
|
| 8.13 Driving a Bipolar Stepper Motor (Using the EasyDriver Board) |
|
| 8.14 Driving a Unipolar Stepper Motor (ULN2003A) |
|
9. Audio Output
| Chapter |
Project Link |
| 9.1 Playing Tones |
|
| 9.2 Playing a Simple Melody |
LEAP#051 El Jarabe Tapatío |
| 9.3 Generating More Than One Simultaneous Tone |
LEAP#019 Popcorn |
| 9.4 Generating Audio Tones and Fading an LED |
|
| 9.5 Playing a WAV File |
|
| 9.6 Controlling MIDI |
|
| 9.7 Making an Audio Synthesizer |
|
10. Remotely Controlling External Devices
| Chapter |
Project Link |
| 10.1 Responding to an Infrared Remote Control |
|
| 10.2 Decoding Infrared Remote Control Signals |
|
| 10.3 Imitating Remote Control Signals |
|
| 10.4 Controlling a Digital Camera |
|
| 10.5 Controlling AC Devices by Hacking a Remote Controlled Switch |
|
11. Using Displays
| Chapter |
Project Link |
| 11.1 Connecting and Using a Text LCD Display |
|
| 11.2 Formatting Text |
|
| 11.3 Turning the Cursor and Display On or Off |
|
| 11.4 Scrolling Text |
|
| 11.5 Displaying Special Symbols |
|
| 11.6 Creating Custom Characters |
|
| 11.7 Displaying Symbols Larger Than a Single Character |
|
| 11.8 Displaying Pixels Smaller Than a Single Character |
|
| 11.9 Connecting and Using a Graphical LCD Display |
|
| 11.10 Creating Bitmaps for Use with a Graphical Display |
|
| 11.11 Displaying Text on a TV |
|
12. Using Time and Dates
| Chapter |
Project Link |
| 12.1 Creating Delays |
|
| 12.2 Using millis to Determine Duration |
LEAP#457 Precision Timer |
| 12.3 More Precisely Measuring the Duration of a Pulse |
|
| 12.4 Using Arduino As a Clock |
|
| 12.5 Creating an Alarm to Periodically Call a Function |
|
| 12.6 Using a Real-Time Clock |
|
13. Communicating Using I2C and SPI
| Chapter |
Project Link |
| 13.1 Controlling an RGB LED Using the BlinkM Module |
|
| 13.2 Using the Wii Nunchuck Accelerometer |
|
| 13.3 Interfacing to an External Real-Time Clock |
|
| 13.4 Adding External EEPROM Memory |
|
| 13.5 Reading Temperature with a Digital Thermometer |
|
| 13.6 Driving Four 7-Segment LEDs Using Only Two Wires |
|
| 13.7 Integrating an I2C Port Expander |
|
| 13.8 Driving Multidigit, 7-Segment Displays Using SPI |
|
| 13.9 Communicating Between Two or More Arduino Boards |
|
14. Wireless Communication
| Chapter |
Project Link |
| 14.1 Sending Messages Using Low-Cost Wireless Modules |
|
| 14.2 Connecting Arduino to a ZigBee or 802.15.4 Network |
|
| 14.3 Sending a Message to a Particular XBee |
|
| 14.4 Sending Sensor Data Between XBees |
|
| 14.5 Activating an Actuator Connected to an XBee |
|
15. Ethernet and Networking
| Chapter |
Project Link |
| 15.1 Setting Up the Ethernet Shield |
|
| 15.2 Obtaining Your IP Address Automatically |
|
| 15.3 Resolving Hostnames to IP Addresses (DNS) |
|
| 15.4 Requesting Data from a Web Server |
|
| 15.5 Requesting Data from a Web Server Using XML |
|
| 15.6 Setting Up an Arduino to Be a Web Server |
|
| 15.7 Handling Incoming Web Requests |
|
| 15.8 Handling Incoming Requests for Specific Pages |
|
| 15.9 Using HTML to Format Web Server Responses |
|
| 15.10 Serving Web Pages Using Forms (POST) |
|
| 15.11 Serving Web Pages Containing Large Amounts of Data |
|
| 15.12 Sending Twitter Messages |
|
| 15.13 Sending and Receiving Simple Messages (UDP) |
|
| 15.14 Getting the Time from an Internet Time Server |
|
| 15.15 Monitoring Pachube Feeds |
|
| 15.16 Sending Information to Pachube |
|
16. Using, Modifying, and Creating Libraries
| Chapter |
Project Link |
| 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 |
|
17. Advanced Coding and Memory Handling
| Chapter |
Project Link |
| 17.1 Understanding the Arduino Build Process |
n/a |
| 17.2 Determining the Amount of Free and Used RAM |
|
| 17.3 Storing and Retrieving Numeric Values in Program Memory |
|
| 17.4 Storing and Retrieving Strings in Program Memory |
LEAP#020 Internals |
| 17.5 Using #define and const Instead of Integers |
n/a |
| 17.6 Using Conditional Compilations |
n/a |
18. Using the Controller Chip Hardware
| Chapter |
Project Link |
| 18.1 Storing Data in Permanent EEPROM Memory |
|
| 18.2 Using Hardware Interrupts |
|
| 18.3 Setting Timer Duration |
|
| 18.4 Setting Timer Pulse Width and Duration |
|
| 18.5 Creating a Pulse Generator |
|
| 18.6 Changing a Timer’s PWM Frequency |
|
| 18.7 Counting Pulses |
|
| 18.8 Measuring Pulses More Accurately |
|
| 18.9 Measuring Analog Values Quickly |
LEAP#458 FastAnalogRead |
| 18.10 Reducing Battery Drain |
|
| 18.11 Setting Digital Pins Quickly |
|