Preface |
|
xi | |
|
|
1 | (22) |
|
1.1 Installing the Integrated Development Environment (IDE) |
|
|
4 | (4) |
|
1.2 Setting Up the Arduino Board |
|
|
8 | (2) |
|
1.3 Using the Integrated Development Environment (IDE) to Prepare an Arduino Sketch |
|
|
10 | (3) |
|
1.4 Uploading and Running the Blink Sketch |
|
|
13 | (1) |
|
1.5 Creating and Saving a Sketch |
|
|
14 | (3) |
|
|
17 | (6) |
|
2 Making the Sketch Do Your Bidding |
|
|
23 | (46) |
|
2.1 Structuring an Arduino Program |
|
|
24 | (1) |
|
2.2 Using Simple Primitive Types (Variables) |
|
|
25 | (2) |
|
2.3 Using Floating-Point Numbers |
|
|
27 | (2) |
|
2.4 Working with Groups of Values |
|
|
29 | (3) |
|
2.5 Using Arduino String Functionality |
|
|
32 | (5) |
|
2.6 Using C Character Strings |
|
|
37 | (1) |
|
2.7 Splitting Comma-Separated Text into Groups |
|
|
38 | (3) |
|
2.8 Converting a Number to a String |
|
|
41 | (2) |
|
2.9 Converting a String to a Number |
|
|
43 | (2) |
|
2.10 Structuring Your Code into Functional Blocks |
|
|
45 | (4) |
|
2.11 Returning More Than One Value from a Function |
|
|
49 | (3) |
|
2.12 Taking Actions Based on Conditions |
|
|
52 | (1) |
|
2.13 Repeating a Sequence of Statements |
|
|
53 | (2) |
|
2.14 Repeating Statements with a Counter |
|
|
55 | (3) |
|
2.15 Breaking Out of Loops |
|
|
58 | (1) |
|
2.16 Taking a Variety of Actions Based on a Single Variable |
|
|
59 | (2) |
|
2.17 Comparing Character and Numeric Values |
|
|
61 | (2) |
|
|
63 | (1) |
|
2.19 Performing Logical Comparisons |
|
|
64 | (1) |
|
2.20 Performing Bitwise Operations |
|
|
65 | (3) |
|
2.21 Combining Operations and Assignment |
|
|
68 | (1) |
|
3 Using Mathematical Operators |
|
|
69 | (20) |
|
3.1 Adding, Subtracting, Multiplying, and Dividing |
|
|
69 | (1) |
|
3.2 Incrementing and Decrementing Values |
|
|
70 | (1) |
|
3.3 Finding the Remainder After Dividing Two Values |
|
|
71 | (1) |
|
3.4 Determining the Absolute Value |
|
|
72 | (1) |
|
3.5 Constraining a Number to a Range of Values |
|
|
73 | (1) |
|
3.6 Finding the Minimum or Maximum of Some Values |
|
|
74 | (1) |
|
3.7 Raising a Number to a Power |
|
|
75 | (1) |
|
3.8 Taking the Square Root |
|
|
76 | (1) |
|
3.9 Rounding Floating-Point Numbers Up and Down |
|
|
76 | (1) |
|
3.10 Using Trigonometric Functions |
|
|
77 | (1) |
|
3.11 Generating Random Numbers |
|
|
78 | (2) |
|
3.12 Setting and Reading Bits |
|
|
80 | (4) |
|
|
84 | (1) |
|
3.14 Extracting High and Low Bytes in an int or long |
|
|
85 | (2) |
|
3.15 Forming an int or long from High and Low Bytes |
|
|
87 | (2) |
|
|
89 | (58) |
|
4.1 Sending Debug Information from Arduino to Your Computer |
|
|
94 | (3) |
|
4.2 Sending Formatted Text and Numeric Data from Arduino |
|
|
97 | (3) |
|
4.3 Receiving Serial Data in Arduino |
|
|
100 | (5) |
|
4.4 Sending Multiple Text Fields from Arduino in a Single Message |
|
|
105 | (6) |
|
4.5 Receiving Multiple Text Fields in a Single Message in Arduino |
|
|
111 | (3) |
|
4.6 Sending Binary Data from Arduino |
|
|
114 | (4) |
|
4.7 Receiving Binary Data from Arduino on a Computer |
|
|
118 | (2) |
|
4.8 Sending Binary Values from Processing to Arduino |
|
|
120 | (2) |
|
4.9 Sending the Value of Multiple Arduino Pins |
|
|
122 | (3) |
|
4.10 How to Move the Mouse Cursor on a PC or Mac |
|
|
125 | (5) |
|
4.11 Controlling Google Earth Using Arduino |
|
|
130 | (5) |
|
4.12 Logging Arduino Data to a File on Your Computer |
|
|
135 | (3) |
|
4.13 Sending Data to Two Serial Devices at the Same Time |
|
|
138 | (3) |
|
4.14 Receiving Serial Data from Two Devices at the Same Time |
|
|
141 | (4) |
|
4.15 Setting Up Processing on Your Computer to Send and Receive Serial Data |
|
|
145 | (2) |
|
5 Simple Digital and Analog Input |
|
|
147 | (34) |
|
|
150 | (4) |
|
5.2 Using a Switch Without External Resistors |
|
|
154 | (1) |
|
5.3 Reliably Detecting the Closing of a Switch |
|
|
155 | (3) |
|
5.4 Determining How Long a Switch Is Pressed |
|
|
158 | (5) |
|
|
163 | (3) |
|
5.6 Reading Analog Values |
|
|
166 | (2) |
|
5.7 Changing the Range of Values |
|
|
168 | (2) |
|
5.8 Reading More Than Six Analog Inputs |
|
|
170 | (3) |
|
5.9 Displaying Voltages Up to 5V |
|
|
173 | (3) |
|
5.10 Responding to Changes in Voltage |
|
|
176 | (1) |
|
5.11 Measuring Voltages More Than 5V (Voltage Dividers) |
|
|
177 | (4) |
|
6 Getting Input from Sensors |
|
|
181 | (60) |
|
|
183 | (3) |
|
|
186 | (1) |
|
6.3 Detecting Motion (Integrating Passive Infrared Detectors) |
|
|
187 | (2) |
|
|
189 | (4) |
|
6.5 Measuring Distance Accurately |
|
|
193 | (4) |
|
|
197 | (1) |
|
|
198 | (4) |
|
6.8 Measuring Temperature |
|
|
202 | (4) |
|
|
206 | (2) |
|
6.10 Tracking Rotary Movement |
|
|
208 | (3) |
|
6.11 Tracking the Movement of More Than One Rotary Encoder |
|
|
211 | (3) |
|
6.12 Tracking Rotary Movement in a Busy Sketch |
|
|
214 | (2) |
|
|
216 | (4) |
|
6.14 Getting Location from a GPS |
|
|
220 | (5) |
|
6.15 Detecting Rotation Using a Gyroscope |
|
|
225 | (5) |
|
|
230 | (5) |
|
6.17 Getting Input from a Game Control Pad (PlayStation) |
|
|
235 | (2) |
|
6.18 Reading Acceleration |
|
|
237 | (4) |
|
|
241 | (48) |
|
7.1 Connecting and Using LEDs |
|
|
245 | (3) |
|
7.2 Adjusting the Brightness of an LED |
|
|
248 | (1) |
|
7.3 Driving High-Power LEDs |
|
|
249 | (3) |
|
7.4 Adjusting the Color of an LED |
|
|
252 | (3) |
|
7.5 Sequencing Multiple LEDs: Creating a Bar Graph |
|
|
255 | (3) |
|
7.6 Sequencing Multiple LEDs: Making a Chase Sequence (Knight Rider) |
|
|
258 | (1) |
|
7.7 Controlling an LED Matrix Using Multiplexing |
|
|
259 | (3) |
|
7.8 Displaying Images on an LED Matrix |
|
|
262 | (3) |
|
7.9 Controlling a Matrix of LEDs: Charlieplexing |
|
|
265 | (6) |
|
7.10 Driving a 7-Segment LED Display |
|
|
271 | (3) |
|
7.11 Driving Multidigit, 7-Segment LED Displays: Multiplexing |
|
|
274 | (2) |
|
7.12 Driving Multidigit, 7-Segment LED Displays Using MAX7221 Shift Registers |
|
|
276 | (3) |
|
7.13 Controlling an Array of LEDs by Using MAX72xx Shift Registers |
|
|
279 | (2) |
|
7.14 Increasing the Number of Analog Outputs Using PWM Extender Chips (TLC5940) |
|
|
281 | (4) |
|
7.15 Using an Analog Panel Meter as a Display |
|
|
285 | (4) |
|
|
289 | (38) |
|
8.1 Controlling the Position of a Servo |
|
|
292 | (2) |
|
8.2 Controlling One or Two Servos with a Potentiometer or Sensor |
|
|
294 | (2) |
|
8.3 Controlling the Speed of Continuous Rotation Servos |
|
|
296 | (2) |
|
8.4 Controlling Servos Using Computer Commands |
|
|
298 | (1) |
|
8.5 Driving a Brushless Motor (Using a Hobby Speed Controller) |
|
|
299 | (1) |
|
8.6 Controlling Solenoids and Relays |
|
|
300 | (2) |
|
8.7 Making an Object Vibrate |
|
|
302 | (2) |
|
8.8 Driving a Brushed Motor Using a Transistor |
|
|
304 | (2) |
|
8.9 Controlling the Direction of a Brushed Motor with an H-Bridge |
|
|
306 | (3) |
|
8.10 Controlling the Direction and Speed of a Brushed Motor with an H-Bridge |
|
|
309 | (2) |
|
8.11 Using Sensors to Control the Direction and Speed of Brushed Motors (L293 H-Bridge) |
|
|
311 | (6) |
|
8.12 Driving a Bipolar Stepper Motor |
|
|
317 | (3) |
|
8.13 Driving a Bipolar Stepper Motor (Using the EasyDriver Board) |
|
|
320 | (3) |
|
8.14 Driving a Unipolar Stepper Motor (ULN2003A) |
|
|
323 | (4) |
|
|
327 | (20) |
|
|
329 | (2) |
|
9.2 Playing a Simple Melody |
|
|
331 | (2) |
|
9.3 Generating More Than One Simultaneous Tone |
|
|
333 | (2) |
|
9.4 Generating Audio Tones and Fading an LED |
|
|
335 | (3) |
|
|
338 | (3) |
|
|
341 | (3) |
|
9.7 Making an Audio Synthesizer |
|
|
344 | (3) |
|
10 Remotely Controlling External Devices |
|
|
347 | (16) |
|
10.1 Responding to an Infrared Remote Control |
|
|
348 | (2) |
|
10.2 Decoding Infrared Remote Control Signals |
|
|
350 | (4) |
|
10.3 Imitating Remote Control Signals |
|
|
354 | (3) |
|
10.4 Controlling a Digital Camera |
|
|
357 | (2) |
|
10.5 Controlling AC Devices by Hacking a Remote-Controlled Switch |
|
|
359 | (4) |
|
|
363 | (34) |
|
11.1 Connecting and Using a Text LCD Display |
|
|
364 | (3) |
|
|
367 | (3) |
|
11.3 Turning the Cursor and Display On or Off |
|
|
370 | (2) |
|
|
372 | (3) |
|
11.5 Displaying Special Symbols |
|
|
375 | (2) |
|
11.6 Creating Custom Characters |
|
|
377 | (2) |
|
11.7 Displaying Symbols Larger Than a Single Character |
|
|
379 | (3) |
|
11.8 Displaying Pixels Smaller Than a Single Character |
|
|
382 | (3) |
|
11.9 Connecting and Using a Graphical LCD Display |
|
|
385 | (4) |
|
11.10 Creating Bitmaps for Use with a Graphical Display |
|
|
389 | (2) |
|
11.11 Displaying Text on a TV |
|
|
391 | (6) |
|
|
397 | (24) |
|
|
397 | (1) |
|
12.2 Using millis to Determine Duration |
|
|
398 | (4) |
|
12.3 More Precisely Measuring the Duration of a Pulse |
|
|
402 | (2) |
|
12.4 Using Arduino as a Clock |
|
|
404 | (8) |
|
12.5 Creating an Alarm to Periodically Call a Function |
|
|
412 | (3) |
|
12.6 Using a Real-Time Clock |
|
|
415 | (6) |
|
13 Communicating Using I2C and SPI |
|
|
421 | (38) |
|
13.1 Controlling an RGB LED Using the BlinkM Module |
|
|
425 | (5) |
|
13.2 Using the Wii Nunchuck Accelerometer |
|
|
430 | (5) |
|
13.3 Interfacing to an External Real-Time Clock |
|
|
435 | (2) |
|
13.4 Adding External EEPROM Memory |
|
|
437 | (4) |
|
13.5 Reading Temperature with a Digital Thermometer |
|
|
441 | (4) |
|
13.6 Driving Four 7-Segment LEDs Using Only Two Wires |
|
|
445 | (4) |
|
13.7 Integrating an I2C Port Expander |
|
|
449 | (2) |
|
13.8 Driving Multidigit, 7-Segment Displays Using SPI |
|
|
451 | (3) |
|
13.9 Communicating Between Two or More Arduino Boards |
|
|
454 | (5) |
|
14 Wireless Communication |
|
|
459 | (36) |
|
14.1 Sending Messages Using Low-Cost Wireless Modules |
|
|
459 | (6) |
|
14.2 Connecting Arduino to a ZigBee or 802.15.4 Network |
|
|
465 | (7) |
|
14.3 Sending a Message to a Particular XBee |
|
|
472 | (3) |
|
14.4 Sending Sensor Data Between XBees |
|
|
475 | (5) |
|
14.5 Activating an Actuator Connected to an XBee |
|
|
480 | (6) |
|
14.6 Sending Messages Using Low-Cost Transceivers |
|
|
486 | (5) |
|
14.7 Communicating with Bluetooth Devices |
|
|
491 | (4) |
|
15 Ethernet and Networking |
|
|
495 | (66) |
|
15.1 Setting Up the Ethernet Shield |
|
|
498 | (2) |
|
15.2 Obtaining Your IP Address Automatically |
|
|
500 | (2) |
|
15.3 Resolving Hostnames to IP Addresses (DNS) |
|
|
502 | (2) |
|
15.4 Requesting Data from a Web Server |
|
|
504 | (4) |
|
15.5 Requesting Data from a Web Server Using XML |
|
|
508 | (3) |
|
15.6 Setting Up an Arduino to Be a Web Server |
|
|
511 | (3) |
|
15.7 Handling Incoming Web Requests |
|
|
514 | (3) |
|
15.8 Handling Incoming Requests for Specific Pages |
|
|
517 | (4) |
|
15.9 Using HTML to Format Web Server Responses |
|
|
521 | (4) |
|
15.10 Serving Web Pages Using Forms (POST) |
|
|
525 | (3) |
|
15.11 Serving Web Pages Containing Large Amounts of Data |
|
|
528 | (7) |
|
15.12 Sending Twitter Messages |
|
|
535 | (4) |
|
15.13 Sending and Receiving Simple Messages (UDP) |
|
|
539 | (6) |
|
15.14 Getting the Time from an Internet Time Server |
|
|
545 | (5) |
|
15.15 Monitoring Pachube Feeds |
|
|
550 | (6) |
|
15.16 Sending Information to Pachube |
|
|
556 | (5) |
|
16 Using, Modifying, and Creating Libraries |
|
|
561 | (22) |
|
16.1 Using the Built-in Libraries |
|
|
561 | (2) |
|
16.2 Installing Third-Party Libraries |
|
|
563 | (2) |
|
|
565 | (3) |
|
16.4 Creating Your Own Library |
|
|
568 | (6) |
|
16.5 Creating a Library That Uses Other Libraries |
|
|
574 | (6) |
|
16.6 Updating Third-Party Libraries for Arduino 1.0 |
|
|
580 | (3) |
|
17 Advanced Coding and Memory Handling |
|
|
583 | (16) |
|
17.1 Understanding the Arduino Build Process |
|
|
584 | (3) |
|
17.2 Determining the Amount of Free and Used RAM |
|
|
587 | (2) |
|
17.3 Storing and Retrieving Numeric Values in Program Memory |
|
|
589 | (3) |
|
17.4 Storing and Retrieving Strings in Program Memory |
|
|
592 | (2) |
|
17.5 Using #define and const Instead of Integers |
|
|
594 | (1) |
|
17.6 Using Conditional Compilations |
|
|
595 | (4) |
|
18 Using the Controller Chip Hardware |
|
|
599 | (38) |
|
18.1 Storing Data in Permanent EEPROM Memory |
|
|
603 | (3) |
|
18.2 Using Hardware Interrupts |
|
|
606 | (3) |
|
18.3 Setting Timer Duration |
|
|
609 | (2) |
|
18.4 Setting Timer Pulse Width and Duration |
|
|
611 | (3) |
|
18.5 Creating a Pulse Generator |
|
|
614 | (3) |
|
18.6 Changing a Timer's PWM Frequency |
|
|
617 | (3) |
|
|
620 | (1) |
|
18.8 Measuring Pulses More Accurately |
|
|
621 | (3) |
|
18.9 Measuring Analog Values Quickly |
|
|
624 | (2) |
|
18.10 Reducing Battery Drain |
|
|
626 | (2) |
|
18.11 Setting Digital Pins Quickly |
|
|
628 | (3) |
|
18.12 Uploading Sketches Using a Programmer |
|
|
631 | (1) |
|
18.13 Replacing the Arduino Bootloader |
|
|
632 | (1) |
|
18.14 Reprogram the Uno to Emulate a Native USB device |
|
|
633 | (4) |
A Electronic Components |
|
637 | (6) |
B Using Schematic Diagrams and Data Sheets |
|
643 | (8) |
C Building and Connecting the Circuit |
|
651 | (4) |
D Tips on Troubleshooting Software Problems |
|
655 | (4) |
E Tips on Troubleshooting Hardware Problems |
|
659 | (4) |
F Digital and Analog Pins |
|
663 | (4) |
G ASCII and Extended Character Sets |
|
667 | (4) |
H Migrating to Arduino 1.0 |
|
671 | (6) |
Index |
|
677 | |