Arduino自發布以來,就已經不再只是一個開發平臺,而已經成為一種文化。這種文化圍繞開源和開放式硬件的理念,再造了計算機科學與教育。Arduino開放了硬件開發,使上手更加容易,但同時又保留了真實世界應用的復雜性。這使得Arduino為在校學生、經驗豐富的開發人員以及設計者提供了一個完美的環境。本書是一本詳細介紹Arduino的書籍,給出了開發人員在高級設置下才能運用的技能和概念。除了項目之外,這本書還提供了例子用以演示一些概念。這些概念能夠很容易地和許多其他項目集成,并為將來的項目提供靈感。本書旨在實現從中級到專業的過渡。
致謝將最深切的感謝致以泰瑞、克雷格、道格、謝恩以及其他支持和幫助這個項目的家人和朋友。感謝克里夫·謝里爾在計算機科學方面提供了良好的基礎。感謝米格爾、Ayars博士以及Adafruit、SparkFun和Arduino的每一個人,所做出的貢獻。感謝里克、米歇爾和Apress出版社的員工,給予我們實現這個項目的機會。
——丹·塞爾沃首先也是最重要的,將飽含愛的感謝獻給我的妻子克里斯汀·艾比。她讓寫作本書的過程成為我們生活的中心。其次,非常感謝合著者丹·塞爾沃。誠摯感謝所有為本書的完成提供幫助的人,尤其是瑞恩·奧斯特瑞格。我的朋友馬克·斯普勞爾、安賈妮特·楊、安東尼·廖伊,以及編輯米歇爾·洛曼、布里吉德·達菲、克莉絲汀·里基茨和勞拉·喬赫斯也給予我很多支持。謝謝羅格斯大學創造了這樣一個有利的環境。謝謝大衛·芬戈爾德和里奇·諾瓦克,還要感謝開源代碼和開放的硬件社區,沒有Arduino,我的所有項目也將不復存在。最后,感謝chipKIT團隊一直有求必應,并真誠地努力工作,去獲得最好的開源代碼支持和多平臺Arduino圖像。
——里克·安德森
機工授權書
前言
第1章 Arduino1.0.4的內核變化 1
1.1 Arduino IDE的變化 1
1.2 程序的變化 2
1.3 API的升級 3
1.3.1 pinMode 3
1.3.2 返回類型 4
1.3.3 uint_8 4
1.4 Arduino API Core 1.0.4 4
1.4.1 Arduino.h 4
1.4.2 串行對象的升級 5
1.4.3 升級后的Stream類 5
1.4.4 Print類 6
1.4.5 新型的可打印類 7
1.4.6 字符串庫的升級 7
1.4.7 有線庫的升級 8
1.4.8 硬件串口的升級 8
1.5 物理電路板的升級和USB的兼容性 8
1.5.1 Avrdude的升級 8
1.5.2 新的Arduino Leonardo電路板 8
1.5.3 電路板變量 10
1.6 上傳器選項重命名為編程器 12
1.7 新的引導加載程序 12
1.8 USB固件程序 13
1.9 總結 13
第2章 Arduino的發展及社交編程 14
2.1 社交編程和項目管理組件 14
2.1.1 項目是什么,它又是如何組織的 15
2.1.2 版本控制簡述 16
2.1.3 問題追蹤簡述 16
2.1.4 文檔 17
2.2 社交編程中的項目管理 17
2.2.1 使用Git完成版本控制 18
2.2.2 什么是Git 18
2.2.3 Git安裝 18
2.2.4 GitHub工具 19
2.3 版本控制、基本工作流程 20
2.3.1 項目創建 20
2.3.2 代碼的修訂和檢查 21
2.3.3 工作流程 21
2.3.4 工作流程總結:創建項目 23
2.3.5 工作流程總結:項目復刻 24
2.3.6 創建一個“拉拽”請求 26
2.3.7 如何融合拉拽請求 29
2.3.8 什么是議題管理 32
2.3.9 GitHub上的議題管理 33
2.3.10 使用議題管理鏈接版本控制 33
2.4 歸檔 34
2.4.1 GitHub wiki 34
2.4.2 創建頁面 34
2.4.3 使用Markdown 35
2.5 為Arduino開發做出貢獻 38
2.6 如何從源代碼構建Arduino IDE 39
2.7 社區資源 40
2.8 總結 41
第3章 openFrameworks
和Arduino 42
3.1 準備開始 43
3.2 Arduino代碼 43
3.2.1 驗證代碼 44
3.2.2 Arduino串口函數 44
3.3 openFrameworks設置 45
3.3.1 將openFrameworks連接到Arduino 46
3.3.2 驗證代碼 47
3.3.3 openFrameworks串口函數 48
3.4 使用Firmata和ofArduino時的編碼 49
3.4.1 設置Firmata 49
3.4.2 用openFrameworks控制Arduino 50
3.4.3 驗證代碼 52
3.4.4 ofArduino用到的關鍵常量 52
3.4.5 ofArduino類函數的參考 53
3.5 拓展思路 54
3.5.1 改變代碼 55
3.5.2 驗證代碼 56
3.6 更多的工作思路 56
3.7 總結 57
第4章 Android ADK 58
4.1 Android設備 59
4.2 如何檢查 59
4.3 連接工作設備 59
4.4 改裝 60
4.5 安裝Arduino IDE 61
4.5.1 創建Android應用程序 62
4.5.2 Arduino程序 64
4.5.3 Android ADK應用 66
4.6 完成框架 76
4.6.1 完成應用程序 78
4.6.2 Arduino 82
4.6.3 驗證代碼 83
4.7 SPI和ADK 83
4.8 總結 85
第5章 XBee 87
5.1 購買XBee 87
5.2 簡單設置 89
5.3 透明模式 90
5.3.1 模塊配置 90
5.3.2 Arduino設置 91
5.3.3 驗證代碼 91
5.4 API模式 91
5.4.1 模塊配置 92
5.4.2 API包結構 93
5.4.3 發送命令 94
5.4.4 數據發送 94
5.5 請求包 95
5.6 應答包 96
5.7 Arduino數據呼應 98
5.8 端點固件 102
5.9 總結 104
第6章 傳感器的模擬 105
6.1 模擬量傳感器 105
6.1.1 模擬傳感器讀寫器 106
6.1.2 RC低通濾波器 106
6.1.3 驗證代碼 107
6.1.4 電阻梯 108
6.1.5 驗證代碼 110
6.2 數字傳感器 110
6.2.1 PWM 111
6.2.2 格雷碼 111
6.3 串行傳感器 114
6.3.1 輸出串行數據 115
6.3.2 驗證代碼 116
6.4 I2C 117
6.4.1 TWCR寄存器 117
6.4.2 TWAR寄存器 118
6.4.3 TWDR寄存器 118
6.4.4 TWSR寄存器 118
6.4.5 I2C數據輸出 119
6.4.6 驗證代碼 120
6.5 總結 120
第7章 PID控制器 121
7.1 數學部分 121
7.1.1 比例語句 121
7.1.2 積分語句 122
7.1.3 微分語句 122
7.1.4 小結 123
7.1.5 時間 123
7.2 PID控制器設置 124
7.2.1 硬件布線 124
7.2.2 驗證代碼 125
7.3 PID調諧器 126
7.4 對比PID、死區和ON/OFF
控制器 127
7.5 PID的控制功能 128
7.5.1 調諧 129
7.5.2 PID庫 130
7.5.3 PID庫函數 130
7.6 其他資源 132
7.7 總結 132
第8章 Android傳感器網絡 133
8.1 設置傳感器網絡 134
8.2 openFrameworks 136
8.3 Arduino 142
8.4 Android應用程序 150
8.5 總結 158
第9章 PIC32和Atmel ATtiny芯片與Arduino聯合使用 159
9.1 Arduino和非標準環境 159
9.2 MPI DE和chipKIT PIC32 160
9.3 Arduino對ATtiny家族的支持 167
9.3.1 ATtiny 85/45/25 169
9.3.2 ATtiny 84/44/24 169
9.3.3 ATtiny 4313和2313 169
9.4 將Arduino作為一個ISP編程器使用 170
9.5 工程:用敲擊密碼打開盒子 171
9.5.1 設備在做什么 171
9.5.2 材料清單 172
9.6 總結 175
第10章 多道處理:使Arduino更強大 176
10.1 I2C總線 177
10.2 串行外圍接口 178
10.3 連接兩個設備 179
10.3.1 安裝一個主SPI設備 180
10.3.2 驗證代碼 181
10.3.3 中斷向量 182
10.3.4 SPI寄存器 182
10.3.5 確認代碼 185
10.3.6 多從機 186
10.3.7 主機寄存器 186
10.3.8 再次驗證代碼 187
10.4 對稱型架構雙極性總線 187
10.4.1 通過代碼實現SABB 189
10.4.2 驗證代碼 191
10.4.3 連接SABB到SPI 191
10.5 轉換為Mega 192
10.6 物理上的最佳實踐 193
10.7 總結 193
第11章 Arduino下的游戲開發 194
11.1 適合Arduino的游戲 194
11.2 一個簡單的游戲 196
11.2.1 概念驗證 196
11.2.2 游戲Stop It的代碼 197
11.2.3 驗證游戲代碼 202
11.2.4 小花招 203
11.3 增添一些更好的顯示和圖像 203
11.3.1 Gameduino庫 204
11.3.2 一個Stack It游戲 206
11.3.3 游戲的美術設計 207
11.3.4 游戲Stack It的代碼 208
11.3.5 驗證游戲代碼 214
11.3.6 發出聲音 214
11.3.7 增加一些啟動換面 216
11.3.8 游戲自動運行的編程 217
11.3.9 最后的修飾 219
11.3.10 游樂場和游戲資源 220
11.4 總結 221
第12章 自定義Arduino庫 222
12.1 創建自定義庫需要了解的東西 222
12.2 創建電動機庫 228
12.3 Arduino庫文件夾的分析 233
12.3.1 示例文件夾 234
12.3.2 許可證 234
12.3.3 keywords.txt 234
12.3.4 安裝Arduino庫 235
12.3.5 使用Arduino庫 235
12.4 Arduino對象和庫條例 235
12.5 總結 242
第13章 Arduino測試套件 243
13.1 安裝Arduino測試套件 243
13.2 開始測試 246
13.3 Arduino測試結果的格式 247
13.4 Arduino測試套件基本的函數 249
13.4.1 ATS_begin 249
13.4.2 ATS_PrintTestStatus 249
13.4.3 ATS_end 250
13.4.4 使用基本的函數 250
13.5 Arduino測試套件內置測試 251
13.6 測試自己的Arduino派生板的策略 252
13.7 內存測試 252
13.8 測試庫 256
13.8.1 SPI.transfer()測試 262
13.8.2 setBitOrder()測試 263
13.8.3 setClockDivider()測試 263
13.8.4 setDataMode()測試 264
13.8.5 SPI測試結果 264
13.9 總結 265