#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 |
|
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 |
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 |
|