Fork me on GitHub

Project Notes

#614 Arduino Cookbook

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

Build

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  

5. Simple Digital and Analog Input

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  

6. Getting Input from Sensors

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  
About LEAP#614 Books

This page is a web-friendly rendering of my project notes shared in the LEAP GitHub repository.

Project Source on GitHub Return to the LEAP Catalog
About LEAP

LEAP is my personal collection of electronics projects - usually involving an Arduino or other microprocessor in one way or another. Some are full-blown projects, while many are trivial breadboard experiments, intended to learn and explore something interesting.

Projects are often inspired by things found wild on the net, or ideas from the many great electronics podcasts and YouTube channels. Feel free to borrow liberally, and if you spot any issues do let me know or send a pull-request.

NOTE: For a while I included various scale modelling projects here too, but I've now split them off into a new repository: check out LittleModelArt if you are looking for these projects.

Project Gallery view the projects as an image gallery Notebook reference materials and other notes Follow the Blog follow projects and notes as they are published in your favourite feed reader