Sams Teach Yourself Arduino Programming in 24 Hours

Pearson, 2014

by Richard Blum



Description

In just 24 sessions of one hour or less, Sams Teach Yourself Arduino Programming in 24 Hours teaches you C programmingon Arduino, so you can start creating inspired “DIY” hardwareprojects of your own! Using this book’s straightforward, step-by-stepapproach, you’ll walk through everything from setting up yourprogramming environment to mastering C syntax and features, interfacing your Arduino to performing full-fledged prototyping.Every hands-on lesson and example builds on what you’ve alreadylearned, giving you a rock-solid foundation for real-world success!

Table of Contents

Introduction . . . . . . . . . . . . . . . . . . . . . . 1
HOUR 1: Introduction to the Arduino . . . . . . . . . . 7
What Is an Arduino?. . . . . . . . . . . . . . . . . . . 7
Introducing the Arduino Family . . . . . . . . . . . . . 11
Exploring Arduino Shields . . . . . . . . . . . . . . . 18
Summary . . . . . . . . . . . . . . . . . . . . . . . . 20
Workshop. . . . . . . . . . . . . . . . . . . . . . . . 20
HOUR 2: Creating an Arduino Programming Environment . .. 23
Exploring Microcontroller Internals . . . . . . . . . .. 23
Moving Beyond Machine Code. . . . . . . . . . . . . . .. 27
Creating Arduino Programs . . . . . . . . . . . . . . .. 29
Installing the Arduino IDE. . . . . . . . . . . . . . .. 32
Summary . . . . . . . . . . . . . . . . . . . . . . . .. 37
Workshop. . . . . . . . . . . . . . . . . . . . . . . .. 38
HOUR 3: Using the Arduino IDE . . . . . . . . . . . . .. 39
Overview of the IDE . . . . . . . . . . . . . . . . . .. 39
Walking Through the Menus . . . . . . . . . . . . . . .. 40
Exploring the Toolbar . . . . . . . . . . . . . . . . .. 49
Exploring the Message Area and Console Window. . . . . . 49
Setting Up the Arduino IDE . . . . . . . . . . . . . . . 51
Using the Serial Monitor . . . . . . . . . . . . . . . . 52
Summary . . . . . . . . . . . . . . . . . . . . . . . .. 54
Workshop. . . . . . . . . . . . . . . . . . . . . . . .. 54
HOUR 4: Creating an Arduino Program . . . . . . . . . .. 57
Building an Arduino Sketch . . . . . . . . . . . . . . . 57
Creating Your First Sketch . . . . . . . . . . . . . . . 59
Interfacing with Electronic Circuits . . . . . . . . . . 64
Summary . . . . . . . . . . . . . . . . . . . . . . . .. 70
Workshop. . . . . . . . . . . . . . . . . . . . . . . .. 71
HOUR 5: Learning the Basics of C . . . . . . . . . . . . 75
Working with Variables. . . . . . . . . . . . . . . . .. 75
Using Operators . . . . . . . . . . . . . . . . . . . .. 80
Exploring Arduino Functions . . . . . . . . . . . . . .. 83
Summary . . . . . . . . . . . . . . . . . . . . . . . .. 87
Workshop. . . . . . . . . . . . . . . . . . . . . . . .. 87
HOUR 6: Structured Commands . . . . . . . . . . . . . . 89
Working with the if Statement . . . . . . . . . . . . . 89
Grouping Multiple Statements . . . . . . . . . . . . . . 90
Using else Statements . . . . . . . . . . . . . . . .. . 92
Using else if Statements . . . . . . . . . . . . . . . . 93
Understanding Comparison Conditions . . . . . . . . .. . 95
Creating Compound Conditions. . . . . . . . . . . . .. . 97
Negating a Condition Check . . . . . . . . . . . . . . . 98
Expanding with the switch Statement . . . . . . . . .. . 98
Summary . . . . . . . . . . . . . . . . . . . . . . .. . 99
Workshop. . . . . . . . . . . . . . . . . . . . . . .. . 100
HOUR 7: Programming Loops . . . . . . . . . . . . . .. . 103
Understanding Loops. . . . . . . . . . . . . . . . . . . 103
Using while Loops . . . . . . . . . . . . . . . . . .. . 104
Using do-while Loops . . . . . . . . . . . . . . . . . . 106
Using for Loops . . . . . . . . . . . . . . . . . . .. . 107
Using Arrays in Your Loops . . . . . . . . . . . . . . . 109
Using Multiple Variables . . . . . . . . . . . . . . . . 112
Nesting Loops . . . . . . . . . . . . . . . . . . . .. . 112
Controlling Loops . . . . . . . . . . . . . . . . . .. . 113
Summary . . . . . . . . . . . . . . . . . . . . . . .. . 116
Workshop. . . . . . . . . . . . . . . . . . . . . . .. . 116
HOUR 8: Working with Strings. . . . . . . . . . . . .. . 119
What’s a String? . . . . . . . . . . . . . . . . . . . . 119
Understanding C-Style Strings . . . . . . . . . . . .. . 120
Introducing the Arduino String Object . . . . . . . .. . 126
Manipulating String Objects . . . . . . . . . . . . .. . 130
Summary . . . . . . . . . . . . . . . . . . . . . . .. . 131
Workshop. . . . . . . . . . . . . . . . . . . . . . . . .132
HOUR 9: Implementing Data Structures. . . . . . . . .. . 133
What’s a Data Structure?. . . . . . . . . . . . . . .. . 133
Creating Data Structures . . . . . . . . . . . . . . . . 134
Using Data Structures . . . . . . . . . . . . . . . . .. 136
Manipulating Data Structures . . . . . . . . . . . . . . 138
Arrays of Structures . . . . . . . . . . . . . . . . . . 140
Working with Unions . . . . . . . . . . . . . . . . . .. 142
Summary . . . . . . . . . . . . . . . . . . . . . . . .. 145
Workshop. . . . . . . . . . . . . . . . . . . . . . . .. 145
HOUR 10: Creating Functions . . . . . . . . . . . . . .. 147
Basic Function Use . . . . . . . . . . . . . . . . . . . 147
Returning a Value. . . . . . . . . . . . . . . . . . . . 150
Passing Values to Functions . . . . . . . . . . . . . .. 152
Handling Variables in Functions . . . . . . . . . . . .. 154
Calling Functions Recursively. . . . . . . . . . . . . . 158
Summary . . . . . . . . . . . . . . . . . . . . . . . .. 160
Workshop. . . . . . . . . . . . . . . . . . . . . . . .. 160
HOUR 11: Pointing to Data . . . . . . . . . . . . . . .. 163
What Is a Pointer? . . . . . . . . . . . . . . . . . . . 163
Working with Pointers . . . . . . . . . . . . . . . . . 166
Using Special Types of Pointers. . . . . . . . . . . . . 167
Pointer Arithmetic. . . . . . . . . . . . . . . . . . . 168
Strings and Pointers . . . . . . . . . . . . . . . . . . 171
Combining Pointers and Structures. . . . . . . . . . . . 173
Using Pointers with Functions . . . . . . . . . . . . . 176
Summary . . . . . . . . . . . . . . . . . . . . . . . . 179
Workshop. . . . . . . . . . . . . . . . . . . . . . . . 179
HOUR 12: Storing Data . . . . . . . . . . . . . . . . .. 181
Arduino Memory Refresher . . . . . . . . . . . . . . . . 181
Taking a Closer Look at SRAM . . . . . . . . . . . . . . 183
Creating Dynamic Variables . . . . . . . . . . . . . . . 185
Using Flash to Store Data. . . . . . . . . . . . . . . . 189
Using the EEPROM Memory . . . . . . . . . . . . . . . . 194
Summary . . . . . . . . . . . . . . . . . . . . . . . . 198
Workshop. . . . . . . . . . . . . . . . . . . . . . . . 198
HOUR 13: Using Libraries . . . . . . . . . . . . . . . . 201
What Is a Library? . . . . . . . . . . . . . . . . . . . 201
Using the Standard Libraries . . . . . . . . . . . . . . 203
Using Contributed Libraries . . . . . . . . . . . . . . 206
Creating Your Own Libraries . . . . . . . . . . . . . . 208
Summary . . . . . . . . . . . . . . . . . . . . . . .. . 214
Workshop. . . . . . . . . . . . . . . . . . . . . . .. . 215
HOUR 14: Working with Digital Interfaces . . . . . . . . 219
Digital Overview . . . . . . . . . . . . . . . . . . . 219
Using Digital Outputs . . . . . . . . . . . . . . . .. . 221
Experimenting with Digital Output . . . . . . . . . . . 223
Working with Digital Inputs . . . . . . . . . . . . .. . 226
Experimenting with Digital Input. . . . . . . . . . .. . 229
Summary . . . . . . . . . . . . . . . . . . . . . . .. . 231
Workshop. . . . . . . . . . . . . . . . . . . . . . .. . 232
HOUR 15: Interfacing with Analog Devices . . . . . . . . 235
Analog Overview . . . . . . . . . . . . . . . . . . .. . 235
Working with Analog Input. . . . . . . . . . . . . . . . 238
Modifying the Input Result . . . . . . . . . . . . . . 241
Using Input Mapping . . . . . . . . . . . . . . . . .. . 242
Changing the Reference Voltage. . . . . . . . . . . .. . 245
Analog Output . . . . . . . . . . . . . . . . . . . .. . 246
Using the Analog Output. . . . . . . . . . . . . . . . . 246
Summary . . . . . . . . . . . . . . . . . . . . . . .. . 248
Workshop. . . . . . . . . . . . . . . . . . . . . . .. . 248
HOUR 16: Adding Interrupts . . . . . . . . . . . . . . . 251
What Are Interrupts?. . . . . . . . . . . . . . . . .. . 251
Types of Interrupts . . . . . . . . . . . . . . . . .. . 252
Using External Interrupts. . . . . . . . . . . . . . . 254
Testing External Interrupts. . . . . . . . . . . . . . . 255
Using Pin Change Interrupts . . . . . . . . . . . . . . 260
Working with Timer Interrupts. . . . . . . . . . . . . . 262
Ignoring Interrupts . . . . . . . . . . . . . . . . . . 264
Summary . . . . . . . . . . . . . . . . . . . . . . . . 265
Workshop. . . . . . . . . . . . . . . . . . . . . . .. . 265
HOUR 17: Communicating with Devices. . . . . . . . . . . 267
Serial Communication Protocols. . . . . . . . . . . . . 267
Using the Serial Port . . . . . . . . . . . . . . . . . 268
Working with the SPI Port . . . . . . . . . . . . . . . 274
Working with I2C . . . . . . . . . . . . . . . . . . . . 277
Summary . . . . . . . . . . . . . . . . . . . . . . . . 284
Workshop. . . . . . . . . . . . . . . . . . . . . . . . 284
HOUR 18: Using Sensors . . . . . . . . . . . . . . . . . 287
Interfacing with Analog Sensors . . . . . . . . . . . . 287
Working with Voltage . . . . . . . . . . . . . . . . . . 288
Using a Voltage-Based Sensor. . . . . . . . . . . . . . 293
Working with Resistance Output . . . . . . . . . . . . . 295
Using a Resistance-Based Sensor. . . . . . . . . . . . . 296
Using Touch Sensors . . . . . . . . . . . . . . . . . . 297
Working with Touch Sensors . . . . . . . . . . . . . . . 298
Summary . . . . . . . . . . . . . . . . . . . . . . . . 300
Workshop. . . . . . . . . . . . . . . . . . . . . . . . 301
HOUR 19: Working with Motors . . . . . . . . . . . . . . 303
Types of Motors . . . . . . . . . . . . . . . . . . . . 303
Using DC Motors. . . . . . . . . . . . . . . . . . . . . 305
Experimenting with Motors . . . . . . . . . . . . . . . 308
Using Servo Motors . . . . . . . . . . . . . . . . . . . 313
Summary . . . . . . . . . . . . . . . . . . . . . . . . 317
Workshop. . . . . . . . . . . . . . . . . . . . . . . . 317
HOUR 20: Using an LCD . . . . . . . . . . . . . . . . . 319
What Is an LCD? . . . . . . . . . . . . . . . . . . . . 319
Interfacing with LCD Devices . . . . . . . . . . . . . . 321
The LiquidCrystal Library . . . . . . . . . . . . . . . 325
The LCD Shield . . . . . . . . . . . . . . . . . . . . . 329
Summary . . . . . . . . . . . . . . . . . . . . . . . . 335
Workshop. . . . . . . . . . . . . . . . . . . . . . . . 335
HOUR 21: Working with the Ethernet Shield. . . . . . . . 337
Connecting the Arduino to a Network . . . . . . . . . . 337
The Ethernet Shield Library . . . . . . . . . . . . . . 340
Writing a Network Program. . . . . . . . . . . . . . . . 349
Summary . . . . . . . . . . . . . . . . . . . . . . . . 351
Workshop. . . . . . . . . . . . . . . . . . . . . . . . 352
HOUR 22: Advanced Network Programming. . . . . . . . . . 355
The Web Protocol . . . . . . . . . . . . . . . . . . . . 355
Reading Sensor Data from a Web Server . . . . . . . . . 361
Controlling an Arduino from the Web . . . . . . . . . . 364
Summary . . . . . . . . . . . . . . . . . . . . . . . . 370
Workshop. . . . . . . . . . . . . . . . . . . . . . . . 370
HOUR 23: Handling Files. . . . . . . . . . . . . . . . . 373
What Is an SD Card Reader? . . . . . . . . . . . . . . . 373
SD Cards and the Arduino . . . . . . . . . . . . . . . . 375
The SD Library . . . . . . . . . . . . . . . . . . . . . 376
Interfacing with the SD Card . . . . . . . . . . . . . . 378
Storing Sensor Data. . . . . . . . . . . . . . . . . . . 382
Summary . . . . . . . . . . . . . . . . . . . . . . . . 385
Workshop. . . . . . . . . . . . . . . . . . . . . . . . 385
HOUR 24: Prototyping Projects . . . . . . . . . . . . . 387
Determining Project Requirements . . . . . . . . . . . . 387
Determining Interface Requirements. . . . . . . . . . . 389
Listing Components . . . . . . . . . . . . . . . . . . . 391
Creating a Schematic . . . . . . . . . . . . . . . . . . 392
Creating the Breadboard Circuit. . . . . . . . . . . . . 393
Designing the Sketch . . . . . . . . . . . . . . . . . . 394
Writing the Sketch . . . . . . . . . . . . . . . . . . . 395
Testing the Sketch . . . . . . . . . . . . . . . . . . . 398
Creating a Prototype Board . . . . . . . . . . . . . . . 399
Summary . . . . . . . . . . . . . . . . . . . . . . . . 401
Workshop. . . . . . . . . . . . . . . . . . . . . . . . 401

Comments

No comments posted yet. Add a comment


Useful Web sites:



Linux


DistroWatch
Here's where I keep up to date on the latest Linux distribution news.

Ubuntu
The most popular desktop Linux distribution.

Fedora
A popular full-featured Linux distribution, great for both desktops and servers.


Web Programming


PHP online manual
The ultimate resource in all PHP programming topics

MySQL online manual
The MySQL database online manual.

W3Schools
A great online tutorial and reference for many Web programming languages.


Bass Guitar


Fender basses
One of my favorites, I love the Fender Jazz bass. It's such a versatile instrument you can take it to just about any gig!

Lakland basses
The Lakland Skyline 55-01 bass is yet another of my favorite basses!


Bible Study


Reformed Theological Seminary
When I'm not reading computer books, I'm doing bible studies. The Reformed Theological Seminary has some great online courses for free that cover the basics of reformed theology.

BiblicalTraining.org
A smorgasbord of more reformed and evangelical seminary course recordings, all for free!