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