文章目錄
歡迎來到Arduino的世界,本文主要介紹Arduino是什麽(me) ,為(wei) 什麽(me) Arduino廣受歡迎,如何選擇一款適合自己的Arduino控製器、Arduino開發工具、Arduino的數據類型、變量和常量,結合Arduino常用的,就可以製作各種小作品。想要了解更多信息,請進入。
1 什麽是Arduino
是一個(ge) 能夠用來感應和控製現實物理世界的一套工具。它由一個(ge) 基於(yu) 單片機並且開放源碼的硬件平台,和一套為(wei) Arduino板編寫(xie) 程序的開發軟件組成。它的硬件包含一個(ge) 以 Atmel AVR 單片機為(wei) 核心的開發板和其他各種 I/O 板;軟件包括一個(ge) 標準編程語言開發環境和在開發板上運行的燒錄程序。Arduino 主要是為(wei) 業(ye) 餘(yu) 愛好者的使用而設計的,被設計成一個(ge) 小型計算機的形式,可以作為(wei) 嵌入式計算機平台,所以說它是一個(ge) 交互係統,可以通過硬件和軟件與(yu) 它的環境進行互動。例如,它可以讀取大量的開關(guan) 和傳(chuan) 感器信號,可以檢測到光線的有無和強弱、可以檢測到手指按下按鍵、甚至可以檢測到微信上的新消息;並將這些感受到的“信號”轉換為(wei) 動作 比如電機動一下、LED 燈的打開或關(guan) 閉、在互聯網上發布一條信息等;Arduino也可以開發出與(yu) PC 相連的周邊裝置,能在運行時與(yu) PC 上的軟件進行通信。
Arduino 本質上就是一塊單片機,但它拋開了傳(chuan) 統硬件開發的複雜操作,不需要了解硬件的內(nei) 部結構和寄存器設置(如果是單片機開發,是需要了解寄存器並且設置各個(ge) 寄存器),也不需要過多的電子知識和編程知識,開發者隻需要通過簡單學習(xi) ,了解各個(ge) 引腳和函數的作用,便可利用它開發出各種出色的項目。
2 為什麽選擇Arduino作為開發平台
目前市場上還有許多其他的單片機和單片機平台,例如51單片機、STM32單片機等。但他們(men) 對於(yu) 普通開發者來說門檻相對較高,需要有一定編程和硬件相關(guan) 基礎,內(nei) 部寄存器較為(wei) 繁雜,主流開發環境Keil配置相對麻煩,特別是對於(yu) STM32的開發,即使使用官方庫也少不了環境配置,還有就是開發環境是收費的。
Arduino 不但簡化了使用單片機工作的流程,同時還為(wei) 教師、學生以及興(xing) 趣愛好者提供了一些其他係統不具備的優(you) 勢:
1、性價(jia) 比高
相比於(yu) 其他單片機平台而言,Arduino生態的各種開發板性價(jia) 比相對較高,也可以自己動手製作開發板。
2、跨平台
Arduino IDE可以在 Windows、Mac OS X和 Linux 三大主流操作係統上運行,而其他的大多數控製器隻能在 Windows 上開發。
3.簡單清晰的開發
Arduino IDE基於(yu) Processing IDE開發,這對於(yu) 初學者來說極易掌握,同時對於(yu) 高級用戶來說又有著足夠的靈活性。Arduino語言是基於(yu) Wiring 語言開發的,是對AVR-GCC庫的二次封裝,並不需要太多的單片機基礎和編程基礎,隻要簡單地學習(xi) 後就可以快速地進行開發。
4.開放性
Arduino的硬件原理圖、電路圖、IDE軟件及核心庫文件都是開源的,在開源協議範圍內(nei) 可以任意修改原始設計及相應代碼。
5.社區與(yu) 第三方支持
Arduino有著眾(zhong) 多的開發者和用戶,因此可以找到他們(men) 提供的眾(zhong) 多開源的示例代碼和硬件設計。例如,可以在、、 、等網站上找到 Arduino 的第三方硬件、外設和類庫等支持,以便更快、更簡單地擴展自己的Arduino項目。
6.硬件開發趨勢
Arduino 不僅(jin) 僅(jin) 是全球最流行的開源硬件,也是一個(ge) 優(you) 秀的硬件開發平台,更是硬件開發的趨勢。Arduino簡單的開發方式使得開發者更關(guan) 注於(yu) 創意與(yu) 實現,可以更快地完成自己的項目開發,大大節約學習(xi) 的成本,縮短開發的周期。
鑒於(yu) Arduino 的種種優(you) 勢,越來越多的專(zhuan) 業(ye) 硬件開發者已經或開始使用 Arduino 來開發項目和產(chan) 品;越來越多的軟件開發者使用 Arduino 進入硬件、物聯網等開發領域。
3 Arduino硬件
3.1 Arduino開發板的類型
根據使用的不同微控製器,可提供各種 Arduino 板。然而,所有 Arduino 板都有一個(ge) 共同點:它們(men) 通過 Arduino lDE 編程。
差異基於(yu) 輸入和輸出的數量(可以在單個(ge) 板上使用的傳(chuan) 感器,LED和按鈕的數量),速度,工作電壓,外形尺寸等。一些板被設計為(wei) 嵌入式,並且沒有編程接口(硬件),因此你需要單獨購買(mai) 。有些可以直接從(cong) 3.7V電池運行,其他至少需要5V。
以下是可用的不同Arduino板的列表。
板名稱 | 工作電壓 | 時鍾速度 | 數字i/o | 模擬輸入 | PWM | UART | 編程接口 |
---|---|---|---|---|---|---|---|
Arduino Uno R3 | 5V | 16MHz | 14 | 6 | 6 | 1 | USB通過ATMega16U2 |
Arduino Uno R3 SMD | 5V | 16MHz | 14 | 6 | 6 | 1 | USB通過ATMega16U2 |
Red Board | 5V | 16MHz | 14 | 6 | 6 | 1 | USB通過FTDI |
Arduino Pro 3.3v/8 MHz | 3.3V | 8MHz | 14 | 6 | 6 | 1 | FTDI兼容頭 |
Arduino Pro 5V/16MHz | 5V | 16MHz | 14 | 6 | 6 | 1 | FTDI兼容頭 |
Arduino mini 05 | 5V | 16MHz | 14 | 8 | 6 | 1 | FTDI兼容頭 |
Arduino Pro mini 3.3v/8mhz | 3.3V | 8MHz | 14 | 8 | 6 | 1 | FTDI兼容頭 |
Arduino Pro mini 5v/16mhz | 5V | 16MHz | 14 | 8 | 6 | 1 | FTDI兼容頭 |
Arduino Ethernet |
5V | 16MHz | 14 | 6 | 6 | 1 | FTDI兼容頭 |
Arduino Fio | 3.3V | 8MHz | 14 | 8 | 6 | 1 | FTDI兼容頭 |
LilyPad Arduino 328 main board | 3.3V | 8MHz | 14 | 6 | 6 | 1 | FTDI兼容頭 |
LilyPad Arduino simply board | 3.3V | 8MHz | 9 | 4 | 5 | 0 | FTDI兼容頭 |
板名稱 | 工作電壓 | 時鍾速度 | 數字i/o | 模擬輸入 | PWM | UART | 編程接口 |
---|---|---|---|---|---|---|---|
Arduino Leonardo | 5V | 16MHz | 20 | 12 | 7 | 1 | 本機USB |
Pro micro 5V/16MHz | 5V | 16MHz | 14 | 6 | 6 | 1 | 本機USB |
Pro micro 3.3V/8MHz | 5V | 16MHz | 14 | 6 | 6 | 1 | 本機USB |
LilyPad Arduino USB | 3.3V | 8MHz | 14 | 6 | 6 | 1 | 本機USB |
板名稱 | 工作電壓 | 時鍾速度 | 數字i/o | 模擬輸入 | PWM | UART | 編程接口 |
---|---|---|---|---|---|---|---|
Arduino Mega 2560 R3 | 5V | 16MHz | 54 | 16 | 14 | 4 | USB通過ATMega16U2B |
Mega Pro 3.3V | 3.3V | 8MHz | 54 | 16 | 14 | 4 | FTDI兼容頭 |
Mega Pro 5V | 5V | 16MHz | 54 | 16 | 14 | 4 | FTDI兼容頭 |
Mega Pro Mini 3.3V | 3.3V | 8MHz | 54 | 16 | 14 | 4 | FTDI兼容頭 |
板名稱 | 工作電壓 | 時鍾速度 | 數字i/o | 模擬輸入 | PWM | UART | 編程接口 |
---|---|---|---|---|---|---|---|
Arduino Mega 2560 R3 | 3.3V | 84MHz | 54 | 12 | 12 | 4 | 本機USB |
注:引用自。
3.2 不同開發板的對比
在使用 Arduino 控製器完成項目製作之前,應該對各個(ge) 型號有一定的了解,以便選擇適合自己項目的控製器。
1、Arduino UNO
Arduino UNO 是目前使用最廣泛的 Arduino 控製器,具有 Arduino 的所有功能,是初學者的最佳選擇。在大部分參考書(shu) 或者開源代碼,都以 UNO 為(wei) 例子。當然,掌握UNO開發技巧,其他型號控製器也是類似的,可以很輕鬆地移植代碼。
2、Arduino MEGA
Arduino Mega 是一個(ge) 增強型的Arduino 控製器,相對於(yu) UNO,它提供了更大的存儲(chu) 空間和更多的輸入/輸出接口,可以控製更多的設備,是完成較大型項目的較好選擇。
3、Arduino Leonardo
Arduino Leonardo 使用集成了 USB 功能的 AVR 單片機作為(wei) 主控芯片,具備其他型號 Arduino 控製器的所有功能之外還可以輕鬆模擬USB鍵盤/鼠標等USB設備。
4、Arduino Due
Arduino Due 突破性使用了32位的 ARM Cortex-M3 作為(wei) 主控芯片。它集成了多種外設,有著其他Arduino板無法比擬的性能,是目前最為(wei) 強大的 Arduino 控製器。
5、小型化的Arduino
常見小型 Arduino 控製器有 Arduino Nano,Arduino Mini,Arduino Micro,Arduino LilyPad 等。這些小型控製器雖然在設計上精簡了許多地方,但使用起來一樣方便。其中 Arduino Mini 和 Arduino Lilypad 需要外部模塊配合來完成程序下載功能。
4 Arduino軟件
4.1 IDE
Arduino提供了Arduino Software IDE,一套以 Java 編寫(xie) 的跨平台應用軟件。Arduino Software IDE 源自於(yu) Processing 編程語言以及 Wiring 計劃的集成開發環境。它是被設計於(yu) 介紹程序編寫(xie) 給藝術家和不熟悉程序設計的人們(men) ,且包含了一個(ge) 擁有語法高亮、括號匹配、自動縮進和一鍵編譯並將可執行文件燒寫(xie) 入Arduino 硬件中的編輯器。
Arduino Software IDE 使用與(yu) C語言和C++相仿的編程語言,並且提供了包含常見的輸入/輸出函數的Wiring 軟件庫。在使用 GNU toolchain 編譯和鏈接後,Arduino Software IDE 提供了一個(ge) 程序“avrdude”用來轉換可執行檔成為(wei) 能夠燒寫(xie) 入Arduino硬件的固件。
4.2 Sketch
使用 Arduino Software IDE 編寫(xie) 的程序被稱為(wei) “sketch”(草圖)。一個(ge) 典型的 Arduino C/C++ sketch 程序會(hui) 包含兩(liang) 個(ge) 函數,它們(men) 會(hui) 在編譯後合成為(wei) main() 函數:
- setup():在程序運行開始時會運行一次,用於初始化設置。
- loop():直到Arduino硬件關閉前會重複運行函數放的代碼。
// 打開IDE會(hui) 自動創建一個(ge) sketch模板,如下: void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: }
4.3 編程語言
#define led 2 //定義(yi) 數字IO 2的名字為(wei) led void setup() //初始化部分 { pinMode(led,OUTPUT); //定義(yi) led引腳為(wei) 輸出模式 } void loop() //主循環 { digitalWrite(led,LOW); //led引腳輸出低電平,點亮led delay(1000); //延時1000ms digitalWrite(led,HIGH); //led引腳輸出高電平,熄滅led delay(1000); //延時1s }
Arduino 程序可由五個(ge) 部分組成 :
(1) 導入庫與(yu) 定義(yi) (可有可無)
#include <stdint.h> #define LED 2
(2)聲明常量與(yu) 全域變量 (可有可無)
const float PI = 3.14159; int r = 0 ;
(3)初始化函數setup() (必要)
void setup() { }
(4)循環函數loop() (必要)
void loop() { }
(5)自定義(yi) 函數 (可有可無)
float area(float r) { float a = PI*r*r; return a; }
其中 setup() 與(yu) loop() 是一定要有的函數 (均無參數無傳(chuan) 回值),其他則視需要而定。Arduino 語言采用 C/C++ 語法,加上以 Wiring 為(wei) 基礎的電子設計核心庫組合而成,包括 Digital I/O,Analog I/O 等庫.。內(nei) 置的庫可直接調用,但若有使用第三方庫(例如驅動感測器模塊所需的庫),則必須使用 include 前置指令引入。此外,也可以用前置指令 define 定義(yi) 一個(ge) 常量或宏 (表達式)。
前置指令乃 C 編譯器指令, 不屬於(yu) C 語言本身, 其用途有三 :
- 引入頭文件:例如 #include <myLibrary.h> 或 “myLibrary.h”
- 定義常量:例如 #define PI 3.14159
- 定義宏:例如 #define AREA PIrr
所以前置指令的功能之一就是替換,include 就是在標頭處以指定之文件內(nei) 容替換;而 #define 就是在程序中用到所定義(yi) 之常量與(yu) 宏名稱時,以其內(nei) 容替換。
宏的功能事實上與(yu) 函數類似,不同之處是函數調用使用堆棧,而宏則是直接放在源代碼中,由編譯器自動進行替換,運行效率較快 (但若很多地方都要用到時, 編譯後就會(hui) 比較大)。
注意:
頭文件可用角括號 < > 或雙引號 " ", 差別是:
- 用雙引號時, 前置處理器會先從源文件所在位置開始去搜索頭文件;
- 而用角括號則會先從 libraries 目錄開始找.
5 C/C++語言基礎
5.1 數據類型
Arduino 家族中的8位開發板和32位開發板的基本數據類型是有差別。對於(yu) 8位開發板來說,int 占2字節,double 和 float 占4字節。而對於(yu) 32位開發板,int 占用4字節,double 占用8字節。下表提供了你將在Arduino編程期間使用的所有數據類型。
數據類型 | 占用字節 | 數值範圍 | 說明 |
---|---|---|---|
void | 僅用於函數聲明,表示沒有返回值 | ||
boolean/bool | 1 | true/false | 每個布爾變量占一個字節的內存 |
char | 1 | -128~127 | Arduino中的char是有符號的,等價於signed char;char常被是用於儲存ASCII字符;如果想存儲數據,建議使用byte類型 |
unsigned char | 1 | 0~255 | 等同於byte和uint8_t類型 |
byte | 1 | 0~255 | byte類型不是C/C++標準類型,他是Arduino平台下特有的,它實際就是無符號8位整型數據 |
int | 2 | -32768~32767 | 在基於 ATMega 的8位微控製器的Arduino開發板如Arduino UNO、Ardunio Mega2560,int占用2字節內存;而對於32位Arduino開發板(如Arduino Due,SAMD)int占4字節 |
unsigned int | 2 | 0~65536 | 等同於word和uint16_t類型;Due存儲4字節值 |
word | 2 | 0~65536 | 在Uno和其他基於ATMEGA的板上,一個word存儲一個16位無符號數;在Due和Zero上,它存儲一個32位無符號數 |
long | 4 | -2147483648~2147483647 | 用於數字存儲的擴展大小變量 |
unsigned long | 4 | 0~2^32-1 | 等同於uint32_t類型 |
short | 2 | -32768~32767 | 短整型 |
float | 4 | -3.4028235E+38~3.4028235E+38 | 隻有6~7位小數精度 |
double | 4 | -3.4028235E+38~3.4028235E+38 | 在Arduino Due上有8個字節,其餘的跟float一樣 |
string | 相當於char類型的數組 | ||
array | 數組 |
5.2 變量與常量
1、變量範圍
Arduino 使用的C語言中的變量具有名為(wei) scope(範圍)的屬性。scope是程序的一個(ge) 區域,有三個(ge) 地方可以聲明變量。它們(men) 是:
- 在函數或代碼塊內部,稱為局部變量。
- 在函數參數的定義中,稱為形式參數。
- 在所有函數之外,稱為全局變量。
(1)局部變量
在函數或代碼塊中聲明的變量是局部變量。它們(men) 隻能由該函數或代碼塊中的語句使用。局部變量不能在它們(men) 自己之外運行。以下是使用局部變量的示例:
void setup() { } void loop() { int i = 0; }
(2)全局變量
全局變量在所有函數之外定義(yi) ,通常位於(yu) 程序的頂部。全局變量將在程序的整個(ge) 生命周期中保持其真值。全局變量可以被任何函數訪問。也就是說,一個(ge) 全局變量可以在整個(ge) 程序中聲明後使用。
以下示例使用全局變量和局部變量:
注意:全局變量、靜態變量、常量應使用大寫(xie) 字母來命名name,防止混淆且有警示作用。
uint16_t NUMBER = 0; void setup() { } void loop() { int i = 0; }
5.3 運算符
運算符是一個(ge) 符號,它告訴編譯器執行特定的數學或邏輯函數。C語言具有豐(feng) 富的內(nei) 置運算符,並提供以下類型的:
- Arithmetic Operators 算術運算符
- Comparison Operators 比較運算符
- Boolean Operators 布爾運算符
- Bitwise Operators 位運算符
- Compound Operators 複合運算符
5.4 選擇結構與循環結構
(1)選擇結構又稱選取結構或分支結構。在編程中,經常需要根據當前數據做出判斷,以決(jue) 定下一步的操作。
序號 | 控製語句和描述 |
---|---|
1 |
它采用括號中的表達式,後麵跟隨語句或語句塊。如果表達式為(wei) 真,則執行語句或語句塊,否則跳過這些語句。 |
2 |
一個(ge) if 語句後麵可以跟隨一個(ge) 可選的else語句,當表達式為(wei) false時執行。 |
3 |
if 語句後麵可以跟隨一個(ge) 可選的 else if ... else 語句,其對於(yu) 測試各種條件非常有用。 |
4 |
類似於(yu) if語句, switch ... case 通過允許程序員指定應在各種條件下執行的不同代碼來控製程序的流程。 |
5 |
條件運算符? :是C語言中唯一的三元運算符。 |
(2)循環結構又稱重複結構,即反複執行某一部分的操作。有兩(liang) 類循環結構:“當”( while)循環和“直到”(until)循環。
序號 | 循環及描述 |
---|---|
1 |
while循環將會(hui) 連續、無限循環,直到括號()內(nei) 的表達式變為(wei) false。必須用一些東(dong) 西改變被測試的變量,否則while循環永遠不會(hui) 退出。 |
2 |
do ... while循環類似於(yu) while循環。在while循環中,循環連續條件在循環開始時測試,然後再執行循環體(ti) 。 |
3 |
for循環執行語句預定的次數。循環的控製表達式在for循環括號內(nei) 完全的初始化,測試和操作。 |
4 |
C語言允許你在另一個(ge) 循環內(nei) 使用一個(ge) 循環。下麵的例子說明了這個(ge) 概念。 |
5 |
它是沒有終止條件的循環,因此循環變為(wei) 無限。 |
[Why]
1、什麽(me) 是單片機?它與(yu) 個(ge) 人計算機有什麽(me) 不同?
Ans:一台能夠工作的計算機要有這樣幾個(ge) 部份構成:中央處理單元CPU(進行運算、控製)、隨機存儲(chu) 器RAM(數據存儲(chu) )、存儲(chu) 器ROM(程序存儲(chu) )、輸入/輸出設備I/O(串行口、並行輸出口等)。在個(ge) 人計算機(PC)上這些部份被分成若幹塊芯片,安裝在一個(ge) 被稱之為(wei) 主板的印刷線路板上。而在單片機中,這些部份全部被做到一塊集成電路芯片中了,所以就稱為(wei) 單片(單芯片)機,而且有一些單片機中除了上述部份外,還集成了其它外設電路如==模擬量/數字量轉換(A/D)和數字量/模擬量轉換(D/A)==等。
2、 為(wei) 什麽(me) 用單片機,如Arduino、STm32,MCS-51等.
Ans:實際工作中並不是任何涉及計算和控製的場合都要求處理器或計算機有很高的性能,其應用的關(guan) 鍵在於(yu) 使用性能(是否夠用)和經濟性(是否有很好的性能價(jia) 格比)。
參考
- 初試Arduino:www.fpxing.com/jichu/Arduino/10320.html
- Arduino概述: