Siêu thị PDFTải ngay đi em, trời tối mất

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
PREMIUM
Số trang
512
Kích thước
10.8 MB
Định dạng
PDF
Lượt xem
1004

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 real￾time-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 nine￾month 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 microcontroller￾based 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

Tải ngay đi em, còn do dự, trời tối mất!