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

5. Simple Digital and Analog Input

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)  

6. Getting Input from Sensors

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