Arduino Cookbook
Arduino Cookbook
0LFKDHO0DUJROLV
Beijing • Cambridge • Farnham • Köln • Sebastopol • Tokyo
Arduino Cookbook E\0LFKDHO0DUJROLV
&RS\ULJKW0LFKDHO0DUJROLVDQG1LFKRODV:HOGLQ$OOULJKWVUHVHUYHG 3ULQWHGLQWKH8QLWHG6WDWHVRI$PHULFD
3XEOLVKHGE\2¦5HLOO\0HGLD,QF*UDYHQVWHLQ+LJKZD\1RUWK6HEDVWRSRO&$
2¦5HLOO\ERRNVPD\EHSXUFKDVHGIRUHGXFDWLRQDOEXVLQHVVRUVDOHVSURPRWLRQDOXVH2QOLQHHGLWLRQV DUHDOVRDYDLODEOHIRUPRVWWLWOHVKWWSP\VDIDULERRNVRQOLQHFRP)RUPRUHLQIRUPDWLRQFRQWDFWRXU FRUSRUDWHLQVWLWXWLRQDOVDOHVGHSDUWPHQWRUFRUSRUDWH#RUHLOO\FRP
Editors: 6LPRQ6W/DXUHQWDQG%ULDQ-HSVRQ
Production Editor: 7HUHVD(OVH\
Copyeditor: $XGUH\'R\OH
Proofreader: 7HUHVD(OVH\
Indexer: /XFLH+DVNLQV
Cover Designer: .DUHQ0RQWJRPHU\
Interior Designer: 'DYLG)XWDWR
Illustrator: 5REHUW5RPDQR
Printing History:
0DUFK )LUVW(GLWLRQ
1XWVKHOO+DQGERRNWKH1XWVKHOO+DQGERRNORJRDQGWKH2¦5HLOO\ORJRDUHUHJLVWHUHGWUDGHPDUNVRI 2¦5HLOO\0HGLD,QF$UGXLQR&RRNERRNWKHLPDJHRIDWR\UDEELWDQGUHODWHGWUDGHGUHVVDUHWUDGHPDUNV RI2¦5HLOO\0HGLD,QF
0DQ\RIWKHGHVLJQDWLRQVXVHGE\PDQXIDFWXUHUVDQGVHOOHUVWRGLVWLQJXLVKWKHLUSURGXFWVDUHFODLPHGDV WUDGHPDUNV:KHUHWKRVHGHVLJQDWLRQVDSSHDULQWKLVERRNDQG2¦5HLOO\0HGLD,QFZDVDZDUHRID WUDGHPDUNFODLPWKHGHVLJQDWLRQVKDYHEHHQSULQWHGLQFDSVRULQLWLDOFDSV
:KLOHHYHU\SUHFDXWLRQKDVEHHQWDNHQLQWKHSUHSDUDWLRQRIWKLVERRNWKHSXEOLVKHUDQGDXWKRUVDVVXPH QRUHVSRQVLELOLW\IRUHUURUVRURPLVVLRQVRUIRUGDPDJHVUHVXOWLQJIURPWKHXVHRIWKHLQIRUPDWLRQFRQ WDLQHGKHUHLQ
,6%1
Table of Contents
Preface . . . xiii 1. Getting Started . . . 1
,QVWDOOLQJWKH,QWHJUDWHG'HYHORSPHQW(QYLURQPHQW,'(
6HWWLQJ8SWKH$UGXLQR%RDUG
8VLQJWKH,QWHJUDWHG'HYHORSPHQW(QYLURQPHQW,'(WR3UHSDUH
DQ$UGXLQR6NHWFK
8SORDGLQJDQG5XQQLQJWKH%OLQN6NHWFK
&UHDWLQJDQG6DYLQJD6NHWFK
8VLQJ$UGXLQR
2. Making the Sketch Do Your Bidding . . . 19
6WUXFWXULQJDQ$UGXLQR3URJUDP
8VLQJ6LPSOH3ULPLWLYH7\SHV9DULDEOHV
8VLQJ)ORDWLQJ3RLQW1XPEHUV
:RUNLQJZLWK*URXSVRI9DOXHV
8VLQJ$UGXLQR6WULQJ)XQFWLRQDOLW\
8VLQJ&&KDUDFWHU6WULQJV
6SOLWWLQJ&RPPD6HSDUDWHG7H[WLQWR*URXSV
&RQYHUWLQJD1XPEHUWRD6WULQJ
&RQYHUWLQJD6WULQJWRD1XPEHU
6WUXFWXULQJ<RXU&RGHLQWR)XQFWLRQDO%ORFNV
5HWXUQLQJ0RUH7KDQ2QH9DOXHIURPD)XQFWLRQ
7DNLQJ$FWLRQV%DVHGRQ&RQGLWLRQV
5HSHDWLQJD6HTXHQFHRI6WDWHPHQWV
5HSHDWLQJ6WDWHPHQWVZLWKD&RXQWHU
%UHDNLQJ2XWRI/RRSV
7DNLQJD9DULHW\RI$FWLRQV%DVHGRQD6LQJOH9DULDEOH &RPSDULQJ&KDUDFWHUDQG1XPHULF9DOXHV
&RPSDULQJ6WULQJV
3HUIRUPLQJ/RJLFDO&RPSDULVRQV
v
3HUIRUPLQJ%LWZLVH2SHUDWLRQV
&RPELQLQJ2SHUDWLRQVDQG$VVLJQPHQW
3. Using Mathematical Operators . . . 61
$GGLQJ6XEWUDFWLQJ0XOWLSO\LQJDQG'LYLGLQJ
,QFUHPHQWLQJDQG'HFUHPHQWLQJ9DOXHV
)LQGLQJWKH5HPDLQGHU$IWHU'LYLGLQJ7ZR9DOXHV
'HWHUPLQLQJWKH$EVROXWH9DOXH
&RQVWUDLQLQJD1XPEHUWRD5DQJHRI9DOXHV )LQGLQJWKH0LQLPXPRU0D[LPXPRI6RPH9DOXHV
5DLVLQJD1XPEHUWRD3RZHU
7DNLQJWKH6TXDUH5RRW
5RXQGLQJ)ORDWLQJ3RLQW1XPEHUV8SDQG'RZQ
8VLQJ7ULJRQRPHWULF)XQFWLRQV
*HQHUDWLQJ5DQGRP1XPEHUV
6HWWLQJDQG5HDGLQJ%LWV
6KLIWLQJ%LWV
([WUDFWLQJ+LJKDQG/RZ%\WHVLQDQLQWRUORQJ
)RUPLQJDQLQWRUORQJIURP+LJKDQG/RZ%\WHV
4. Serial Communications . . . 81
6HQGLQJ'HEXJ,QIRUPDWLRQIURP$UGXLQRWR<RXU&RPSXWHU 6HQGLQJ)RUPDWWHG7H[WDQG1XPHULF'DWDIURP$UGXLQR
5HFHLYLQJ6HULDO'DWDLQ$UGXLQR
6HQGLQJ0XOWLSOH7H[W)LHOGVIURP$UGXLQRLQD6LQJOH0HVVDJH 5HFHLYLQJ0XOWLSOH7H[W)LHOGVLQD6LQJOH0HVVDJHLQ$UGXLQR
6HQGLQJ%LQDU\'DWDIURP$UGXLQR
5HFHLYLQJ%LQDU\'DWDIURP$UGXLQRRQD&RPSXWHU 6HQGLQJ%LQDU\9DOXHVIURP3URFHVVLQJWR$UGXLQR
6HQGLQJWKH9DOXHRI0XOWLSOH$UGXLQR3LQV
+RZWR0RYHWKH0RXVH&XUVRURQD3&RU0DF
&RQWUROOLQJ*RRJOH(DUWK8VLQJ$UGXLQR
/RJJLQJ$UGXLQR'DWDWRD)LOHRQ<RXU&RPSXWHU 6HQGLQJ'DWDWR7ZR6HULDO'HYLFHVDWWKH6DPH7LPH 5HFHLYLQJ6HULDO'DWDIURP7ZR'HYLFHVDWWKH6DPH7LPH 6HWWLQJ8S3URFHVVLQJRQ<RXU&RPSXWHUWR6HQG
DQG5HFHLYH6HULDO'DWD
5. Simple Digital and Analog Input . . . 133
8VLQJD6ZLWFK
8VLQJD6ZLWFK:LWKRXW([WHUQDO5HVLVWRUV
5HOLDEO\'HWHFWLQJWKH&ORVLQJRID6ZLWFK
'HWHUPLQLQJ+RZ/RQJD6ZLWFK,V3UHVVHG
5HDGLQJD.H\SDG
5HDGLQJ$QDORJ9DOXHV
&KDQJLQJWKH5DQJHRI9DOXHV
5HDGLQJ0RUH7KDQ6L[$QDORJ,QSXWV
'LVSOD\LQJ9ROWDJHV8SWR9
5HVSRQGLQJWR&KDQJHVLQ9ROWDJH
0HDVXULQJ9ROWDJHV0RUH7KDQ99ROWDJH'LYLGHUV
6. Getting Input from Sensors . . . 165
'HWHFWLQJ0RYHPHQW
'HWHFWLQJ/LJKW
'HWHFWLQJ0RWLRQ,QWHJUDWLQJ3DVVLYH,QIUDUHG'HWHFWRUV
0HDVXULQJ'LVWDQFH
0HDVXULQJ'LVWDQFH$FFXUDWHO\
'HWHFWLQJ9LEUDWLRQ
'HWHFWLQJ6RXQG
0HDVXULQJ7HPSHUDWXUH
5HDGLQJ5),'7DJV
7UDFNLQJWKH0RYHPHQWRID'LDO
7UDFNLQJWKH0RYHPHQWRI0RUH7KDQ2QH5RWDU\(QFRGHU 7UDFNLQJWKH0RYHPHQWRID'LDOLQD%XV\6NHWFK
8VLQJD0RXVH
*HWWLQJ/RFDWLRQIURPD*36
'HWHFWLQJ5RWDWLRQ8VLQJD*\URVFRSH
'HWHFWLQJ'LUHFWLRQ
*HWWLQJ,QSXWIURPD*DPH&RQWURO3DG3OD\6WDWLRQ
5HDGLQJ$FFHOHUDWLRQ
7. Visual Output . . . 217
&RQQHFWLQJDQG8VLQJ/('V
$GMXVWLQJWKH%ULJKWQHVVRIDQ/('
'ULYLQJ+LJK3RZHU/('V
$GMXVWLQJWKH&RORURIDQ/('
6HTXHQFLQJ0XOWLSOH/('V&UHDWLQJD%DU*UDSK 6HTXHQFLQJ0XOWLSOH/('V0DNLQJD&KDVH6HTXHQFH.QLJKW
5LGHU
&RQWUROOLQJDQ/('0DWUL[8VLQJ0XOWLSOH[LQJ
'LVSOD\LQJ,PDJHVRQDQ/('0DWUL[
&RQWUROOLQJD0DWUL[RI/('V&KDUOLHSOH[LQJ
'ULYLQJD6HJPHQW/(''LVSOD\
'ULYLQJ0XOWLGLJLW6HJPHQW/(''LVSOD\V0XOWLSOH[LQJ 'ULYLQJ0XOWLGLJLW6HJPHQW/(''LVSOD\V8VLQJ0$;6KLIW
5HJLVWHUV
Table of Contents | vii
&RQWUROOLQJDQ$UUD\RI/('VE\8VLQJ0$;[[6KLIW5HJLVWHUV ,QFUHDVLQJWKH1XPEHURI$QDORJ2XWSXWV8VLQJ3:0([WHQGHU
&KLSV7/&
8VLQJDQ$QDORJ3DQHO0HWHU$VD'LVSOD\
8. Physical Output . . . 261
&RQWUROOLQJWKH3RVLWLRQRID6HUYR
&RQWUROOLQJ2QHRU7ZR6HUYRVZLWKD3RWHQWLRPHWHU
RU6HQVRU
&RQWUROOLQJWKH6SHHGRI&RQWLQXRXV5RWDWLRQ6HUYRV &RQWUROOLQJ6HUYRVIURPWKH6HULDO3RUW 'ULYLQJD%UXVKOHVV0RWRU8VLQJD+REE\6SHHG&RQWUROOHU
&RQWUROOLQJ6ROHQRLGVDQG5HOD\V
0DNLQJDQ2EMHFW9LEUDWH
'ULYLQJD%UXVKHG0RWRU8VLQJD7UDQVLVWRU
&RQWUROOLQJWKH'LUHFWLRQRID%UXVKHG0RWRU
ZLWKDQ+%ULGJH
&RQWUROOLQJWKH'LUHFWLRQDQG6SHHGRID%UXVKHG0RWRUZLWKDQ
+%ULGJH
8VLQJ6HQVRUVWR&RQWUROWKH'LUHFWLRQDQG6SHHGRI%UXVKHG
0RWRUV/+%ULGJH
'ULYLQJD%LSRODU6WHSSHU0RWRU
'ULYLQJD%LSRODU6WHSSHU0RWRU8VLQJWKH(DV\'ULYHU%RDUG
'ULYLQJD8QLSRODU6WHSSHU0RWRU8/1$
9. Audio Output . . . 297
3OD\LQJ7RQHV
3OD\LQJD6LPSOH0HORG\
*HQHUDWLQJ0RUH7KDQ2QH6LPXOWDQHRXV7RQH
*HQHUDWLQJ$XGLR7RQHVDQG)DGLQJDQ/('
3OD\LQJD:$9)LOH
&RQWUROOLQJ0,',
0DNLQJDQ$XGLR6\QWKHVL]HU
10. Remotely Controlling External Devices . . . 317
5HVSRQGLQJWRDQ,QIUDUHG5HPRWH&RQWURO 'HFRGLQJ,QIUDUHG5HPRWH&RQWURO6LJQDOV
,PLWDWLQJ5HPRWH&RQWURO6LJQDOV
&RQWUROOLQJD'LJLWDO&DPHUD
&RQWUROOLQJ$&'HYLFHVE\+DFNLQJD5HPRWH&RQWUROOHG6ZLWFK
11. Using Displays . . . 333
&RQQHFWLQJDQG8VLQJD7H[W/&''LVSOD\
)RUPDWWLQJ7H[W
7XUQLQJWKH&XUVRUDQG'LVSOD\2QRU2II
6FUROOLQJ7H[W
'LVSOD\LQJ6SHFLDO6\PEROV
&UHDWLQJ&XVWRP&KDUDFWHUV
'LVSOD\LQJ6\PEROV/DUJHU7KDQD6LQJOH&KDUDFWHU 'LVSOD\LQJ3L[HOV6PDOOHU7KDQD6LQJOH&KDUDFWHU &RQQHFWLQJDQG8VLQJD*UDSKLFDO/&''LVSOD\
&UHDWLQJ%LWPDSVIRU8VHZLWKD*UDSKLFDO'LVSOD\
'LVSOD\LQJ7H[WRQD79
12. Using Time and Dates . . . 367
&UHDWLQJ'HOD\V
8VLQJPLOOLVWR'HWHUPLQH'XUDWLRQ
0RUH3UHFLVHO\0HDVXULQJWKH'XUDWLRQRID3XOVH
8VLQJ$UGXLQR$VD&ORFN
&UHDWLQJDQ$ODUPWR3HULRGLFDOO\&DOOD)XQFWLRQ
8VLQJD5HDO7LPH&ORFN
13. Communicating Using I2C and SPI . . . 389
&RQWUROOLQJDQ5*%/('8VLQJWKH%OLQN00RGXOH
8VLQJWKH:LL1XQFKXFN$FFHOHURPHWHU
,QWHUIDFLQJWRDQ([WHUQDO5HDO7LPH&ORFN
$GGLQJ([WHUQDO((35200HPRU\
5HDGLQJ7HPSHUDWXUHZLWKD'LJLWDO7KHUPRPHWHU 'ULYLQJ)RXU6HJPHQW/('V8VLQJ2QO\7ZR:LUHV
,QWHJUDWLQJDQ,&3RUW([SDQGHU
'ULYLQJ0XOWLGLJLW6HJPHQW'LVSOD\V8VLQJ63, &RPPXQLFDWLQJ%HWZHHQ7ZRRU0RUH$UGXLQR%RDUGV
14. Wireless Communication . . . 425
6HQGLQJ0HVVDJHV8VLQJ/RZ&RVW:LUHOHVV0RGXOHV &RQQHFWLQJ$UGXLQRWRD=LJ%HHRU1HWZRUN
6HQGLQJD0HVVDJHWRD3DUWLFXODU;%HH
6HQGLQJ6HQVRU'DWD%HWZHHQ;%HHV
$FWLYDWLQJDQ$FWXDWRU&RQQHFWHGWRDQ;%HH
15. Ethernet and Networking . . . 451
6HWWLQJ8SWKH(WKHUQHW6KLHOG
2EWDLQLQJ<RXU,3$GGUHVV$XWRPDWLFDOO\
5HVROYLQJ+RVWQDPHVWR,3$GGUHVVHV'16
5HTXHVWLQJ'DWDIURPD:HE6HUYHU
5HTXHVWLQJ'DWDIURPD:HE6HUYHU8VLQJ;0/
Table of Contents | ix
6HWWLQJ8SDQ$UGXLQRWR%HD:HE6HUYHU
+DQGOLQJ,QFRPLQJ:HE5HTXHVWV
+DQGOLQJ,QFRPLQJ5HTXHVWVIRU6SHFLILF3DJHV
8VLQJ+70/WR)RUPDW:HE6HUYHU5HVSRQVHV
6HUYLQJ:HE3DJHV8VLQJ)RUPV3267
6HUYLQJ:HE3DJHV&RQWDLQLQJ/DUJH$PRXQWVRI'DWD
6HQGLQJ7ZLWWHU0HVVDJHV
6HQGLQJDQG5HFHLYLQJ6LPSOH0HVVDJHV8'3
*HWWLQJWKH7LPHIURPDQ,QWHUQHW7LPH6HUYHU
0RQLWRULQJ3DFKXEH)HHGV
6HQGLQJ,QIRUPDWLRQWR3DFKXEH
16. Using, Modifying, and Creating Libraries . . . 515
8VLQJWKH%XLOWLQ/LEUDULHV
,QVWDOOLQJ7KLUG3DUW\/LEUDULHV
0RGLI\LQJD/LEUDU\
&UHDWLQJ<RXU2ZQ/LEUDU\
&UHDWLQJD/LEUDU\7KDW8VHV2WKHU/LEUDULHV
17. Advanced Coding and Memory Handling . . . 531
8QGHUVWDQGLQJWKH$UGXLQR%XLOG3URFHVV
'HWHUPLQLQJWKH$PRXQWRI)UHHDQG8VHG5$0
6WRULQJDQG5HWULHYLQJ1XPHULF9DOXHVLQ3URJUDP0HPRU\
6WRULQJDQG5HWULHYLQJ6WULQJVLQ3URJUDP0HPRU\
8VLQJGHILQHDQGFRQVW,QVWHDGRI,QWHJHUV
8VLQJ&RQGLWLRQDO&RPSLODWLRQV
18. Using the Controller Chip Hardware . . . 547
6WRULQJ'DWDLQ3HUPDQHQW((35200HPRU\
8VLQJ+DUGZDUH,QWHUUXSWV
6HWWLQJ7LPHU'XUDWLRQ
6HWWLQJ7LPHU3XOVH:LGWKDQG'XUDWLRQ
&UHDWLQJD3XOVH*HQHUDWRU
&KDQJLQJD7LPHU¦V3:0)UHTXHQF\
&RXQWLQJ3XOVHV
0HDVXULQJ3XOVHV0RUH$FFXUDWHO\
0HDVXULQJ$QDORJ9DOXHV4XLFNO\
5HGXFLQJ%DWWHU\'UDLQ
6HWWLQJ'LJLWDO3LQV4XLFNO\
A. Electronic Components . . . 579
B. Using Schematic Diagrams and Data Sheets . . . 585
C. Building and Connecting the Circuit . . . 591
D. Tips on Troubleshooting Software Problems . . . 595
E. Tips on Troubleshooting Hardware Problems . . . 599
F. Digital and Analog Pins . . . 603
G. ASCII and Extended Character Sets . . . 607
Index . . . 611
Table of Contents | xi
Preface
7KLVERRNZDVZULWWHQE\0LFKDHO0DUJROLVZLWK1LFN:HOGLQWRKHOS\RXH[SORUHWKH DPD]LQJWKLQJV\RXFDQGRZLWK$UGXLQR
$UGXLQRLVDIDPLO\RIPLFURFRQWUROOHUVWLQ\FRPSXWHUVDQGDVRIWZDUHFUHDWLRQHQYL URQPHQWWKDWPDNHVLWHDV\IRU\RXWRFUHDWHSURJUDPVFDOOHGVNHWFKHVWKDWFDQLQWHUDFW ZLWKWKHSK\VLFDOZRUOG7KLQJV\RXPDNHZLWK$UGXLQRFDQVHQVHDQGUHVSRQGWR WRXFKVRXQGSRVLWLRQKHDWDQGOLJKW7KLVW\SHRIWHFKQRORJ\RIWHQUHIHUUHGWRDV SK\VLFDOFRPSXWLQJLVXVHGLQDOONLQGVRIWKLQJVIURPWKHL3KRQHWRDXWRPRELOHHOHF WURQLFVV\VWHPV$UGXLQRPDNHVLWSRVVLEOHIRUDQ\RQH¢HYHQSHRSOHZLWKQRSURJUDP PLQJRUHOHFWURQLFVH[SHULHQFH¢WRXVHWKLVULFKDQGFRPSOH[WHFKQRORJ\
Who This Book Is For
8QOLNHLQPRVWWHFKQLFDOFRRNERRNVH[SHULHQFHZLWKVRIWZDUHDQGKDUGZDUHLVQRW DVVXPHG7KLVERRNLVDLPHGDWDEURDGUDQJHRIUHDGHUVLQWHUHVWHGLQXVLQJFRPSXWHU WHFKQRORJ\WRLQWHUDFWZLWKWKHHQYLURQPHQW,WLVIRUSHRSOHZKRZDQWWRTXLFNO\ILQG WKHVROXWLRQWRKDUGZDUHDQGVRIWZDUHSUREOHPV
<RXPD\KDYHQRSURJUDPPLQJH[SHULHQFH¢SHUKDSV\RXKDYHDJUHDWLGHDIRUDQLQ WHUDFWLYHSURMHFWEXWGRQ¦WKDYHWKHVNLOOVWRGHYHORSLW7KLVERRNZLOOKHOS\RXOHDUQ ZKDW\RXQHHGWRNQRZWRZULWHFRGHWKDWZRUNVXVLQJH[DPSOHVWKDWFRYHUWKHNLQGV RIWDVNV\RXZDQWWRSHUIRUP
,I\RXKDYHVRPHSURJUDPPLQJH[SHULHQFHEXWDUHQHZWR$UGXLQRWKHERRNZLOOKHOS
\RXEHFRPHSURGXFWLYHTXLFNO\E\GHPRQVWUDWLQJKRZWRLPSOHPHQWVSHFLILF$UGXLQR FDSDELOLWLHVIRU\RXUSURMHFW
3HRSOHDOUHDG\XVLQJ$UGXLQRVKRXOGILQGWKHFRQWHQWKHOSIXOIRUTXLFNO\OHDUQLQJQHZ WHFKQLTXHVZKLFKDUHH[SODLQHGXVLQJSUDFWLFDOH[DPSOHV7KLVZLOOKHOS\RXWRHPEDUN RQPRUHFRPSOH[SURMHFWVE\VKRZLQJKRZWRVROYHSUREOHPVDQGXVHFDSDELOLWLHVWKDW PD\EHQHZWR\RX
([SHULHQFHG&&SURJUDPPHUVZLOOILQGH[DPSOHVRIKRZWRXVHWKHORZOHYHO$95 UHVRXUFHV LQWHUUXSWV WLPHUV ,& (WKHUQHW HWF WR EXLOG DSSOLFDWLRQV XVLQJ WKH
$UGXLQRHQYLURQPHQW
xiii
How This Book Is Organized
7KHERRNFRQWDLQVLQIRUPDWLRQWKDWFRYHUVWKHEURDGUDQJHRIWKH$UGXLQR¦VFDSDELOL WLHVIURPEDVLFFRQFHSWVDQGFRPPRQWDVNVWRDGYDQFHGWHFKQRORJ\(DFKWHFKQLTXH LVH[SODLQHGLQDUHFLSHWKDWVKRZV\RXKRZWRLPSOHPHQWDVSHFLILFFDSDELOLW\<RXGR QRWQHHGWRUHDGWKHFRQWHQWLQVHTXHQFH
&KDSWHU*HWWLQJ6WDUWHGLQWURGXFHVWKH$UGXLQRHQYLURQPHQWDQGSURYLGHVKHOSRQ JHWWLQJWKH$UGXLQRGHYHORSPHQWHQYLURQPHQWDQGKDUGZDUHLQVWDOOHGDQGZRUNLQJ 7KH QH[W FRXSOH RI FKDSWHUV LQWURGXFH $UGXLQR VRIWZDUH GHYHORSPHQW&KDSWHU 0DNLQJWKH6NHWFK'R<RXU%LGGLQJFRYHUVHVVHQWLDOVRIWZDUHFRQFHSWVDQGWDVNVDQG
&KDSWHU8VLQJ0DWKHPDWLFDO2SHUDWRUVVKRZVKRZWRPDNHXVHRIWKHPRVWFRPPRQ PDWKHPDWLFDOIXQFWLRQV
&KDSWHU6HULDO&RPPXQLFDWLRQVGHVFULEHVKRZWRJHW$UGXLQRWRFRQQHFWDQGFRP PXQLFDWHZLWK\RXUFRPSXWHUDQGRWKHUGHYLFHV6HULDOLVWKHPRVWFRPPRQPHWKRG IRU $UGXLQR LQSXW DQG RXWSXW DQG WKLV FDSDELOLW\ LV XVHG LQ PDQ\ RI WKH UHFLSHV WKURXJKRXWWKHERRN
&KDSWHU6LPSOH'LJLWDODQG$QDORJ,QSXWLQWURGXFHVDUDQJHRIEDVLFWHFKQLTXHVIRU UHDGLQJGLJLWDODQGDQDORJVLJQDOV&KDSWHU*HWWLQJ,QSXWIURP6HQVRUVEXLOGVRQWKLV ZLWKUHFLSHVWKDWH[SODLQKRZWRXVHGHYLFHVWKDWHQDEOH$UGXLQRWRVHQVHWRXFKVRXQG SRVLWLRQKHDWDQGOLJKW
&KDSWHU9LVXDO2XWSXWFRYHUVFRQWUROOLQJOLJKW5HFLSHVFRYHUVZLWFKLQJRQRQHRU PDQ\/('VDQGFRQWUROOLQJEULJKWQHVVDQGFRORU7KLVFKDSWHUH[SODLQVKRZ\RXFDQ GULYHEDUJUDSKVDQGQXPHULF/('GLVSOD\VDVZHOODVFUHDWHSDWWHUQVDQGDQLPDWLRQV ZLWK/('DUUD\V,QDGGLWLRQWKHFKDSWHUSURYLGHVDJHQHUDOLQWURGXFWLRQWRGLJLWDODQG DQDORJRXWSXWIRUWKRVHZKRDUHQHZWRWKLV
&KDSWHU3K\VLFDO2XWSXWH[SODLQVKRZ\RXFDQPDNHWKLQJVPRYHE\FRQWUROOLQJ PRWRUVZLWK$UGXLQR$ZLGHUDQJHRIPRWRUW\SHVDUHFRYHUHGVROHQRLGVVHUYRPRWRUV '&PRWRUVDQGVWHSSHUPRWRUV
&KDSWHU$XGLR2XWSXWVKRZVKRZWRJHQHUDWHVRXQGZLWK$UGXLQRWKURXJKDQRXW SXWGHYLFHVXFKDVDVSHDNHU,WFRYHUVSOD\LQJVLPSOHWRQHVDQGPHORGLHVDQGSOD\LQJ :$9ILOHVDQG0,',
&KDSWHU5HPRWHO\&RQWUROOLQJ([WHUQDO'HYLFHVGHVFULEHVWHFKQLTXHVWKDWFDQEH XVHGWRLQWHUDFWZLWKDOPRVWDQ\GHYLFHWKDWXVHVVRPHIRUPRIUHPRWHFRQWUROOHULQ FOXGLQJ79DXGLRHTXLSPHQWFDPHUDVJDUDJHGRRUVDSSOLDQFHVDQGWR\V,WEXLOGV RQ WHFKQLTXHV XVHG LQ SUHYLRXV FKDSWHUV IRU FRQQHFWLQJ $UGXLQR WR GHYLFHV DQG PRGXOHV
&KDSWHU8VLQJ'LVSOD\VFRYHUVLQWHUIDFLQJWH[WDQGJUDSKLFDO/&'GLVSOD\V7KH FKDSWHUVKRZVKRZ\RXFDQFRQQHFWWKHVHGHYLFHVWRGLVSOD\WH[WVFUROORUKLJKOLJKW ZRUGVDQGFUHDWHVSHFLDOV\PEROVDQGFKDUDFWHUV
&KDSWHU8VLQJ7LPHDQG'DWHVFRYHUVEXLOWLQ$UGXLQRWLPHUHODWHGIXQFWLRQVDQG LQWURGXFHVPDQ\DGGLWLRQDOWHFKQLTXHVIRUKDQGOLQJWLPHGHOD\VWLPHPHDVXUHPHQW DQGUHDOZRUOGWLPHVDQGGDWHV
&KDSWHU &RPPXQLFDWLQJ 8VLQJ ,& DQG 63, FRYHUV WKH ,QWHU,QWHJUDWHG &LUFXLW ,&DQG6HULDO3HULSKHUDO,QWHUIDFH63,VWDQGDUGV7KHVHVWDQGDUGVSURYLGHVLPSOH ZD\VIRUGLJLWDOLQIRUPDWLRQWREHWUDQVIHUUHGEHWZHHQVHQVRUVDQG$UGXLQR7KLVFKDS WHUVKRZVKRZWRXVH,&DQG63,WRFRQQHFWWRFRPPRQGHYLFHV,WDOVRVKRZVKRZWR FRQQHFWWZRRUPRUH$UGXLQRERDUGVXVLQJ,&IRUPXOWLERDUGDSSOLFDWLRQV
&KDSWHU:LUHOHVV&RPPXQLFDWLRQFRYHUVZLUHOHVVFRPPXQLFDWLRQZLWK;%HH7KLV FKDSWHUSURYLGHVH[DPSOHVUDQJLQJIURPVLPSOHZLUHOHVVVHULDOSRUWUHSODFHPHQWVWR PHVKQHWZRUNVFRQQHFWLQJPXOWLSOHERDUGVWRPXOWLSOHVHQVRUV
&KDSWHU(WKHUQHWDQG1HWZRUNLQJGHVFULEHVWKHPDQ\ZD\V\RXFDQXVH$UGXLQR ZLWKWKH,QWHUQHW,WKDVH[DPSOHVWKDWGHPRQVWUDWHKRZWREXLOGDQGXVHZHEFOLHQWV DQGVHUYHUVDQGVKRZVKRZWRXVHWKHPRVWFRPPRQ,QWHUQHWFRPPXQLFDWLRQSURWRFROV ZLWK$UGXLQR
$UGXLQRVRIWZDUHOLEUDULHVDUHDVWDQGDUGZD\RIDGGLQJIXQFWLRQDOLW\WRWKH$UGXLQR HQYLURQPHQW&KDSWHU8VLQJ0RGLI\LQJDQG&UHDWLQJ/LEUDULHVH[SODLQVKRZWR XVHDQGPRGLI\VRIWZDUHOLEUDULHV,WDOVRSURYLGHVJXLGDQFHRQKRZWRFUHDWH\RXURZQ OLEUDULHV
&KDSWHU$GYDQFHG&RGLQJDQG0HPRU\+DQGOLQJFRYHUVDGYDQFHGSURJUDPPLQJ WHFKQLTXHVDQGWKHWRSLFVKHUHDUHPRUHWHFKQLFDOWKDQWKHRWKHUUHFLSHVLQWKLVERRN EHFDXVHWKH\FRYHUWKLQJVWKDWDUHXVXDOO\FRQFHDOHGE\WKHIULHQGO\$UGXLQRZUDSSHU 7KHWHFKQLTXHVLQWKLVFKDSWHUFDQEHXVHGWRPDNHDVNHWFKPRUHHIILFLHQW¢WKH\FDQ KHOSLPSURYHSHUIRUPDQFHDQGUHGXFHWKHFRGHVL]HRI\RXUVNHWFKHV
&KDSWHU8VLQJWKH&RQWUROOHU&KLS+DUGZDUHVKRZVKRZWRDFFHVVDQGXVHKDUG ZDUHIXQFWLRQVWKDWDUHQRWIXOO\H[SRVHGWKURXJKWKHGRFXPHQWHG$UGXLQRODQJXDJH ,WFRYHUVORZOHYHOXVDJHRIWKHKDUGZDUHLQSXWRXWSXWUHJLVWHUVWLPHUVDQGLQWHUUXSWV
$SSHQGL[$(OHFWURQLF&RPSRQHQWVSURYLGHVDQRYHUYLHZRIWKHFRPSRQHQWVXVHG WKURXJKRXWWKHERRN
$SSHQGL[%8VLQJ6FKHPDWLF'LDJUDPVDQG'DWD6KHHWVH[SODLQVKRZWRXVHVFKHPDWLF GLDJUDPVDQGGDWDVKHHWV
$SSHQGL[&%XLOGLQJDQG&RQQHFWLQJWKH&LUFXLWSURYLGHVDEULHILQWURGXFWLRQWRXVLQJ DEUHDGERDUGFRQQHFWLQJDQGXVLQJH[WHUQDOSRZHUVXSSOLHVDQGEDWWHULHVDQGXVLQJ FDSDFLWRUVIRUGHFRXSOLQJ
$SSHQGL['7LSVRQ7URXEOHVKRRWLQJ6RIWZDUH3UREOHPVSURYLGHVWLSVRQIL[LQJFRP SLOHDQGUXQWLPHSUREOHPV
$SSHQGL[(7LSVRQ7URXEOHVKRRWLQJ+DUGZDUH3UREOHPVFRYHUVSUREOHPVZLWKHOHF WURQLFFLUFXLWV
Preface | xv
$SSHQGL[)'LJLWDODQG$QDORJ3LQVSURYLGHVWDEOHVLQGLFDWLQJIXQFWLRQDOLW\SURYLGHG E\WKHSLQVRQVWDQGDUG$UGXLQRERDUGV
$SSHQGL[ *$6&,, DQG ([WHQGHG &KDUDFWHU 6HWV SURYLGHV WDEOHV VKRZLQJ $6&,, FKDUDFWHUV
What Was Left Out
7KHUHLVQ¦WURRPLQWKLVERRNWRFRYHUHOHFWURQLFVWKHRU\DQGSUDFWLFHDOWKRXJKJXLG DQFHLVSURYLGHGIRUEXLOGLQJWKHFLUFXLWVXVHGLQWKHUHFLSHV)RUPRUHGHWDLOUHDGHUV PD\ZDQWWRUHIHUWRPDWHULDOWKDWLVZLGHO\DYDLODEOHRQWKH,QWHUQHWRUWRERRNVVXFK DVWKHIROORZLQJ
0DNH(OHFWURQLFVE\&KDUOHV3ODWW2¦5HLOO\
*HWWLQJ6WDUWHGLQ(OHFWURQLFVE\)RUUHVW0LPV0DVWHU3XEOLVKLQJ
3K\VLFDO&RPSXWLQJE\7RP,JRH&HQJDJH
3UDFWLFDO(OHFWURQLFVIRU,QYHQWRUVE\3DXO6FKHU]0F*UDZ+LOO
7KLVFRRNERRNH[SODLQVKRZWRZULWHFRGHWRDFFRPSOLVKVSHFLILFWDVNVEXWLWLVQRWDQ LQWURGXFWLRQWRSURJUDPPLQJ5HOHYDQWSURJUDPPLQJFRQFHSWVDUHEULHIO\H[SODLQHG EXWWKHUHLVLQVXIILFLHQWURRPWRFRYHUWKHGHWDLOV,I\RXZDQWWROHDUQPRUHDERXW SURJUDPPLQJ\RXPD\ZDQWWRUHIHUWRWKH,QWHUQHWRUWRRQHRIWKHIROORZLQJERRNV
3UDFWLFDO&3URJUDPPLQJE\6WHYH2XDOOLQH2¦5HLOO\
$%RRNRQ&E\$O.HOOH\DQG,UD3RKO$GGLVRQ:HVOH\
0\ IDYRULWH DOWKRXJK QRW UHDOO\ D EHJLQQHU¦V ERRN LV WKH ERRN , XVHG WR OHDUQ
&SURJUDPPLQJ
7KH & 3URJUDPPLQJ /DQJXDJH E\ %ULDQ : .HUQLJKDQ DQG 'HQQLV 0 5LWFKLH 3UHQWLFH+DOO
Code Style (About the Code)
7KHFRGHXVHGWKURXJKRXWWKLVERRNKDVEHHQWDLORUHGWRFOHDUO\LOOXVWUDWHWKHWRSLF FRYHUHGLQHDFKUHFLSH$VDFRQVHTXHQFHVRPHFRPPRQFRGLQJVKRUWFXWVKDYHEHHQ DYRLGHGSDUWLFXODUO\LQWKHHDUO\FKDSWHUV([SHULHQFHG&SURJUDPPHUVRIWHQXVHULFK EXWWHUVHH[SUHVVLRQVWKDWDUHHIILFLHQWEXWFDQEHDOLWWOHGLIILFXOWIRUEHJLQQHUVWRUHDG )RUH[DPSOHWKHHDUO\FKDSWHUVLQFUHPHQWYDULDEOHVXVLQJH[SOLFLWH[SUHVVLRQVWKDWDUH HDV\IRUQRQSURJUDPPHUVWRUHDG
result = result + 1; // increment the count
5DWKHUWKDQWKHIROORZLQJFRPPRQO\XVHGE\H[SHULHQFHGSURJUDPPHUVWKDWGRHVWKH VDPHWKLQJ
result++; // increment using the post increment operator
)HHOIUHHWRVXEVWLWXWH\RXUSUHIHUUHGVW\OH%HJLQQHUVVKRXOGEHUHDVVXUHGWKDWWKHUHLV QREHQHILWLQSHUIRUPDQFHRUFRGHVL]HLQXVLQJWKHWHUVHIRUP
6RPHSURJUDPPLQJH[SUHVVLRQVDUHVRFRPPRQWKDWWKH\DUHXVHGLQWKHLUWHUVHIRUP )RUH[DPSOHWKHORRSH[SUHVVLRQVDUHZULWWHQDVIROORZV
for(int i=0; i < 4; i++)
7KLVLVHTXLYDOHQWWRWKHIROORZLQJ
int i;
for(i=0; i < 4; i = i+1)
6HH&KDSWHUIRUPRUHGHWDLOVRQWKHVHDQGRWKHUH[SUHVVLRQVXVHGWKURXJKRXWWKH ERRN
*RRGSURJUDPPLQJSUDFWLFHLQYROYHVHQVXULQJWKDWYDOXHVXVHGDUHYDOLGJDUEDJHLQ HTXDOVJDUEDJHRXWE\FKHFNLQJWKHPEHIRUHXVLQJWKHPLQFDOFXODWLRQV+RZHYHUWR NHHSWKHFRGHIRFXVHGRQWKHUHFLSHWRSLFYHU\OLWWOHHUURUFKHFNLQJFRGHKDVEHHQ LQFOXGHG
Arduino Platform Release Notes
7KHFRGHKDVEHHQWHVWHGXVLQJ$UGXLQRUHOHDVHVIURPYHUVLRQWKURXJKYHUVLRQ 7KLVERRNZDVZULWWHQEHIRUH$UGXLQRYZDVILQDOL]HGDQGDOWKRXJKDOPRVW DOORIWKHH[DPSOHVVKRXOGVWLOOZRUNVPDOOFKDQJHVUHTXLUHGIRUUXQQLQJZLWKYZLOO EHSXEOLVKHGRQWKHVLWHIRUWKHERRN
KWWSZZZRUHLOO\FRPFDWDORJ
7KHUH¦VDOVRDOLQNWRHUUDWDWKHUH(UUDWDJLYHUHDGHUVDZD\WROHWXVNQRZDERXWW\SRV HUURUVDQGRWKHUSUREOHPVZLWKWKHERRN(UUDWDZLOOEHYLVLEOHRQWKHSDJHLPPHGL DWHO\DQGZH¦OOFRQILUPWKHPDIWHUFKHFNLQJWKHPRXW2¦5HLOO\FDQDOVRIL[HUUDWDLQ IXWXUHSULQWLQJVRIWKHERRNDQGRQ6DIDULPDNLQJIRUDEHWWHUUHDGHUH[SHULHQFHSUHWW\
TXLFNO\
,I\RXKDYHSUREOHPVPDNLQJH[DPSOHVZRUNFKHFNWKHZHEOLQNWRVHHLIWKHFRGHKDV EHHQXSGDWHG,IWKDWGRHVQ¦WIL[WKHSUREOHPVHH$SSHQGL['ZKLFKFRYHUVWURXEOH VKRRWLQJVRIWZDUHSUREOHPV7KH$UGXLQRIRUXPLVDJRRGSODFHWRSRVWDTXHVWLRQLI
\RXQHHGPRUHKHOSKWWSZZZDUGXLQRFF
:H KRSH WR NHHS WKLV ERRN XSGDWHG IRU IXWXUH $UGXLQR YHUVLRQV DQG ZH ZLOO DOVR LQFRUSRUDWHVXJJHVWLRQVDQGFRPSODLQWVLQWRIXWXUHHGLWLRQV
,I\RXOLNH¢RUGRQ¦WOLNH¢WKLVERRNE\DOOPHDQVSOHDVHOHWSHRSOHNQRZ$PD]RQ UHYLHZVDUHRQHSRSXODUZD\WRVKDUH\RXUKDSSLQHVVRUODFNRIKDSSLQHVVRU\RXFDQ OHDYHUHYLHZVDWWKHVLWHIRUWKHERRN
Preface | xvii
Conventions Used in This Book
7KHIROORZLQJIRQWFRQYHQWLRQVDUHXVHGLQWKLVERRN ,WDOLF
,QGLFDWHVSDWKQDPHVILOHQDPHVDQGSURJUDPQDPHV,QWHUQHWDGGUHVVHVVXFKDV GRPDLQQDPHVDQG85/VDQGQHZLWHPVZKHUHWKH\DUHGHILQHG
Constant width
,QGLFDWHVFRPPDQGOLQHVDQGRSWLRQVWKDWVKRXOGEHW\SHGYHUEDWLPQDPHVDQG NH\ZRUGVLQSURJUDPVLQFOXGLQJPHWKRGQDPHVYDULDEOHQDPHVDQGFODVVQDPHV DQG+70/HOHPHQWWDJV
Constant width bold
,QGLFDWHVHPSKDVLVLQSURJUDPFRGHOLQHV Constant width italic
,QGLFDWHVWH[WWKDWVKRXOGEHUHSODFHGZLWKXVHUVXSSOLHGYDOXHV 7KLVLFRQVLJQLILHVDWLSVXJJHVWLRQRUJHQHUDOQRWH
7KLVLFRQLQGLFDWHVDZDUQLQJRUFDXWLRQ
Using Code Examples
7KLVERRNLVKHUHWRKHOS\RXPDNHWKLQJVZLWK$UGXLQR,QJHQHUDO\RXPD\XVHWKH FRGHLQWKLVERRNLQ\RXUSURJUDPVDQGGRFXPHQWDWLRQ<RXGRQRWQHHGWRFRQWDFW XVIRUSHUPLVVLRQXQOHVV\RX¦UHUHSURGXFLQJDVLJQLILFDQWSRUWLRQRIWKHFRGH)RUH[
DPSOHZULWLQJDSURJUDPWKDWXVHVVHYHUDOFKXQNVRIFRGHIURPWKLVERRNGRHVQRW UHTXLUH SHUPLVVLRQ 6HOOLQJ RU GLVWULEXWLQJ D &'520 RI H[DPSOHV IURP WKLV ERRN GRHVUHTXLUHSHUPLVVLRQ$QVZHULQJDTXHVWLRQE\FLWLQJWKLVERRNDQGTXRWLQJH[DPSOH FRGHGRHVQRWUHTXLUHSHUPLVVLRQ,QFRUSRUDWLQJDVLJQLILFDQWDPRXQWRIH[DPSOHFRGH IURPWKLVERRNLQWR\RXUSURGXFW¦VGRFXPHQWDWLRQGRHVUHTXLUHSHUPLVVLRQ
:HDSSUHFLDWHEXWGRQRWUHTXLUHDWWULEXWLRQ$QDWWULEXWLRQXVXDOO\LQFOXGHVWKHWLWOH DXWKRUSXEOLVKHUDQG,6%1)RUH[DPSOH£$UGXLQR&RRNERRNE\0LFKDHO0DUJROLV ZLWK1LFN:HOGLQ2¦5HLOO\&RS\ULJKW0LFKDHO0DUJROLVDQG1LFKRODV:HOGLQ
¤
,I\RXIHHO\RXUXVHRIFRGHH[DPSOHVIDOOVRXWVLGHIDLUXVHRUWKHSHUPLVVLRQJLYHQKHUH IHHOIUHHWRFRQWDFWXVDWSHUPLVVLRQV#RUHLOO\FRP
Safari® Books Online
6DIDUL%RRNV2QOLQHLVDQRQGHPDQGGLJLWDOOLEUDU\WKDWOHWV\RXHDVLO\
VHDUFKRYHUWHFKQRORJ\DQGFUHDWLYHUHIHUHQFHERRNVDQGYLGHRVWR ILQGWKHDQVZHUV\RXQHHGTXLFNO\
:LWKDVXEVFULSWLRQ\RXFDQUHDGDQ\SDJHDQGZDWFKDQ\YLGHRIURPRXUOLEUDU\RQOLQH 5HDGERRNVRQ\RXUFHOOSKRQHDQGPRELOHGHYLFHV$FFHVVQHZWLWOHVEHIRUHWKH\DUH DYDLODEOHIRUSULQWDQGJHWH[FOXVLYHDFFHVVWRPDQXVFULSWVLQGHYHORSPHQWDQGSRVW IHHGEDFNIRUWKHDXWKRUV&RS\DQGSDVWHFRGHVDPSOHVRUJDQL]H\RXUIDYRULWHVGRZQ ORDGFKDSWHUVERRNPDUNNH\VHFWLRQVFUHDWHQRWHVSULQWRXWSDJHVDQGEHQHILWIURP WRQVRIRWKHUWLPHVDYLQJIHDWXUHV
2¦5HLOO\0HGLDKDVXSORDGHGWKLVERRNWRWKH6DIDUL%RRNV2QOLQHVHUYLFH7RKDYHIXOO GLJLWDODFFHVVWRWKLVERRNDQGRWKHUVRQVLPLODUWRSLFVIURP2¦5HLOO\DQGRWKHUSXE OLVKHUVVLJQXSIRUIUHHDWKWWSP\VDIDULERRNVRQOLQHFRP
How to Contact Us
:HKDYHWHVWHGDQGYHULILHGWKHLQIRUPDWLRQLQWKLVERRNWRWKHEHVWRIRXUDELOLW\EXW
\RXPD\ILQGWKDWIHDWXUHVKDYHFKDQJHGRUHYHQWKDWZHKDYHPDGHDIHZPLVWDNHV 3OHDVHOHWXVNQRZDERXWDQ\HUURUV\RXILQGDVZHOODV\RXUVXJJHVWLRQVIRUIXWXUH HGLWLRQVE\ZULWLQJWR
2¦5HLOO\0HGLD,QF
*UDYHQVWHLQ+LJKZD\1RUWK 6HEDVWRSRO&$
LQWKH8QLWHG6WDWHVRU&DQDGD LQWHUQDWLRQDOORFDO
ID[
:HKDYHDZHESDJHIRUWKLVERRNZKHUHZHOLVWHUUDWDH[DPSOHVDQGDQ\DGGLWLRQDO LQIRUPDWLRQ<RXFDQDFFHVVWKLVSDJHDW
KWWSZZZRUHLOO\FRPFDWDORJ
7RFRPPHQWRUDVNWHFKQLFDOTXHVWLRQVDERXWWKLVERRNVHQGHPDLOWR ERRNTXHVWLRQV#RUHLOO\FRP
)RUPRUHLQIRUPDWLRQDERXWRXUERRNVFRXUVHVFRQIHUHQFHVDQGQHZVVHHRXUZHEVLWH DWKWWSZZZRUHLOO\FRP
)LQGXVRQ)DFHERRNKWWSIDFHERRNFRPRUHLOO\
)ROORZXVRQ7ZLWWHUKWWSWZLWWHUFRPRUHLOO\PHGLD
:DWFKXVRQ<RX7XEHKWWSZZZ\RXWXEHFRPRUHLOO\PHGLD
Preface | xix
Acknowledgments
1LFN:HOGLQ¦VFRQWULEXWLRQZDVLQYDOXDEOHIRUWKHFRPSOHWLRQRIWKLVERRN,WZDV SHUFHQWZULWWHQZKHQ1LFNFDPHRQERDUG¢DQGZLWKRXWKLVVNLOODQGHQWKXVLDVP LWZRXOGVWLOOEHSHUFHQWZULWWHQ+LVKDQGVRQH[SHULHQFHUXQQLQJ$UGXLQRZRUN VKRSVIRUDOOOHYHOVRIXVHUVHQDEOHGXVWRPDNHWKHDGYLFHLQWKLVERRNSUDFWLFDOIRURXU EURDGUDQJHRIUHDGHUV7KDQN\RX1LFNIRU\RXUNQRZOHGJHDQGJHQLDOFROODERUDWLYH QDWXUH
6LPRQ6W/DXUHQWZDVWKHHGLWRUDW2¦5HLOO\ZKRILUVWH[SUHVVHGLQWHUHVWLQWKLVERRN
$QGLQWKHHQGKHLVWKHPDQZKRSXOOHGLWWRJHWKHU+LVVXSSRUWDQGHQFRXUDJHPHQW NHSWXVLQVSLUHGDVZHVLIWHGRXUZD\WKURXJKWKHYROXPHVRIPDWHULDOQHFHVVDU\WRGR WKHVXEMHFWMXVWLFH
%ULDQ-HSVRQKHOSHGPHJHWVWDUWHGZLWKWKHZULWLQJRIWKLVERRN+LVYDVWNQRZOHGJH RIWKLQJV$UGXLQRDQGKLVFRQFHUQDQGH[SHUWLVHIRUFRPPXQLFDWLQJDERXWWHFKQRORJ\
LQSODLQ(QJOLVKVHWDKLJKVWDQGDUG+HZDVDQLGHDOJXLGLQJKDQGIRUVKDSLQJWKHERRN DQGPDNLQJWHFKQRORJ\UHDGLO\DFFHVVLEOHIRUUHDGHUV:HDOVRKDYH%ULDQWRWKDQNIRU WKH;%HHFRQWHQWLQ&KDSWHU
$XGUH\ 'R\OH ZRUNHG WLUHOHVVO\ WR VWDPS RXW W\SRV DQG JUDPPDWLFDO HUURUV LQ WKH PDQXVFULSWDQGXQWDQJOHVRPHRIWKHPRUHFRQYROXWHGH[SUHVVLRQV
3KLOLS /LQGVD\ FROODERUDWHG RQ&KDSWHU DQG KLV FRPELQDWLRQ RI GHHS WHFKQLFDO NQRZOHGJHDQGFOHDUXQGHUVWDQGLQJRIWKHQHHGVRIQRQWHFKQLFDOSHRSOHZDVHVVHQWLDO LQPDNLQJWKHFRPSOH[VXEMHFWRI(WKHUQHWDFFHVVLEOH
0LNDO +DUW ZURWH UHFLSHV FRYHULQJ *36 DQG VRIWZDUH VHULDO 0LNDO ZDV WKH QDWXUDO FKRLFHIRUWKLV¢QRWRQO\EHFDXVHKHZURWHWKHOLEUDULHVEXWDOVREHFDXVHKHLVDIOXHQW FRPPXQLFDWRUDQ$UGXLQRHQWKXVLDVWDQGDSOHDVXUHWRFROODERUDWHZLWK
$UGXLQRLVSRVVLEOHEHFDXVHRIWKHFUHDWLYLW\RIWKHFRUH$UGXLQRGHYHORSPHQWWHDP 0DVVLPR%DQ]L'DYLG&XDUWLHOOHV7RP,JRH*LDQOXFD0DUWLQRDQG'DYLG0HOOLV2Q EHKDOIRIDOO$UGXLQRXVHUV,ZLVKWRH[SUHVVRXUDSSUHFLDWLRQIRUWKHLUHIIRUWVLQPDNLQJ WKLVIDVFLQDWLQJWHFKQRORJ\VLPSOHDQGWKHLUJHQHURVLW\LQPDNLQJLWIUHH
6SHFLDO WKDQNV WR $OH[DQGUD 'HVFKDPSV6RQVLQR &(2 RI 7LQNHU /RQGRQ ZKRVH ZRUNVKRSVSURYLGHGLPSRUWDQWXQGHUVWDQGLQJRIWKHQHHGVRIXVHUV7KDQNVDOVRWR 3HWHU.QLJKWZKRKDVSURYLGHGDOONLQGVRIFOHYHU$UGXLQRVROXWLRQVDVZHOODVWKHEDVLV RIDQXPEHURIUHFLSHVLQWKLVERRN
2Q EHKDOI RI HYHU\RQH ZKR KDV GRZQORDGHG XVHUFRQWULEXWHG $UGXLQR OLEUDULHV , ZRXOGOLNHWRWKDQNWKHDXWKRUVZKRKDYHJHQHURXVO\VKDUHGWKHLUNQRZOHGJH 7KHDYDLODELOLW\RIDZLGHUDQJHRIKDUGZDUHLVDODUJHSDUWRIZKDWPDNHV$UGXLQR H[FLWLQJ¢WKDQNVWRWKHVXSSOLHUVIRUVWRFNLQJDQGVXSSRUWLQJDEURDGUDQJHRIJUHDW GHYLFHV7KHIROORZLQJZHUHKHOSIXOLQSURYLGLQJKDUGZDUHXVHGLQWKHERRN6SDUN)XQ 0DNHU6WRUH*UDYLWHFKDQG1.&(OHFWURQLFV2WKHUVXSSOLHUVWKDWKDYHEHHQKHOSIXO
LQFOXGH 0RGHUQ 'HYLFH /LTXLGZDUH $GDIUXLW 0DNHUERW ,QGXVWULHV 0LQGNLWV 2RPORXWDQG6.3DQJ
1LFNZRXOGOLNHWRWKDQN$OH[DQGUDDQG3HWHUDW7LQNHU/RQGRQDVZHOODV%URFN&UDIW DQGHVSHFLDOO\'DQLHO6ROWLVIRUDOOWKHZRUNVKRSVZHKDYHGRQHWRJHWKHU
1LFNZRXOGDOVROLNHWRWKDQNHYHU\RQHZKRKDVDVVLVWHGDWZRUNVKRSVDQGSDUWLFLSDQWV ZKRDVNHGD£VLOO\¤TXHVWLRQDVWKHUHDUHQRVLOO\TXHVWLRQV0DQ\RIWKRVHKDYHOHGWR FODULILFDWLRQVDQGFRUUHFWLRQVLQWKLVERRN
1LFN¦VILQDOWKDQNVJRWRKLVIDPLO\-HDQLH(PLO\DQG)LQQZKRDJUHHGWROHWKLPGR WKLVRYHUWKHLUVXPPHUKROLGD\DQGRIFRXUVHPXFKORQJHUDIWHUWKDWWKDQWKH\RULJL QDOO\WKRXJKWDQGWRKLVSDUHQWV)UDQNDQG(YDIRUEULQJLQJKLPXSWRWDNHWKLQJV DSDUW
/DVWEXWQRWOHDVW,H[SUHVVWKDQNVWRWKHIROORZLQJSHRSOH
-RVKXD1REOHIRULQWURGXFLQJPHWR2¦5HLOO\+LVERRN3URJUDPPLQJ,QWHUDFWLYLW\LV KLJKO\UHFRPPHQGHGIRUWKRVHLQWHUHVWHGLQEURDGHQLQJWKHLUNQRZOHGJHLQLQWHUDFWLYH FRPSXWLQJ
5REHUW/DF\7KRPSVRQIRURIIHULQJDGYLFHHDUO\RQZLWKWKHERRN
0DUN0DUJROLVIRUKLVVXSSRUWDQGKHOSDVDVRXQGLQJERDUGLQWKHERRN¦VFRQFHSWLRQ DQGGHYHORSPHQW
,WKDQNP\SDUHQWVIRUKHOSLQJPHWRVHHWKDWWKHFUHDWLYHDUWVDQGWHFKQRORJ\ZHUHQRW GLVWLQFWLYHHQWLWLHVDQGWKDWZKHQFRPELQHGWKH\FDQOHDGWRH[WUDRUGLQDU\UHVXOWV
$QGILQDOO\WKLVERRNZRXOGQRWKDYHEHHQVWDUWHGRUILQLVKHGZLWKRXWWKHVXSSRUWRI P\ZLIH%DUEDUD)DGHQ0\JUDWHIXODSSUHFLDWLRQWRKHUIRUNHHSLQJPHPRWLYDWHGDQG IRUKHUFDUHIXOUHDGLQJDQGFRQWULEXWLRQVWRWKHPDQXVFULSW
Preface | xxi
CHAPTER 1
Getting Started
1.0 Introduction
7KH$UGXLQRHQYLURQPHQWKDVEHHQGHVLJQHGWREHHDV\WRXVHIRUEHJLQQHUVZKRKDYH QRVRIWZDUHRUHOHFWURQLFVH[SHULHQFH:LWK$UGXLQR\RXFDQEXLOGREMHFWVWKDWFDQ UHVSRQGWRDQGRUFRQWUROOLJKWVRXQGWRXFKDQGPRYHPHQW$UGXLQRKDVEHHQXVHG WRFUHDWHDQDPD]LQJYDULHW\RIWKLQJVLQFOXGLQJPXVLFDOLQVWUXPHQWVURERWVOLJKW VFXOSWXUHVJDPHVLQWHUDFWLYHIXUQLWXUHDQGHYHQLQWHUDFWLYHFORWKLQJ
,I\RX¦UHQRWDEHJLQQHUSOHDVHIHHOIUHHWRVNLSDKHDGWRUHFLSHVWKDW LQWHUHVW\RX
$UGXLQRLVXVHGLQPDQ\HGXFDWLRQDOSURJUDPVDURXQGWKHZRUOGSDUWLFXODUO\E\GH VLJQHUVDQGDUWLVWVZKRZDQWWRHDVLO\FUHDWHSURWRW\SHVEXWGRQRWQHHGDGHHSXQGHU VWDQGLQJRIWKHWHFKQLFDOGHWDLOVEHKLQGWKHLUFUHDWLRQV%HFDXVHLWLVGHVLJQHGWREHXVHG E\QRQWHFKQLFDOSHRSOHWKHVRIWZDUHLQFOXGHVSOHQW\RIH[DPSOHFRGHWRGHPRQVWUDWH KRZWRXVHWKH$UGXLQRERDUG¦VYDULRXVIDFLOLWLHV
7KRXJKLWLVHDV\WRXVH$UGXLQR¦VXQGHUO\LQJKDUGZDUHZRUNVDWWKHVDPHOHYHORI VRSKLVWLFDWLRQWKDWHQJLQHHUVHPSOR\WREXLOGHPEHGGHGGHYLFHV3HRSOHDOUHDG\ZRUN LQJZLWKPLFURFRQWUROOHUVDUHDOVRDWWUDFWHGWR$UGXLQREHFDXVHRILWVDJLOHGHYHORSPHQW FDSDELOLWLHVDQGLWVIDFLOLW\IRUTXLFNLPSOHPHQWDWLRQRILGHDV
$UGXLQRLVEHVWNQRZQIRULWVKDUGZDUHEXW\RXDOVRQHHGVRIWZDUHWRSURJUDPWKDW KDUGZDUH%RWKWKHKDUGZDUHDQGWKHVRIWZDUHDUHFDOOHG£$UGXLQR¤7KHFRPELQDWLRQ HQDEOHV\RXWRFUHDWHSURMHFWVWKDWVHQVHDQGFRQWUROWKHSK\VLFDOZRUOG7KHVRIWZDUH LVIUHHRSHQVRXUFHDQGFURVVSODWIRUP7KHERDUGVDUHLQH[SHQVLYHWREX\RU\RXFDQ EXLOG\RXURZQWKHKDUGZDUHGHVLJQVDUHDOVRRSHQVRXUFH,QDGGLWLRQWKHUHLVDQ DFWLYHDQGVXSSRUWLYH$UGXLQRFRPPXQLW\WKDWLVDFFHVVLEOHZRUOGZLGHWKURXJKWKH
$UGXLQRIRUXPVDQGWKHZLNLNQRZQDVWKH$UGXLQR3OD\JURXQG7KHIRUXPVDQGWKH
1
ZLNLRIIHUSURMHFWGHYHORSPHQWH[DPSOHVDQGVROXWLRQVWRSUREOHPVWKDWFDQSURYLGH LQVSLUDWLRQDQGDVVLVWDQFHDV\RXSXUVXH\RXURZQSURMHFWV
7KHUHFLSHVLQWKLVFKDSWHUZLOOJHW\RXVWDUWHGE\H[SODLQLQJKRZWRVHWXSWKHGHYHO RSPHQWHQYLURQPHQWDQGKRZWRFRPSLOHDQGUXQDQH[DPSOHVNHWFK
6RXUFHFRGHFRQWDLQLQJFRPSXWHULQVWUXFWLRQVIRUFRQWUROOLQJ$UGXLQR IXQFWLRQDOLW\LVXVXDOO\UHIHUUHGWRDVDVNHWFKLQWKH$UGXLQRFRPPXQLW\
7KHZRUGVNHWFKZLOOEHXVHGWKURXJKRXWWKLVERRNWRUHIHUWR$UGXLQR SURJUDPFRGH
7KH%OLQNVNHWFKZKLFKFRPHVZLWK$UGXLQRLVXVHGDVDQH[DPSOHIRUUHFLSHVLQWKLV FKDSWHUWKRXJKWKHODVWUHFLSHLQWKHFKDSWHUJRHVIXUWKHUE\DGGLQJVRXQGDQGFRO OHFWLQJLQSXWWKURXJKVRPHDGGLWLRQDOKDUGZDUHQRWMXVWEOLQNLQJWKHOLJKWEXLOWLQWR WKHERDUG&KDSWHUFRYHUVKRZWRVWUXFWXUHDVNHWFKIRU$UGXLQRDQGSURYLGHVDQ LQWURGXFWLRQWRSURJUDPPLQJ
,I\RXDOUHDG\NQRZ\RXUZD\DURXQG$UGXLQREDVLFVIHHOIUHHWRMXPS IRUZDUGWRODWHUFKDSWHUV,I\RX¦UHDILUVWWLPH$UGXLQRXVHUSDWLHQFH LQWKHVHHDUO\UHFLSHVZLOOSD\RIIZLWKVPRRWKHUUHVXOWVODWHU
Arduino Software
6RIWZDUHSURJUDPVFDOOHGVNHWFKHVDUHFUHDWHGRQDFRPSXWHUXVLQJWKH$UGXLQRLQWH JUDWHGGHYHORSPHQWHQYLURQPHQW,'(7KH,'(HQDEOHV\RXWRZULWHDQGHGLWFRGH DQGFRQYHUWWKLVFRGHLQWRLQVWUXFWLRQVWKDW$UGXLQRKDUGZDUHXQGHUVWDQGV7KH,'(
DOVRWUDQVIHUVWKRVHLQVWUXFWLRQVWRWKH$UGXLQRERDUGDSURFHVVFDOOHGXSORDGLQJ
Arduino Hardware
7KH$UGXLQRERDUGLVZKHUHWKHFRGH\RXZULWHLVH[HFXWHG7KHERDUGFDQRQO\FRQWURO DQGUHVSRQGWRHOHFWULFLW\VRVSHFLILFFRPSRQHQWVDUHDWWDFKHGWRLWWRHQDEOHLWWR LQWHUDFWZLWKWKHUHDOZRUOG7KHVHFRPSRQHQWVFDQEHVHQVRUVZKLFKFRQYHUWVRPH DVSHFWRIWKHSK\VLFDOZRUOGWRHOHFWULFLW\VRWKDWWKHERDUGFDQVHQVHLWRUDFWXDWRUV ZKLFKJHWHOHFWULFLW\IURPWKHERDUGDQGFRQYHUWLWLQWRVRPHWKLQJWKDWFKDQJHVWKH ZRUOG([DPSOHVRIVHQVRUVLQFOXGHVZLWFKHVDFFHOHURPHWHUVDQGXOWUDVRXQGGLVWDQFH VHQVRUV$FWXDWRUVDUHWKLQJVOLNHOLJKWVDQG/('VVSHDNHUVPRWRUVDQGGLVSOD\V 7KHUHDUHDYDULHW\RIRIILFLDOERDUGVWKDW\RXFDQXVHZLWK$UGXLQRVRIWZDUHDQGDZLGH UDQJHRI$UGXLQRFRPSDWLEOHERDUGVSURGXFHGE\PHPEHUVRIWKHFRPPXQLW\
7KHPRVWSRSXODUERDUGVFRQWDLQD86%FRQQHFWRUWKDWLVXVHGWRSURYLGHSRZHUDQG FRQQHFWLYLW\ IRU XSORDGLQJ \RXU VRIWZDUH RQWR WKH ERDUG)LJXUH VKRZV D EDVLF ERDUGWKH$UGXLQR8QR
<RXFDQJHWERDUGVDVVPDOODVDSRVWDJHVWDPSVXFKDVWKH$UGXLQR0LQLDQG3UR0LQL ODUJHUERDUGVWKDWKDYHPRUHFRQQHFWLRQRSWLRQVDQGPRUHSRZHUIXOSURFHVVRUVVXFK DVWKH$UGXLQR0HJDDQGERDUGVWDLORUHGIRUVSHFLILFDSSOLFDWLRQVVXFKDVWKH/LO\3DG IRUZHDUDEOHDSSOLFDWLRQVWKH)LRIRUZLUHOHVVSURMHFWVDQGWKH$UGXLQR3URIRUHP EHGGHGDSSOLFDWLRQVVWDQGDORQHSURMHFWVWKDWDUHRIWHQEDWWHU\RSHUDWHG0DQ\RWKHU
$UGXLQRFRPSDWLEOHERDUGVDUHDOVRDYDLODEOHLQFOXGLQJWKHIROORZLQJ
$UGXLQR1DQRDWLQ\ERDUGZLWK86%FDSDELOLW\IURP*UDYLWHFKKWWSVWRUHJUDY LWHFKXVDUQDZLDWQKWPO
%DUH%RQHV%RDUGDORZFRVWERDUGDYDLODEOHZLWKRUZLWKRXW86%FDSDELOLW\IURP 0RGHUQ'HYLFHKWWSZZZPRGHUQGHYLFHFRPSURGXFWVEEENLW
%RDUGXLQR D ORZFRVW EUHDGERDUGFRPSDWLEOH ERDUG IURP $GDIUXLW ,QGXVWULHV KWWSZZZDGDIUXLWFRP
6HHHGXLQR D IOH[LEOH YDULDWLRQ RI WKH VWDQGDUG 86% ERDUG IURP 6HHHG 6WXGLR
%D]DDUKWWSZZZVHHHGVWXGLRFRP
7HHQV\DQG7HHQV\WLQ\EXWH[WUHPHO\YHUVDWLOHERDUGVIURP3-5&KWWSZZZ SMUFFRPWHHQV\
$FRPSUHKHQVLYHOLVWRI$UGXLQRFRPSDWLEOHERDUGVLVDYDLODEOHDWKWWSZZZIUHHGXLQR RUJ
See Also
$QRYHUYLHZRI$UGXLQRERDUGVKWWSZZZDUGXLQRFFHQ0DLQ+DUGZDUH
2QOLQH JXLGHV IRU JHWWLQJ VWDUWHG ZLWK $UGXLQR DUH DYDLODEOH DWKWWSDUGXLQRFFHQ
*XLGH:LQGRZVIRU:LQGRZVKWWSDUGXLQRFFHQ*XLGH0DF26;IRU0DF26;DQG KWWSZZZDUGXLQRFFSOD\JURXQG/HDUQLQJ/LQX[IRU/LQX[
)LJXUH%DVLFERDUGWKH$UGXLQR8QR
1.0 Introduction | 3
1.1 Installing the Integrated Development Environment (IDE)
Problem
<RXZDQWWRLQVWDOOWKH$UGXLQRGHYHORSPHQWHQYLURQPHQWRQ\RXUFRPSXWHU
Solution
7KH$UGXLQRVRIWZDUHIRU:LQGRZV0DFDQG/LQX[FDQEHGRZQORDGHGIURPKWWS DUGXLQRFFHQ0DLQ6RIWZDUH
7KH:LQGRZVGRZQORDGLVD=,3ILOH8Q]LSWKHILOHWRDQ\FRQYHQLHQWGLUHFWRU\¢
3URJUDP)LOHV$UGXLQRLVDVHQVLEOHSODFH
$IUHHXWLOLW\IRUXQ]LSSLQJILOHVFDOOHG=LSFDQEHGRZQORDGHGIURP KWWSZZZ]LSRUJ
8Q]LSSLQJWKHILOHZLOOFUHDWHDIROGHUQDPHG$UGXLQRQQ!ZKHUHQQ!LVWKHYHU VLRQ QXPEHU RI WKH $UGXLQR UHOHDVH \RX GRZQORDGHG 7KH GLUHFWRU\ FRQWDLQV WKH H[HFXWDEOHILOHQDPHG$UGXLQRH[HDORQJZLWKYDULRXVRWKHUILOHVDQGIROGHUV'RXEOH FOLFNWKH$UGXLQRH[HILOHDQGWKHVSODVKVFUHHQVKRXOGDSSHDUVHH)LJXUHIROORZHG E\WKHPDLQSURJUDPZLQGRZVHH)LJXUH%HSDWLHQWDVLWFDQWDNHVRPHWLPHIRU WKHVRIWZDUHWRORDG
)LJXUH$UGXLQRVSODVKVFUHHQYHUVLRQLQ:LQGRZV
7KH$UGXLQRGRZQORDGIRUWKH0DFLVDGLVNLPDJHGPJGRXEOHFOLFNWKHILOHZKHQ WKHGRZQORDGLVFRPSOHWH7KHLPDJHZLOOPRXQWLWZLOODSSHDUOLNHDPHPRU\VWLFN RQWKHGHVNWRS,QVLGHWKHGLVNLPDJHLVWKH$UGXLQRDSSOLFDWLRQ&RS\WKLVWRVRPH ZKHUHFRQYHQLHQW¢WKH$SSOLFDWLRQVIROGHULVDVHQVLEOHSODFH'RXEOHFOLFNWKHDSSOL FDWLRQRQFH\RXKDYHFRSLHGLWRYHULWLVQRWDJRRGLGHDWRUXQLWIURPWKHGLVNLPDJH 7KHVSODVKVFUHHQZLOODSSHDUIROORZHGE\WKHPDLQSURJUDPZLQGRZ
/LQX[LQVWDOODWLRQYDULHVGHSHQGLQJRQWKH/LQX[GLVWULEXWLRQ\RXDUHXVLQJ6HHWKH
$UGXLQRZLNLIRULQIRUPDWLRQKWWSZZZDUGXLQRFFSOD\JURXQG/HDUQLQJ/LQX[
7RHQDEOHWKH$UGXLQRGHYHORSPHQWHQYLURQPHQWWRFRPPXQLFDWHZLWKWKHERDUG\RX QHHGWRLQVWDOOGULYHUV
)LJXUH$UGXLQR,'(PDLQZLQGRZYHUVLRQLQ:LQGRZV
1.1 Installing the Integrated Development Environment (IDE) | 5
2Q:LQGRZVXVHWKH86%FDEOHWRFRQQHFW\RXU3&DQGWKH$UGXLQRERDUGDQGZDLW IRUWKH)RXQG1HZ+DUGZDUH:L]DUGWRDSSHDU,I\RXDUHXVLQJ:LQGRZV9LVWDRU :LQGRZVDQGDUHRQOLQH\RXFDQOHWWKHZL]DUGVHDUFKIRUGULYHUVDQGWKH\ZLOOLQVWDOO DXWRPDWLFDOO\2Q:LQGRZV;3\RXVKRXOGVSHFLI\WKHORFDWLRQRIWKHGULYHUV8VHWKH ILOH VHOHFWRU WR QDYLJDWH WR WKHGULYHUV GLUHFWRU\ ORFDWHG LQ WKH GLUHFWRU\ ZKHUH \RX XQ]LSSHGWKH$UGXLQRILOHV:KHQWKHGULYHUKDVLQVWDOOHGWKH)RXQG1HZ+DUGZDUH :L]DUGZLOODSSHDUDJDLQVD\LQJDQHZVHULDOSRUWKDVEHHQIRXQG)ROORZWKHVDPH SURFHVVDVEHIRUH
,WLVLPSRUWDQWWKDW\RXJRWKURXJKWKHVHTXHQFHRIVWHSVWRLQVWDOOWKH GULYHUVWZRWLPHVRUWKHVRIWZDUHZLOOQRWEHDEOHWRFRPPXQLFDWHZLWK WKHERDUG
2QWKH0DFWKHODWHVW$UGXLQRERDUGVVXFKDVWKH8QRFDQEHXVHGZLWKRXWDGGLWLRQDO GULYHUVEXWLI\RXDUHXVLQJHDUOLHUERDUGV\RXZLOOQHHGWRLQVWDOOGULYHUVRIWZDUH7KHUH LVDSDFNDJHQDPHG)7',86%6HULDO'ULYHUZLWKDUDQJHRIQXPEHUVDIWHULWLQVLGHWKH GLVNLPDJH'RXEOHFOLFNWKLVDQGWKHLQVWDOOHUZLOOWDNH\RXWKURXJKWKHSURFHVV<RX ZLOOQHHGWRNQRZDQDGPLQLVWUDWRUSDVVZRUGWRFRPSOHWHWKHSURFHVV
2Q/LQX[PRVWGLVWULEXWLRQVKDYHWKHGULYHUDOUHDG\LQVWDOOHGEXWIROORZWKH/LQX[
OLQNJLYHQLQWKLVFKDSWHU¦VLQWURGXFWLRQIRUVSHFLILFLQIRUPDWLRQIRU\RXUGLVWULEXWLRQ
Discussion
,IWKHVRIWZDUHIDLOVWRVWDUWFKHFNWKHWURXEOHVKRRWLQJVHFWLRQRIWKH$UGXLQRZHEVLWH KWWSDUGXLQRFFHQ*XLGH7URXEOHVKRRWLQJIRUKHOSVROYLQJLQVWDOODWLRQSUREOHPV
See Also
2QOLQH JXLGHV IRU JHWWLQJ VWDUWHG ZLWK $UGXLQR DUH DYDLODEOH DWKWWSDUGXLQRFFHQ
*XLGH:LQGRZVIRU:LQGRZVKWWSDUGXLQRFFHQ*XLGH0DF26;IRU0DF26;DQG KWWSZZZDUGXLQRFFSOD\JURXQG/HDUQLQJ/LQX[IRU/LQX[
1.2 Setting Up the Arduino Board
Problem
<RXZDQWWRSRZHUXSDQHZERDUGDQGYHULI\WKDWLWLVZRUNLQJ
Solution
3OXJWKHERDUGLQWRD86%SRUWRQ\RXUFRPSXWHUDQGFKHFNWKDWWKHJUHHQ/('SRZHU LQGLFDWRURQWKHERDUGLOOXPLQDWHV6WDQGDUG$UGXLQRERDUGV8QR'XHPLODQRYHDQG 0HJDKDYHDJUHHQ/('SRZHULQGLFDWRUORFDWHGQHDUWKHUHVHWVZLWFK
$QRUDQJH/('QHDUWKHFHQWHURIWKHERDUGODEHOHG£3LQ/('¤LQ)LJXUHVKRXOG IODVKRQDQGRIIZKHQWKHERDUGLVSRZHUHGXSERDUGVFRPHIURPWKHIDFWRU\SUHORDGHG ZLWKVRIWZDUHWRIODVKWKH/('DVDVLPSOHFKHFNWKDWWKHERDUGLVZRUNLQJ
)LJXUH%DVLF$UGXLQRERDUG8QRDQG'XHPLODQRYH
Discussion
,IWKHSRZHU/('GRHVQRWLOOXPLQDWHZKHQWKHERDUGLVFRQQHFWHGWR\RXUFRPSXWHU WKHERDUGLVSUREDEO\QRWUHFHLYLQJSRZHU
7KH IODVKLQJ /(' FRQQHFWHG WR GLJLWDO RXWSXW SLQ LV EHLQJ FRQWUROOHG E\ FRGH UXQQLQJRQWKHERDUGQHZERDUGVDUHSUHORDGHGZLWKWKH%OLQNH[DPSOHVNHWFK,IWKH SLQ/('LVIODVKLQJWKHVNHWFKLVUXQQLQJFRUUHFWO\ZKLFKPHDQVWKHFKLSRQWKH ERDUGLVZRUNLQJ,IWKHJUHHQSRZHU/('LVRQEXWWKHSLQ/('LVQRWIODVKLQJLW FRXOG EH WKDW WKH IDFWRU\ FRGH LV QRW RQ WKH FKLS IROORZ WKH LQVWUXFWLRQV LQ5HF LSHWRORDGWKH%OLQNVNHWFKRQWRWKHERDUGWRYHULI\WKDWWKHERDUGLVZRUNLQJ,I
\RXDUHQRWXVLQJDVWDQGDUGERDUGLWPD\QRWKDYHDEXLOWLQ/('RQSLQVRFKHFN WKHGRFXPHQWDWLRQIRUGHWDLOVRI\RXUERDUG
See Also
2QOLQH JXLGHV IRU JHWWLQJ VWDUWHG ZLWK $UGXLQR DUH DYDLODEOH DWKWWSDUGXLQRFFHQ
*XLGH:LQGRZVIRU:LQGRZVKWWSDUGXLQRFFHQ*XLGH0DF26;IRU0DF26;DQG KWWSZZZDUGXLQRFFSOD\JURXQG/HDUQLQJ/LQX[IRU/LQX[
$WURXEOHVKRRWLQJJXLGHFDQEHIRXQGDWKWWSDUGXLQRFFHQ*XLGH7URXEOHVKRRWLQJ 1.2 Setting Up the Arduino Board | 7
1.3 Using the Integrated Development Environment (IDE) to Prepare an Arduino Sketch
Problem
<RXZDQWWRJHWDVNHWFKDQGSUHSDUHLWIRUXSORDGLQJWRWKHERDUG
Solution
8VHWKH$UGXLQR,'(WRFUHDWHRSHQDQGPRGLI\VNHWFKHVWKDWGHILQHZKDWWKHERDUG ZLOOGR<RXFDQXVHEXWWRQVDORQJWKHWRSRIWKH,'(WRSHUIRUPWKHVHDFWLRQVVKRZQ LQ)LJXUHRU\RXFDQXVHWKHPHQXVRUNH\ERDUGVKRUWFXWVVKRZQLQ)LJXUH 7KH6NHWFK(GLWRUDUHDLVZKHUH\RXYLHZDQGHGLWFRGHIRUDVNHWFK,WVXSSRUWVFRP PRQWH[WHGLWLQJNH\VVXFKDV&WUO) )RQD0DFIRUILQG&WUO= =RQD0DF IRUXQGR&WUO& &RQD0DFWRFRS\KLJKOLJKWHGWH[WDQG&WUO9 9RQD0DF WRSDVWHKLJKOLJKWHGWH[W
)LJXUHVKRZVKRZWRORDGWKH%OLQNVNHWFKWKHVNHWFKWKDWFRPHVSUHORDGHGRQD QHZ$UGXLQRERDUG
$IWHU\RX¦YHVWDUWHGWKH,'(JRWRWKH)LOH ([DPSOHVPHQXDQGVHOHFW%DVLFV %OLQN DVVKRZQLQ)LJXUH7KHFRGHIRUEOLQNLQJWKHEXLOWLQ/('ZLOOEHGLVSOD\HGLQWKH 6NHWFK(GLWRUZLQGRZUHIHUWR)LJXUH
%HIRUHWKHFRGHFDQEHVHQWWRWKHERDUGLWQHHGVWREHFRQYHUWHGLQWRLQVWUXFWLRQVWKDW FDQEHUHDGDQGH[HFXWHGE\WKH$UGXLQRFRQWUROOHUFKLSWKLVLVFDOOHGFRPSLOLQJ7R GRWKLVFOLFNWKHFRPSLOHEXWWRQWKHWRSOHIWEXWWRQZLWKDWULDQJOHLQVLGHRUVHOHFW 6NHWFK 9HULI\&RPSLOH
<RXVKRXOGVHHDPHVVDJHWKDWUHDGV£&RPSLOLQJ¤LQWKHPHVVDJHDUHDEHORZWKHWH[W HGLWLQJZLQGRZ$IWHUDVHFRQGRUWZRDPHVVDJHWKDWUHDGV£'RQH&RPSLOLQJ¤ZLOO DSSHDU7KHEODFNFRQVROHDUHDZLOOFRQWDLQWKHIROORZLQJDGGLWLRQDOPHVVDJH
Binary sketch size: 1008 bytes (of a 32256 byte maximum)
7KHH[DFWPHVVDJHPD\GLIIHUGHSHQGLQJRQWKH$UGXLQRYHUVLRQLWLVWHOOLQJ\RXWKH VL]HRIWKHVNHWFKDQGWKHPD[LPXPVL]HWKDW\RXUERDUGFDQDFFHSW
)LJXUH$UGXLQR,'(
Discussion
6RXUFHFRGHIRU$UGXLQRLVFDOOHGDVNHWFK7KHSURFHVVWKDWWDNHVDVNHWFKDQGFRQYHUWV LWLQWRDIRUPWKDWZLOOZRUNRQWKHERDUGLVFDOOHGFRPSLODWLRQ7KH,'(XVHVDQXPEHU RIFRPPDQGOLQHWRROVEHKLQGWKHVFHQHVWRFRPSLOHDVNHWFK)RUPRUHLQIRUPDWLRQ RQWKLVVHH5HFLSH
1.3 Using the Integrated Development Environment (IDE) to Prepare an Arduino Sketch | 9
)LJXUH,'(PHQXVHOHFWLQJWKH%OLQNH[DPSOHVNHWFK
7KHILQDOPHVVDJHWHOOLQJ\RXWKHVL]HRIWKHVNHWFKLQGLFDWHVKRZPXFKSURJUDPVSDFH LVQHHGHGWRVWRUHWKHFRQWUROOHULQVWUXFWLRQVRQWKHERDUG,IWKHVL]HRIWKHFRPSLOHG VNHWFKLVJUHDWHUWKDQWKHDYDLODEOHPHPRU\RQWKHERDUGWKHIROORZLQJHUURUPHVVDJH LVGLVSOD\HG
Sketch too big; see http://www.arduino.cc/en/Guide/Troubleshooting#size for tips on reducing it.
,IWKLVKDSSHQV\RXQHHGWRPDNH\RXUVNHWFKVPDOOHUWREHDEOHWRSXWLWRQWKHERDUG RUJHWDERDUGZLWKKLJKHUFDSDFLW\
,IWKHUHDUHHUURUVLQWKHFRGHWKHFRPSLOHUZLOOSULQWRQHRUPRUHHUURUPHVVDJHVLQWKH FRQVROHZLQGRZ7KHVHPHVVDJHVFDQKHOSLGHQWLI\WKHHUURU¢VHH$SSHQGL['RQVRIW ZDUHHUURUVIRUWURXEOHVKRRWLQJWLSV
7RSUHYHQWDFFLGHQWDORYHUZULWLQJRIWKHH[DPSOHVWKH$UGXLQR,'(
GRHVQRWDOORZ\RXWRVDYHFKDQJHVWRWKHSURYLGHGH[DPSOHVNHWFKHV
<RXPXVWUHQDPHWKHPXVLQJWKH6DYH$VPHQXRSWLRQ<RXFDQVDYH VNHWFKHV\RXZULWH\RXUVHOIZLWKWKH6DYHEXWWRQVHH5HFLSH
$V\RXGHYHORSDQGPRGLI\DVNHWFK\RXVKRXOGDOVRFRQVLGHUXVLQJWKH)LOH 6DYH$V PHQXRSWLRQDQGXVLQJDGLIIHUHQWQDPHRUYHUVLRQQXPEHUUHJXODUO\VRWKDWDV\RX LPSOHPHQWHDFKELW\RXFDQJREDFNWRDQROGHUYHUVLRQLI\RXQHHGWR
&RGHXSORDGHGRQWRWKHERDUGFDQQRWEHGRZQORDGHGEDFNRQWR\RXU FRPSXWHU0DNHVXUH\RXVDYH\RXUVNHWFKFRGHRQ\RXUFRPSXWHU<RX FDQQRWVDYHFKDQJHVEDFNWRWKHH[DPSOHILOHV\RXQHHGWRXVH6DYH$V DQGJLYHWKHFKDQJHGILOHDQRWKHUQDPH
See Also
5HFLSHVKRZVDQH[DPSOHVNHWFK$SSHQGL['KDVWLSVRQWURXEOHVKRRWLQJVRIWZDUH SUREOHPV
1.4 Uploading and Running the Blink Sketch
Problem
<RXZDQWWRWUDQVIHU\RXUFRPSLOHGVNHWFKWRWKH$UGXLQRERDUGDQGVHHLWZRUNLQJ
Solution
&RQQHFW\RXU$UGXLQRERDUGWR\RXUFRPSXWHUXVLQJWKH86%FDEOH/RDGWKH%OLQN VNHWFKLQWRWKH,'(DVGHVFULEHGLQ5HFLSH
1H[WVHOHFW7RROV %RDUGIURPWKHGURSGRZQPHQXDQGVHOHFWWKHQDPHRIWKHERDUG
\RXKDYHFRQQHFWHGLILWLVWKHVWDQGDUG8QRERDUGLWLVSUREDEO\WKHILUVWHQWU\LQWKH ERDUGOLVW
1RZVHOHFW7RROV 6HULDO3RUW<RXZLOOJHWDGURSGRZQOLVWRIDYDLODEOHVHULDOSRUWVRQ
\RXUFRPSXWHU(DFKPDFKLQHZLOOKDYHDGLIIHUHQWFRPELQDWLRQRIVHULDOSRUWVGH SHQGLQJRQZKDWRWKHUGHYLFHV\RXKDYHXVHGZLWK\RXUFRPSXWHU
2Q:LQGRZVWKH\ZLOOEHOLVWHGDVQXPEHUHG&20HQWULHV,IWKHUHLVRQO\RQHHQWU\
VHOHFWLW,IWKHUHDUHPXOWLSOHHQWULHV\RXUERDUGZLOOSUREDEO\EHWKHODVWHQWU\
1.4 Uploading and Running the Blink Sketch | 11
2QWKH0DF\RXUERDUGZLOOEHOLVWHGWZLFHLILWLVDQ8QRERDUG
/dev/tty.usbmodem-XXXXXXX /dev/cu.usbmodem-XXXXXXX
,I\RXKDYHDQROGHUERDUGLWZLOOEHOLVWHGDVIROORZV
/dev/tty.usbserial-XXXXXXX /dev/cu.usbserial-XXXXXXX
(DFKERDUGZLOOKDYHGLIIHUHQWYDOXHVIRUXXXXXXX6HOHFWHLWKHUHQWU\
&OLFNRQWKHXSORDGEXWWRQLQ)LJXUHLW¦VWKHILIWKEXWWRQIURPWKHOHIWRUFKRRVH )LOH 8SORDGWR,2ERDUG
7KHVRIWZDUHZLOOFRPSLOHWKHFRGHDVLQ5HFLSH$IWHUWKHVRIWZDUHLVFRPSLOHGLW LVXSORDGHGWRWKHERDUG,I\RXORRNDW\RXUERDUG\RXZLOOVHHWKH/('VWRSIODVKLQJ DQGWZROLJKWVODEHOHGDV6HULDO/('VLQ)LJXUHMXVWEHORZWKHSUHYLRXVO\IODVKLQJ /('VKRXOGIOLFNHUIRUDFRXSOHRIVHFRQGVDVWKHFRGHXSORDGV7KHRULJLQDOOLJKWVKRXOG WKHQVWDUWIODVKLQJDJDLQDVWKHFRGHUXQV
Discussion
)RUWKH,'(WRVHQGWKHFRPSLOHGFRGHWRWKHERDUGWKHERDUGQHHGVWREHSOXJJHG LQWRWKHFRPSXWHUDQG\RXQHHGWRWHOOWKH,'(ZKLFKERDUGDQGVHULDOSRUW\RXDUH XVLQJ
:KHQDQXSORDGVWDUWVZKDWHYHUVNHWFKLVUXQQLQJRQWKHERDUGLVVWRSSHGLI\RXZHUH UXQQLQJWKH%OLQNVNHWFKWKH/('ZLOOVWRSIODVKLQJ7KHQHZVNHWFKLVXSORDGHGWR WKHERDUGUHSODFLQJWKHSUHYLRXVVNHWFK7KHQHZVNHWFKZLOOVWDUWUXQQLQJZKHQWKH XSORDGKDVVXFFHVVIXOO\FRPSOHWHG
2OGHU$UGXLQRERDUGVDQGVRPHFRPSDWLEOHVGRQRWDXWRPDWLFDOO\LQ WHUUXSWWKHUXQQLQJVNHWFKWRLQLWLDWHXSORDG,QWKLVFDVH\RXQHHGWR SUHVVWKH5HVHWEXWWRQRQWKHERDUGMXVWDIWHUWKHVRIWZDUHUHSRUWVWKDW LWLVGRQHFRPSLOLQJZKHQ\RXVHHWKHPHVVDJHDERXWWKHVL]HRIWKH VNHWFK,WPD\WDNHDIHZDWWHPSWVWRJHWWKHWLPLQJULJKWEHWZHHQWKH HQGRIWKHFRPSLODWLRQDQGSUHVVLQJWKH5HVHWEXWWRQ
7KH,'(ZLOOGLVSOD\DQHUURUPHVVDJHLIWKHXSORDGLVQRWVXFFHVVIXO3UREOHPVDUH XVXDOO\GXHWRWKHZURQJERDUGRUVHULDOSRUWEHLQJVHOHFWHGRUWKHERDUGQRWEHLQJ SOXJJHGLQ
,I\RXKDYHWURXEOHLGHQWLI\LQJWKHFRUUHFWSRUWRQ:LQGRZVWU\XQSOXJJLQJWKHERDUG DQGWKHQVHOHFWLQJ7RROV 6HULDO3RUWWRVHHZKLFK&20SRUWLVQRORQJHURQWKHGLVSOD\
OLVW$QRWKHUDSSURDFKLVWRVHOHFWWKHSRUWVRQHE\RQHXQWLO\RXVHHWKHOLJKWVRQWKH ERDUGIOLFNHUWRLQGLFDWHWKDWWKHFRGHLVXSORDGLQJ
See Also
7KH$UGXLQRWURXEOHVKRRWLQJSDJHKWWSZZZDUGXLQRFFHQ*XLGH7URXEOHVKRRWLQJ
1.5 Creating and Saving a Sketch
Problem
<RXZDQWWRFUHDWHDVNHWFKDQGVDYHLWWR\RXUFRPSXWHU
Solution
7RRSHQDQHGLWRUZLQGRZUHDG\IRUDQHZVNHWFKODXQFKWKH,'(VHH5HFLSHJR WRWKH)LOHPHQXDQGVHOHFW1HZ3DVWHWKHIROORZLQJFRGHLQWRWKH6NHWFK(GLWRUZLQ GRZLW¦VVLPLODUWRWKH%OLQNVNHWFKEXWWKHEOLQNVODVWWZLFHDVORQJ
const int ledPin = 13; // LED connected to digital pin 13 void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH); // set the LED on delay(2000); // wait for two seconds digitalWrite(ledPin, LOW); // set the LED off delay(2000); // wait for two seconds }
&RPSLOHWKHFRGHE\FOLFNLQJWKHFRPSLOHEXWWRQWKHWRSOHIWEXWWRQZLWKDWULDQJOH LQVLGHRUVHOHFW6NHWFK 9HULI\&RPSLOHVHH5HFLSH
8SORDGWKHFRGHE\FOLFNLQJRQWKHXSORDGEXWWRQRUFKRRVH)LOH 8SORDGWR,2ERDUG VHH5HFLSH$IWHUXSORDGLQJWKH/('VKRXOGEOLQNZLWKHDFKIODVKODVWLQJWZR VHFRQGV
<RX FDQ VDYH WKLV VNHWFK WR \RXU FRPSXWHU E\ FOLFNLQJ WKH 6DYH EXWWRQ RU VHOHFW )LOH 6DYH
<RXFDQVDYHWKHVNHWFKXVLQJDQHZQDPHE\VHOHFWLQJWKH6DYH$VPHQXRSWLRQ$
GLDORJER[ZLOORSHQZKHUH\RXFDQHQWHUWKHILOHQDPH
Discussion
:KHQ\RXVDYHDILOHLQWKH,'(DVWDQGDUGGLDORJER[IRUWKHRSHUDWLQJV\VWHPZLOO RSHQ,WVXJJHVWVWKDW\RXVDYHWKHVNHWFKWRDIROGHUFDOOHG$UGXLQRLQ\RXU0\'RFX PHQWVIROGHURU\RXU'RFXPHQWVIROGHURQD0DF<RXFDQUHSODFHWKHGHIDXOWVNHWFK
1.5 Creating and Saving a Sketch | 13
QDPHZLWKDPHDQLQJIXOQDPHWKDWUHIOHFWVWKHSXUSRVHRI\RXUVNHWFK&OLFN6DYHWR VDYHWKHILOH
7KHGHIDXOWQDPHLVWKHZRUGVNHWFKIROORZHGE\WKHFXUUHQWGDWH6H TXHQWLDOOHWWHUVVWDUWLQJIURPDDUHXVHGWRGLVWLQJXLVKVNHWFKHVFUHDWHG RQWKHVDPHGD\5HSODFLQJWKHGHIDXOWQDPHZLWKVRPHWKLQJPHDQLQJ IXOKHOSV\RXWRLGHQWLI\WKHSXUSRVHRIDVNHWFKZKHQ\RXFRPHEDFN WRLWODWHU
,I\RXXVHFKDUDFWHUVWKDWWKH,'(GRHVQRWDOORZHJWKHVSDFHFKDUDFWHUWKH,'(
ZLOODXWRPDWLFDOO\UHSODFHWKHVHZLWKYDOLGFKDUDFWHUV
$UGXLQRVNHWFKHVDUHVDYHGDVSODLQWH[WILOHVZLWKWKHH[WHQVLRQSGH7KH\DUHDXWR PDWLFDOO\VDYHGLQDIROGHUZLWKWKHVDPHQDPHDVWKHVNHWFK
<RXFDQVDYH\RXUVNHWFKHVWRDQ\IROGHURQ\RXUFRPSXWHUEXWLI\RXXVHWKHGHIDXOW IROGHUWKH$UGXLQRIROGHULQ\RXU'RFXPHQWVIROGHU\RXUVNHWFKHVZLOODXWRPDWLFDOO\
DSSHDULQWKH6NHWFKERRNPHQXRIWKH$UGXLQRVRIWZDUHDQGEHHDVLHUWRORFDWH
,I\RXKDYHHGLWHGRQHRIWKHH[DPSOHVIURPWKH$UGXLQRGRZQORDG\RX ZLOOQRWEHDEOHWRVDYHWKHFKDQJHGILOHXVLQJWKHVDPHILOHQDPH7KLV SUHVHUYHVWKHVWDQGDUGH[DPSOHVLQWDFW,I\RXZDQWWRVDYHDPRGLILHG H[DPSOH\RXZLOOQHHGWRVHOHFWDQRWKHUORFDWLRQIRUWKHVNHWFK
$IWHU\RXKDYHPDGHFKDQJHV\RXZLOOVHHDGLDORJER[DVNLQJLI\RXZDQWWRVDYHWKH VNHWFKZKHQDVNHWFKLVFORVHG
7KHV\PEROIROORZLQJWKHQDPHRIWKHVNHWFKLQWKHWRSEDURIWKH,'(
ZLQGRZLQGLFDWHVWKDWWKHVNHWFKFRGHKDVFKDQJHVWKDWKDYHQRW\HW EHHQVDYHGRQWKHFRPSXWHU7KLVV\PEROLVUHPRYHGZKHQ\RXVDYHWKH VNHWFK
7KH$UGXLQRVRIWZDUHGRHVQRWSURYLGHDQ\NLQGRIYHUVLRQFRQWUROVRLI\RXZDQWWR EHDEOHWRUHYHUWWRROGHUYHUVLRQVRIDVNHWFK\RXFDQXVH6DYH$VUHJXODUO\DQGJLYH HDFKUHYLVLRQRIWKHVNHWFKDVOLJKWO\GLIIHUHQWQDPH
)UHTXHQWFRPSLOLQJDV\RXPRGLI\RUDGGFRGHLVDJRRGZD\WRFKHFNIRUHUURUVDV\RX ZULWH\RXUFRGH,WZLOOEHHDVLHUWRILQGDQGIL[DQ\HUURUVEHFDXVHWKH\ZLOOXVXDOO\EH DVVRFLDWHGZLWKZKDW\RXKDYHMXVWZULWWHQ
2QFHDVNHWFKKDVEHHQXSORDGHGRQWRWKHERDUGWKHUHLVQRZD\WR GRZQORDGLWEDFNWR\RXUFRPSXWHU0DNHVXUH\RXVDYHDQ\FKDQJHV WR\RXUVNHWFKHVWKDW\RXZDQWWRNHHS
,I\RXRSHQVNHWFKHV\RXJHWIURPRWKHUSHRSOHWKDWDUHQRWLQDIROGHUZLWKWKHVDPH QDPHDVWKHVNHWFKWKH,'(ZLOOWHOO\RXDQG\RXFDQFOLFN2.WRSXWWKHPLQDIROGHU ZLWKWKHVDPHQDPH
6NHWFKHVPXVWEHORFDWHGLQDIROGHUZLWKWKHVDPHQDPHDVWKHVNHWFK 7KH,'(ZLOOFUHDWHWKHIROGHUDXWRPDWLFDOO\ZKHQ\RXVDYHDQHZVNHWFK
1.6 Using Arduino
Problem
<RXZDQWWRJHWVWDUWHGZLWKDSURMHFWWKDWLVHDV\WREXLOGDQGIXQWRXVH
Solution
7KLVUHFLSHSURYLGHVDWDVWHRIVRPHRIWKHWHFKQLTXHVWKDWDUHFRYHUHGLQGHWDLOLQODWHU FKDSWHUV
7KHVNHWFKLVEDVHGRQWKH/('EOLQNLQJFRGHIURPWKHSUHYLRXVUHFLSHEXWLQVWHDGRI XVLQJDIL[HGGHOD\WKHUDWHLVGHWHUPLQHGE\DOLJKWVHQVLWLYHVHQVRUFDOOHGDOLJKWGH SHQGHQWUHVLVWRURU/'5VHH5HFLSH:LUHWKH/'5DVVKRZQLQ)LJXUH
)LJXUH$UGXLQRZLWKOLJKWGHSHQGHQWUHVLVWRU
7KHIROORZLQJVNHWFKUHDGVWKHOLJKWOHYHORIDQ/'5FRQQHFWHGWRDQDORJSLQ7KH OLJKWOHYHOVWULNLQJWKH/'5ZLOOFKDQJHWKHEOLQNUDWHRIWKHLQWHUQDO/('FRQQHFWHGWR SLQ
1.6 Using Arduino | 15
const int ledPin = 13; // LED connected to digital pin 13 const int sensorPin = 0; // connect sensor to analog input 0 void setup()
{
pinMode(ledPin, OUTPUT); // enable output on the led pin }
void loop() {
int rate = analogRead(sensorPin); // read the analog input Serial.println(rate);
rate = map(rate, 200,800,minDuration, maxDuration); // convert to blink rate digitalWrite(ledPin, HIGH); // set the LED on
delay(rate); // wait duration dependent on light level digitalWrite(ledPin, LOW); // set the LED off
delay(rate);
}
Discussion
7KHYDOXHRIWKH.UHVLVWRULVQRWFULWLFDO$Q\WKLQJIURP.WR.FDQEHXVHG7KH OLJKWOHYHORQWKH/'5ZLOOFKDQJHWKHYROWDJHOHYHORQDQDORJSLQ7KHanalogRead FRPPDQGVHH&KDSWHUSURYLGHVDYDOXHWKDWUDQJHVIURPDURXQGZKHQWKH/'5 LVGDUNWRRUVRZKHQLWLVYHU\EULJKW7KLVYDOXHGHWHUPLQHVWKHGXUDWLRQRIWKH /('RQDQGRIIWLPHVVRWKHEOLQNUDWHLQFUHDVHVZLWKOLJKWLQWHQVLW\
<RXFDQVFDOHWKHEOLQNUDWHE\XVLQJWKH$UGXLQRmapIXQFWLRQDVIROORZV
const int ledPin = 13; // LED connected to digital pin 13 const int sensorPin = 0; // connect sensor to analog input 0 // the next two lines set the min and max delay between blinks const int minDuration = 100; // minimum wait between blinks const int maxDuration = 1000; // maximum wait between blinks
void setup() {
pinMode(ledPin, OUTPUT); // enable output on the led pin }
void loop() {
int rate = analogRead(sensorPin); // read the analog input // the next line scales the blink rate between the min and max values rate = map(rate, 200,800,minDuration, maxDuration); // convert to blink rate digitalWrite(ledPin, HIGH); // set the LED on
delay(rate); // wait duration dependent on light level digitalWrite(ledPin, LOW); // set the LED off
delay(rate);
}
5HFLSHSURYLGHVPRUHGHWDLOVRQXVLQJWKHmapIXQFWLRQWRVFDOHYDOXHV
,I\RXZDQWWRYLHZWKHYDOXHRIWKHUDWHYDULDEOHRQ\RXUFRPSXWHU\RXFDQSULQWWKLV WRWKH$UGXLQR6HULDO0RQLWRUDVVKRZQLQWKHUHYLVHGORRSFRGHWKDWIROORZV7KH VNHWFKZLOOGLVSOD\WKHEOLQNUDWHLQWKH6HULDO0RQLWRU<RXRSHQWKH6HULDO0RQLWRU ZLQGRZLQWKH$UGXLQR,'(VHH&KDSWHUIRUPRUHRQXVLQJWKH6HULDO0RQLWRU
const int ledPin = 13; // LED connected to digital pin 13 const int sensorPin = 0; // connect sensor to analog input 0 // the next two lines set the min and max delay between blinks const int minDuration = 100; // minimum wait between blinks const int maxDuration = 1000; // maximum wait between blinks
void setup() {
pinMode(ledPin, OUTPUT); // enable output on the led pin Serial.begin(9600); // initialize Serial
}
void loop() {
int rate = analogRead(sensorPin); // read the analog input // the next line scales the blink rate between the min and max values rate = map(rate, 200,800,minDuration, maxDuration); // convert to blink rate Serial.println(rate); // print rate to serial monitor
digitalWrite(ledPin, HIGH); // set the LED on
delay(rate); // wait duration dependent on light level digitalWrite(ledPin, LOW); // set the LED off
delay(rate);
}
<RXFDQXVHWKH/'5WRFRQWUROWKHSLWFKRIDVRXQGE\FRQQHFWLQJDVPDOOVSHDNHUWR WKHSLQDVVKRZQLQ)LJXUH
)LJXUH&RQQHFWLRQVIRUDVSHDNHUZLWKWKH/'5FLUFXLW
1.6 Using Arduino | 17
<RXZLOOQHHGWRLQFUHDVHWKHRQRIIUDWHRQWKHSLQWRDIUHTXHQF\LQWKHDXGLRVSHFWUXP 7KLVLVDFKLHYHGDVVKRZQLQWKHIROORZLQJFRGHE\GLYLGLQJWKHUDWHE\LQWKHOLQH DIWHUWKHmapIXQFWLRQ
const int ledPin = 13; // LED connected to digital pin 13 const int sensorPin = 0; // connect sensor to analog input 0 const int minDuration = 100; // minimum wait between blinks const int maxDuration = 1000; // maximum wait between blinks void setup()
{
pinMode(ledPin, OUTPUT); // enable output on the led pin }
void loop() {
int sensorReading = analogRead(sensorPin); // read the analog input int rate = map(sensorReading, 200,800,minDuration, maxDuration);
rate = rate / 100; // add this line for audio frequency digitalWrite(ledPin, HIGH); // set the LED on
delay(rate); // wait duration dependent on light level digitalWrite(ledPin, LOW); // set the LED off
delay(rate);
}
See Also
6HH&KDSWHUIRUPRUHRQFUHDWLQJVRXQGZLWK$UGXLQR
CHAPTER 2
Making the Sketch Do Your Bidding
2.0 Introduction
7KRXJKPXFKRIDQ$UGXLQRSURMHFWZLOOLQYROYHLQWHJUDWLQJWKH$UGXLQRERDUGZLWK VXSSRUWLQJKDUGZDUH\RXQHHGWREHDEOHWRWHOOWKHERDUGZKDWWRGRZLWKWKHUHVWRI
\RXUSURMHFW7KLVFKDSWHULQWURGXFHVFRUHHOHPHQWVRI$UGXLQRSURJUDPPLQJVKRZLQJ QRQSURJUDPPHUVKRZWRXVHFRPPRQODQJXDJHFRQVWUXFWVDQGSURYLGLQJDQRYHUYLHZ RIWKHODQJXDJHV\QWD[IRUUHDGHUVZKRDUHQRWIDPLOLDUZLWK&RU&WKHODQJXDJH EHLQJXVHG
6LQFHPDNLQJWKHH[DPSOHVLQWHUHVWLQJUHTXLUHVPDNLQJ$UGXLQRGRVRPHWKLQJWKH UHFLSHVXVHSK\VLFDOFDSDELOLWLHVRIWKHERDUGWKDWDUHH[SODLQHGLQGHWDLOLQODWHUFKDS WHUV,IDQ\RIWKHFRGHLQWKLVFKDSWHULVQRWFOHDUIHHOIUHHWRMXPSIRUZDUGSDUWLFXODUO\
WR&KDSWHUIRUPRUHRQVHULDORXWSXWDQG&KDSWHUIRUPRUHRQXVLQJGLJLWDODQG DQDORJSLQV<RXGRQ¦WQHHGWRXQGHUVWDQGDOOWKHFRGHLQWKHH[DPSOHVWKRXJKWRVHH KRZWRSHUIRUPWKHVSHFLILFFDSDELOLWLHVWKDWDUHWKHIRFXVRIWKHUHFLSHV+HUHDUHVRPH RIWKHPRUHFRPPRQIXQFWLRQVXVHGLQWKHH[DPSOHVWKDWDUHFRYHUHGLQWKHQH[WIHZ FKDSWHUV
Serial.println(value);
3ULQWVWKHYDOXHWRWKH6HULDO0RQLWRURQ\RXUFRPSXWHUVHH5HFLSH pinMode(pin, mode);
&RQILJXUHVDGLJLWDOSLQWRUHDGLQSXWRUZULWHRXWSXWDGLJLWDOYDOXHVHHWKH LQWURGXFWLRQWR&KDSWHU
digitalRead(pin);
5HDGVDGLJLWDOYDOXHHIGHRULOWRQDSLQVHWIRULQSXWVHH5HFLSH digitalWrite(pin, value);
:ULWHVWKHGLJLWDOYDOXHHIGHRULOWWRDSLQVHWIRURXWSXWVHH5HFLSH
19
Download from Wow! eBook <www.wowebook.com>
2.1 Structuring an Arduino Program
Problem
<RXDUHQHZWRSURJUDPPLQJDQGZDQWWRXQGHUVWDQGWKHEXLOGLQJEORFNVRIDQ$UGXLQR SURJUDP
Solution
3URJUDPVIRU$UGXLQRDUHXVXDOO\UHIHUUHGWRDVVNHWFKHVWRHPSKDVL]HWKHDJLOHQDWXUH RIGHYHORSPHQW7KHWHUPVVNHWFKDQGSURJUDPDUHLQWHUFKDQJHDEOH6NHWFKHVFRQWDLQ FRGH¢WKHLQVWUXFWLRQVWKHERDUGZLOOFDUU\RXW&RGHWKDWQHHGVWRUXQRQO\RQFHVXFK DVWRVHWXSWKHERDUGIRU\RXUDSSOLFDWLRQVKRXOGEHSODFHGLQWKHsetupIXQFWLRQ
&RGHWREHUXQFRQWLQXRXVO\DIWHUWKHLQLWLDOVHWXSKDVILQLVKHGJRHVLQWRWKHloopIXQF WLRQ+HUHLVDW\SLFDOVNHWFK
const int ledPin = 13; // LED connected to digital pin 13 // The setup() method runs once, when the sketch starts void setup()
{
pinMode(ledPin, OUTPUT); // initialize the digital pin as an output }
// the loop() method runs over and over again, void loop()
{
digitalWrite(ledPin, HIGH); // turn the LED on delay(1000); // wait a second digitalWrite(ledPin, LOW); // turn the LED off delay(1000); // wait a second }
:KHQWKHERDUGILQLVKHVXSORDGLQJWKHFRGHRULVWXUQHGRQRQFHLWFRQWDLQVWKLVFRGH LWVWDUWVDWWKHWRSRIWKHVNHWFKDQGFDUULHVRXWWKHLQVWUXFWLRQVVHTXHQWLDOO\,WUXQVWKH FRGHLQsetupRQFHDQGWKHQJRHVWKURXJKWKHFRGHLQloop:KHQLWJHWVWRWKHHQGRI loopPDUNHGE\WKHFORVLQJEUDFNHW}LWJRHVEDFNWRWKHEHJLQQLQJRIloop
Discussion
7KLVH[DPSOHFRQWLQXRXVO\IODVKHVDQ/('E\ZULWLQJHIGHDQGLOWRXWSXWVWRDSLQ 6HH&KDSWHUWROHDUQPRUHDERXWXVLQJ$UGXLQRSLQV:KHQWKHVNHWFKEHJLQVWKH FRGHLQsetupVHWVWKHSLQPRGHVRLW¦VFDSDEOHRIOLJKWLQJDQ/('$IWHUWKHFRGHLQ setupLVFRPSOHWHGWKHFRGHLQloopLVUHSHDWHGO\FDOOHGWRIODVKWKH/('IRUDVORQJ DVWKH$UGXLQRERDUGLVSRZHUHGRQ
<RXGRQ¦WQHHGWRNQRZWKLVWRZULWH$UGXLQRVNHWFKHVEXWH[SHULHQFHG&&SUR JUDPPHUVPD\ZRQGHUZKHUHWKHH[SHFWHGmain()HQWU\SRLQWIXQFWLRQKDVJRQH,W¦V WKHUHEXWLW¦VKLGGHQXQGHUWKHFRYHUVE\WKH$UGXLQREXLOGHQYLURQPHQW7KHEXLOG
SURFHVVFUHDWHVDQLQWHUPHGLDWHILOHWKDWLQFOXGHVWKHVNHWFKFRGHDQGWKHIROORZLQJ DGGLWLRQDOVWDWHPHQWV
int main(void) {
init();
setup();
for (;;) loop();
return 0;
}
7KHILUVWWKLQJWKDWKDSSHQVLVDFDOOWRDQinit()IXQFWLRQWKDWLQLWLDOL]HVWKH$UGXLQR KDUGZDUH1H[WWKHVNHWFK¦Vsetup()IXQFWLRQLVFDOOHG)LQDOO\WKHloop()IXQFWLRQLV FDOOHGRYHUDQGRYHU%HFDXVHWKHforORRSQHYHUWHUPLQDWHVWKHreturnVWDWHPHQWLV QHYHUH[HFXWHG
See Also
&KDSWHUDQGKWWSZZZDUGXLQRFFHQ+DFNLQJ%XLOG3URFHVVSURYLGHPRUHRQWKH EXLOGSURFHVV
2.2 Using Simple Primitive Types (Variables)
Problem
$UGXLQRKDVGLIIHUHQWW\SHVRIYDULDEOHVWRHIILFLHQWO\UHSUHVHQWYDOXHV<RXZDQWWR NQRZKRZWRVHOHFWDQGXVHWKHVH$UGXLQRGDWDW\SHV
Solution
$OWKRXJKWKHintVKRUWIRULQWHJHUDELWYDOXHLQ$UGXLQRGDWDW\SHLVWKHPRVW FRPPRQFKRLFHIRUWKHQXPHULFYDOXHVHQFRXQWHUHGLQ$UGXLQRDSSOLFDWLRQV\RXFDQ XVH7DEOHWRGHWHUPLQHWKHGDWDW\SHWKDWILWVWKHUDQJHRIYDOXHV\RXUDSSOLFDWLRQ H[SHFWV
7DEOH$UGXLQRGDWDW\SHV
Numeric types Bytes Range Use
int 2 -32768 to 32767 Represents positive and negative integer values.
unsigned int 2 0 to 65535 Represents only positive values; otherwise, similar to int.
long 4 -2147483648 to
2147483647 Represents a very large range of positive and negative values.
unsigned long
4 4294967295 Represents a very large range of positive values.
2.2 Using Simple Primitive Types (Variables) | 21
Numeric types Bytes Range Use
float 4 3.4028235E+38 to
-3.4028235E+38 Represents numbers with fractions; use to approximate real- world measurements.
double 4 Same as float In Arduino, double is just another name for float. boolean 1 false (0) or true (1) Represents true and false values.
char 1 -128 to 127 Represents a single character. Can also represent a signed value between -128 and 127.
byte 1 0 to 255 Similar to char, but for unsigned values.
Other types
string Represents arrays of chars (characters) typically used to contain text.
void Used only in function declarations where no value is returned.
Discussion
([FHSWLQVLWXDWLRQVZKHUHPD[LPXPSHUIRUPDQFHRUPHPRU\HIILFLHQF\LVUHTXLUHG YDULDEOHVGHFODUHGXVLQJintZLOOEHVXLWDEOHIRUQXPHULFYDOXHVLIWKHYDOXHVGRQRW H[FHHGWKHUDQJHVKRZQLQWKHILUVWURZLQ7DEOHDQGLI\RXGRQ¦WQHHGWRZRUN ZLWKIUDFWLRQDOYDOXHV0RVWRIWKHRIILFLDO$UGXLQRH[DPSOHFRGHGHFODUHVQXPHULF YDULDEOHVDVint%XWVRPHWLPHV\RXGRQHHGWRFKRRVHDW\SHWKDWVSHFLILFDOO\VXLWV\RXU DSSOLFDWLRQ
6RPHWLPHV\RXQHHGQHJDWLYHQXPEHUVDQGVRPHWLPHV\RXGRQ¦WVRQXPHULFW\SHV FRPHLQWZRYDULHWLHVsignedDQGunsignedunsignedYDOXHVDUHDOZD\VSRVLWLYH9DUL DEOHVZLWKRXWWKHNH\ZRUGunsignedLQIURQWDUHVLJQHGVRWKDWWKH\FDQUHSUHVHQWQHJ DWLYH DQG SRVLWLYH YDOXHV 2QH UHDVRQ WR XVHunsigned YDOXHV LV ZKHQ WKH UDQJH RI signedYDOXHVZLOOQRWILWWKHUDQJHRIWKHYDULDEOHDQXQVLJQHGYDULDEOHKDVWZLFHWKH FDSDFLW\RIDVLJQHGYDULDEOH$QRWKHUUHDVRQSURJUDPPHUVFKRRVHWRXVHunsigned W\SHVLVWRFOHDUO\LQGLFDWHWRSHRSOHUHDGLQJWKHFRGHWKDWWKHYDOXHH[SHFWHGZLOOQHYHU EHDQHJDWLYHQXPEHU
booleanW\SHVKDYHWZRSRVVLEOHYDOXHVtrueRUfalse7KH\DUHFRPPRQO\XVHGIRU WKLQJVOLNHFKHFNLQJWKHVWDWHRIDVZLWFKLILW¦VSUHVVHGRUQRW<RXFDQDOVRXVHHIGH DQGLOW DV HTXLYDOHQWV WRtrue DQGfalse ZKHUH WKLV PDNHV PRUH VHQVHdigital Write(pin, HIGH)LVDPRUHH[SUHVVLYHZD\WRWXUQRQDQ/('WKDQdigitalWrite(pin, true)RUdigitalWrite(pin,1)DOWKRXJKDOORIWKHVHDUHWUHDWHGLGHQWLFDOO\ZKHQWKH VNHWFKDFWXDOO\UXQVDQG\RXDUHOLNHO\WRFRPHDFURVVDOORIWKHVHIRUPVLQFRGHSRVWHG RQWKH:HE
See Also
7KH$UGXLQRUHIHUHQFHDWKWWSZZZDUGXLQRFFHQ5HIHUHQFH+RPH3DJHSURYLGHVGH WDLOVRQGDWDW\SHV
2.3 Using Floating-Point Numbers
Problem
)ORDWLQJSRLQWQXPEHUVDUHXVHGIRUYDOXHVH[SUHVVHGZLWKGHFLPDOSRLQWVWKLVLVWKH ZD\WRUHSUHVHQWIUDFWLRQDOYDOXHV<RXZDQWWRFDOFXODWHDQGFRPSDUHWKHVHYDOXHVLQ
\RXUVNHWFK
Solution
7KHIROORZLQJFRGHVKRZVKRZWRGHFODUHIORDWLQJSRLQWYDULDEOHVLOOXVWUDWHVSUREOHPV
\RXFDQHQFRXQWHUZKHQFRPSDULQJIORDWLQJSRLQWYDOXHVDQGGHPRQVWUDWHVKRZWR RYHUFRPHWKHP
/*
* Floating-point example
* This sketch initialized a float value to 1.1
* It repeatedly reduces the value by 0.1 until the value is 0 */
float value = 1.1;
void setup() {
Serial.begin(9600);
}
void loop() {
value = value - 0.1; // reduce value by 0.1 each time through the loop if( value == 0)
Serial.println("The value is exactly zero");
else if(fabs(value) < .0001) // function to take the absolute value of a float Serial.println("The value is close enough to zero");
else
Serial.println(value);
delay(100);
}
Discussion
)ORDWLQJSRLQWPDWKLVQRWH[DFWDQGYDOXHVUHWXUQHGFDQKDYHDVPDOODSSUR[LPDWLRQ HUURU7KHHUURURFFXUVEHFDXVHIORDWLQJSRLQWYDOXHVFRYHUDKXJHUDQJHVRWKHLQWHUQDO UHSUHVHQWDWLRQRIWKHYDOXHFDQRQO\KROGDQDSSUR[LPDWLRQ%HFDXVHRIWKLV\RXQHHG WRWHVWLIWKHYDOXHVDUHZLWKLQDUDQJHRIWROHUDQFHUDWKHUWKDQH[DFWO\HTXDO
7KHRXWSXWIURPWKLVVNHWFKLVDVIROORZV
1.00 0.90
2.3 Using Floating-Point Numbers | 23
0.80 0.70 0.60 0.50 0.40 0.30 0.20 0.10
The value is close enough to zero -0.10
-0.20
7KHRXWSXWFRQWLQXHVWRSURGXFHQHJDWLYHQXPEHUV
<RXPD\H[SHFWWKHORRSWRVWRSDIWHUvalueLV0.1DQGWKHQLVVXEWUDFWHGIURPWKLV
%XWvalueQHYHUHTXDOV]HURLWJHWVYHU\FORVHEXWWKDWLVQRWJRRGHQRXJKWRSDVVWKH WHVWif (value == 0)7KLVLVEHFDXVHWKHRQO\PHPRU\HIILFLHQWZD\WKDWIORDWLQJSRLQW QXPEHUVFDQFRQWDLQWKHKXJHUDQJHLQYDOXHVWKH\FDQUHSUHVHQWLVE\VWRULQJDQDS SUR[LPDWLRQRIWKHQXPEHU
7KHVROXWLRQWRWKLVLVWRFKHFNLIDYDULDEOHLVFORVHWRWKHGHVLUHGYDOXHDVVKRZQLQ WKHFRGHLQWKLVUHFLSH¦V6ROXWLRQ
else if(fabs(value) < .0001) // function to take absolute value of a float Serial.println("The value is close enough to zero");
7KLVWHVWVLIWKHYDULDEOHvalueLVZLWKLQRIWKHGHVLUHGWDUJHWDQGSULQWVDPHVVDJH LIVR7KHIXQFWLRQQDPHGfabsVKRUWIRUIORDWLQJSRLQWDEVROXWHYDOXHUHWXUQVWKHDE VROXWHYDOXHRIDIORDWLQJSRLQWYDULDEOH7KHIXQFWLRQUHWXUQVWKHPDJQLWXGHRIWKH YDOXHDQGLIWKLVLVZLWKLQRIWKHFRGHZLOOSULQWWKHPHVVDJHWKDWWKHYDOXHV DUHFORVHHQRXJK
)ORDWLQJSRLQWDSSUR[LPDWHVQXPEHUVEHFDXVHLWRQO\XVHVELWVWR KROGDOOYDOXHVZLWKLQDKXJHUDQJH(LJKWELWVDUHXVHGIRUWKHGHFLPDO PXOWLSOLHU WKH H[SRQHQW DQG WKDW OHDYHV ELWV IRU WKH VLJQ DQG YDOXH¢RQO\HQRXJKIRUVHYHQVLJQLILFDQWGHFLPDOGLJLWV
$OWKRXJKfloatDQGdoubleDUHH[DFWO\WKHVDPHRQ$UGXLQRdoubleVGR KDYHDKLJKHUSUHFLVLRQRQPDQ\RWKHUSODWIRUPV,I\RXDUHLPSRUWLQJ FRGHWKDWXVHVfloatDQGdoubleIURPDQRWKHUSODWIRUPFKHFNWKDWWKHUH LVVXIILFLHQWSUHFLVLRQIRU\RXUDSSOLFDWLRQ
See Also
7KH$UGXLQRUHIHUHQFHIRUfloatKWWSZZZDUGXLQRFFHQ5HIHUHQFH)ORDW