Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

c programming for arduino
Nội dung xem thử
Mô tả chi tiết
C Programming for Arduino
Learn how to program and use Arduino boards
with a series of engaging examples, illustrating
each core concept
Julien Bayle
BIRMINGHAM - MUMBAI
C Programming for Arduino
Copyright © 2013 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval
system, or transmitted in any form or by any means, without the prior written
permission of the publisher, except in the case of brief quotations embedded in
critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy
of the information presented. However, the information contained in this book is
sold without warranty, either express or implied. Neither the author, nor Packt
Publishing, and its dealers and distributors will be held liable for any damages
caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the
companies and products mentioned in this book by the appropriate use of capitals.
However, Packt Publishing cannot guarantee the accuracy of this information.
First published: May 2013
Production Reference: 1070513
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-84951-758-4
www.packtpub.com
Cover Image by Asher Wishkerman ([email protected])
Credits
Author
Julien Bayle
Reviewers
Darwin Grosse
Pradumn Joshi
Phillip Mayhew
Glenn D. Reuther
Steve Spence
Acquisition Editor
Edward Gordon
Erol Staveley
Lead Technical Editor
Susmita Panda
Technical Editors
Worrell Lewis
Varun Pius Rodrigues
Lubna Shaikh
Sharvari Baet
Copy Editors
Laxmi Subramanian
Sajeev Raghavan
Insiya Morbiwala
Brandt D'mello
Aditya Nair
Alfida Paiva
Project Coordinator
Leena Purkait
Proofreaders
Claire Cresswell-Lane
Martin Diver
Indexer
Tejal R. Soni
Graphics
Ronak Dhruv
Production Coordinator
Pooja Chiplunkar
Cover Work
Pooja Chiplunkar
About the Author
Julien Bayle completed his Master's degree in Biology and Computer Sciences
in 2000. After several years working with pure IT system design, he founded
Design the Media in early 2010 in order to provide his own courses, training, and
tools for art fields. As a digital artist, he has designed some huge new media art
installations, such as the permanent exhibition of La Maison des Cinématographies
de la Méditerranée (Château de la Buzine) in Marseille, France, in 2011. He has
also worked as a new media technology consultant for some private and public
entities. As a live AV performer, he plays his cold electronic music right from
New York to Marseille where he actually lives. The Arduino framework is one
of his first electronic hardware studies since early 2005, and he also designed the
famous protodeck controller with various open source frameworks. As an Art and
Technology teacher also certified by Ableton in 2010, he teaches a lot of courses
related to the digital audio workstation Ableton Live, the real-time graphical
programming framework Max 6, and Processing and Arduino.
As a minimalist digital artist, he works at the crossroads between sound, visual,
and data. He explores the relationship between sounds and visuals through his
immersive AV installations, his live performances, and his released music. His work,
often described as "complex, intriguing, and relevant", tries to break classical codes
to bring his audience a new vision of our world through his pure digital and realtime-generated stimuli.
He's deeply involved in the open source community and loves to share and
provide workshops and masterclasses online and on-site too. His personal website
is http://julienbayle.net.
Acknowledgement
I would like to thank my sweet wife Angela and our daughter Alice for having been
my unconditional supporters. Special thanks to our son Max, who was born between
the writing of Chapter 11 and Chapter 12!
I would also like to thank my two great friends Laurent Boghossian and Denis
Laffont because they were there for me all through the course of this huge project
with their advices, jokes, and unconditional support.
I would like to extend many thanks to two very nice persons and friends whom I
asked to review this book for me: Glenn D. Reuther and Darwin Grosse.
I thank the following great programmers who coded some libraries that have been
used in this book: Marcello Romani (the SimpleTimer library), Juan Hernandez (the
ShiftOutX library), Thomas Ouellet Fredericks (the Bounce library), Tim Barrass (the
Mozzi library), David A. Mellis from MIT (the PCM library), Michael Margolis and
Bill Perry (the glcd-arduino library), and Markku Rossi (Arduino Twitter Library
with OAuth Support).
I want to thank the creators of the following powerful frameworks used in this book
besides the Arduino framework itself: Max 6, Processing, and Fritzing.
Lastly, I'd like to hug Massimo Banzi and Arduino's project team for having initiated
this great project and inspired us so much.
About the Reviewers
Darwin Grosse is the Director of Education and Services with Cycling '74, the
developer of the Max media programming system. He is also an Adjunct Professor
at the University of Denver, and teaches sonic art, programming, and hardware
interface in the Emerging Digital Practices department.
Pradumn Joshi is currently pursuing his Bachelor's degree in Electrical
Engineering from NIT Surat. He is an avid elocutionist and debate enthusiast, and
is also interested in economics, freelance writing, and Western music. His area
of technical expertise lies in open source hardware development and embedded
systems.
Phillip Mayhew is a Bachelor of Science in Computer Science from North
Carolina State University. He is the Founder and Managing Principal of Rextency
Technologies LLC based in Statesville, North Carolina. His primary expertise is in
software application performance testing and monitoring.
Glenn D. Reuther's own personal journey and fascination began with music
technology during the 1970s with private lessons in "Electronic Music Theory and
Acoustic Physics". He then attended Five Towns College of Music in NY and has
been a home studio operator since 1981, playing multiple instruments and designing
a few devices for his studio configuration.
Since then, he has spent several years with Grumman Aerospace as a Ground and
Flight Test Instrumentation Technician, before moving through to the IT field.
Beginning with an education in Computer Operations and Programming, he went
on to work as network and system engineer having both Microsoft and Novell
certifications. After over 10 years at the University of Virginia as Sr. Systems
Engineer, he spends much of his spare time working with the current state of music
technology. His website is http://lico.drupalgardens.com.
He is also the author of "One Complete Revelation", a photo journal of his ninemonth trek throughout Europe during the early 90s.
I would like to thank the author for his friendship, and I would
also like to thank my wonderful wife Alice and son Glenn for their
patience, understanding, and support during the editing process of
this book.
Steve Spence has been a veteran of the IT industry for more than 20 years,
specializing in network design and security. Currently he designs microcontrollerbased process controls and database-driven websites. He lives off grid and teaches
solar and wind power generation workshops. He's a former firefighter and rescue
squad member, and a current Ham Radio operator.
In the past, he's been a technical reviewer of various books on alternative fuels
(From the Fryer to the Fuel Tank, Joshua Tickell) and authored DIY alternative
energy guides.
www.PacktPub.com
Support files, eBooks, discount offers
and more
You might want to visit www.PacktPub.com for support files and downloads related to
your book.
Did you know that Packt offers eBook versions of every book published, with PDF and
ePub files available? You can upgrade to the eBook version at www.PacktPub.com and
as a print book customer, you are entitled to a discount on the eBook copy. Get in touch
with us at [email protected] for more details.
At www.PacktPub.com, you can also read a collection of free technical articles, sign up
for a range of free newsletters and receive exclusive discounts and offers on Packt books
and eBooks.
TM
http://PacktLib.PacktPub.com
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital
book library. Here, you can access, read and search across Packt's entire library of books.
Why Subscribe? • Fully searchable across every book published by Packt
• Copy and paste, print and bookmark content
• On demand and accessible via web browser
Free Access for Packt account holders
If you have an account with Packt at www.PacktPub.com, you can use this to access
PacktLib today and view nine entirely free books. Simply use your login credentials for
immediate access.
Table of Contents
Preface 1
Chapter 1: Let's Plug Things 7
What is a microcontroller? 7
Presenting the big Arduino family 8
About hardware prototyping 11
Understanding Arduino software architecture 13
Installing the Arduino development environment (IDE) 15
Installing the IDE 15
How to launch the environment? 16
What does the IDE look like? 16
Installing Arduino drivers 19
Installing drivers for Arduino Uno R3 19
Installing drivers for Arduino Duemilanove, Nano, or Diecimilla 20
What is electricity? 20
Voltage 21
Current and power 21
What are resistors, capacitors, and so on? 22
Wiring things and Fritzing 23
What is Fritzing? 25
Power supply fundamentals 27
Hello LED! 28
What do we want to do exactly? 29
How can I do that using C code? 29
Let's upload the code, at last! 34
Summary 34
Table of Contents
[ ii
]
Chapter 2: First Contact with C 35
An introduction to programming 35
Different programming paradigms 37
Programming style 37
C and C++? 38
C is used everywhere 38
Arduino is programmed with C and C++ 39
The Arduino native library and other libraries 39
Discovering the Arduino native library 40
Other libraries included and not directly provided 43
Some very useful included libraries 43
Some external libraries 44
Checking all basic development steps 44
Using the serial monitor 46
Baud rate 47
Serial communication with Arduino 47
Serial monitoring 48
Making Arduino talk to us 49
Adding serial communication to Blink250ms 49
Serial functions in more detail 53
Serial.begin() 53
Serial.print() and Serial.println() 53
Digging a bit… 53
Talking to the board from the computer 54
Summary 54
Chapter 3: C Basics – Making You Stronger 55
Approaching variables and types of data 55
What is a variable? 56
What is a type? 56
The roll over/wrap concept 58
Declaring and defining variables 58
Declaring variables 58
Defining variables 59
String 60
String definition is a construction 61
Using indexes and search inside String 61
charAt() 61
indexOf() and lastIndexOf() 62
startsWith() and endsWith() 63
Concatenation, extraction, and replacement 63
Concatenation 64
Extract and replace 65
Table of Contents
[ iii
]
Other string functions 68
toCharArray() 68
toLowerCase() and toUpperCase() 68
trim() 68
length() 68
Testing variables on the board 68
Some explanations 71
The scope concept 72
static, volatile, and const qualifiers 73
static 74
volatile 75
const 75
Operators, operator structures, and precedence 76
Arithmetic operators and types 76
Character types 76
Numerical types 77
Condensed notations and precedence 77
Increment and decrement operators 78
Type manipulations 79
Choosing the right type 79
Implicit and explicit type conversions 80
Implicit type conversion 80
Explicit type conversion 82
Comparing values and Boolean operators 82
Comparison expressions 82
Combining comparisons with Boolean operators 83
Combining negation and comparisons 84
Adding conditions in the code 86
if and else conditional structure 86
switch…case…break conditional structure 89
Ternary operator 91
Making smart loops for repetitive tasks 91
for loop structure 91
Playing with increment 93
Using imbricated for loops or two indexes 93
while loop structure 95
do…while loop structure 96
Breaking the loops 96
Infinite loops are not your friends 97
Summary 98
Table of Contents
[ iv ]
Chapter 4: Improve Programming with Functions,
Math, and Timing 99
Introducing functions 99
Structure of a function 100
Creating function prototypes using the Arduino IDE 100
Header and name of functions 100
Body and statements of functions 101
Benefits of using functions 103
Easier coding and debugging 103
Better modularity helps reusability 104
Better readability 105
C standard mathematical functions and Arduino 105
Trigonometric C functions in the Arduino core 106
Some prerequisites 106
Trigonometry functions 109
Exponential functions and some others 110
Approaching calculation optimization 110
The power of the bit shift operation 111
What are bit operations? 111
Binary numeral system 111
AND, OR, XOR, and NOT operators 112
Bit shift operations 113
It is all about performance 114
The switch case labels optimization techniques 114
Optimizing the range of cases 114
Optimizing cases according to their frequency 115
The smaller the scope, the better the board 115
The Tao of returns 116
The direct returns concept 116
Use void if you don't need return 117
Secrets of lookup tables 117
Table initialization 118
Replacing pure calculation with array index operations 119
The Taylor series expansion trick 119
The Arduino core even provides pointers 120
Time measure 121
Does the Arduino board own a watch? 121
The millis() function 121
The micros() function 123
Delay concept and the program flow 124
What does the program do during the delay? 124
The polling concept – a special interrupt case 127
The interrupt handler concept 128
What is a thread? 129
A real-life polling library example 130
Summary 134
Table of Contents
[ v ]
Chapter 5: Sensing with Digital Inputs 135
Sensing the world 135
Sensors provide new capacities 136
Some types of sensors 136
Quantity is converted to data 137
Data has to be perceived 138
What does digital mean? 138
Digital and analog concepts 138
Inputs and outputs of Arduino 139
Introducing a new friend – Processing 140
Is Processing a language? 140
Let's install and launch it 141
A very familiar IDE 142
Alternative IDEs and versioning 145
Checking an example 145
Processing and Arduino 149
Pushing the button 150
What is a button, a switch? 150
Different types of switches 150
A basic circuit 150
Wires 151
The circuit in the real world 151
The pull-up and pull-down concept 153
The pseudocode 154
The code 154
Making Arduino and Processing talk 155
The communication protocol 155
The Processing code 157
The new Arduino firmware talk-ready 163
Playing with multiple buttons 165
The circuit 166
The Arduino code 168
The Processing code 170
Understanding the debounce concept 173
What? Who is bouncing? 173
How to debounce 174
Summary 177
Chapter 6: Sensing the World – Feeling with Analog Inputs 179
Sensing analog inputs and continuous values 180
How many values can we distinguish? 180
Reading analog inputs 181
The real purpose of the potentiometer 181
Changing the blinking delay of an LED with a potentiometer 182
Table of Contents
[ vi ]
How to turn the Arduino into a low voltage voltmeter? 184
Introducing Max 6, the graphical programming framework 186
A brief history of Max/MSP 187
Global concepts 189
What is a graphical programming framework? 189
Max, for the playground 190
MSP, for sound 193
Jitter, for visuals 194
Gen, for a new approach to code generation 196
Summarizing everything in one table 198
Installing Max 6 198
The very first patch 199
Playing sounds with the patch 201
Controlling software using hardware 203
Improving the sequencer and connecting Arduino 203
Let's connect Arduino to Max 6 203
The serial object in Max 6 204
Tracing and debugging easily in Max 6 206
Understanding Arduino messages in Max 6 206
What is really sent on the wire? 209
Extracting only the payload? 211
ASCII conversions and symbols 212
Playing with sensors 214
Measuring distances 214
Reading a datasheet? 215
Let's wire things 217
Coding the firmware 218
Reading the distance in Max 6 220
Measuring flexion 222
Resistance calculations 224
Sensing almost everything 226
Multiplexing with a CD4051 multiplexer/demultiplexer 226
Multiplexing concepts 227
Multiple multiplexing/demultiplexing techniques 227
Space-division multiplexing 228
Frequency-division multiplexing 228
Time-division multiplexing 229
The CD4051B analog multiplexer 230
What is an integrated circuit? 230
Wiring the CD4051B IC? 231
Supplying the IC 232
Analog I/O series and the common O/I 232
Selecting the digital pin 233
Summary 237