1、IDE的安裝和基本使用
1.1 安裝
Arduino使用Arduino IDE進行開發,IDE的安裝很簡單,下載頁面 在官方網站下載后自行安裝即可
1.2 項目示例
要打開現有項目示例,請選擇File→Example→Basics→Blink。
1.3 選擇Arduino主板。
轉到Tools→Board,然后選擇你的板。
1.4 選擇串行端口
1.5 燒錄程序
A - 用於檢查是否存在任何編譯錯誤。
B - 用於將程序上傳到Arduino板。
C - 用於創建新草圖的快捷方式。
D - 用於直接打開示例草圖之一。
E - 用於保存草圖。
F - 用於從板接收串行數據並將串行數據發送到板的串行監視器。
現在,只需點擊環境中的“Upload”按鈕。等待幾秒鍾,你將看到板上的RX和TX LED燈閃爍。如果上傳成功,則狀態欄中將顯示“Done uploading”消息。
2、Arduino程序結構
2.1 結構
軟件結構包括兩個主要函數:
Setup()函數
Loop()函數
Void setup ( ) {
}
-
PURPOSE- 草圖啟動時會調用 setup()函數。使用它來初始化變量,引腳模式,啟用庫等。setup函數只能在Arduino板的每次上電或復位后運行一次。
-
INPUT - -
-
OUTPUT - -
-
RETURN- -
Void Loop ( ) {
}
-
PURPOSE- 在創建了用於初始化並設置初始值的setup()函數后,loop() 函數,正如它的名稱所指,允許你的程序連續循環的更改和響應。可以使用它來主動控制Arduino板。
-
INPUT - -
-
OUTPUT - -
-
RETURN- -
3、Arduino數據類型
3.1 所有數據類型
void | Boolean | char | Unsigned char | byte | int | Unsigned int | word |
long | Unsigned long | short | float | double | array | String-char array | String-object |
void
void關鍵字僅用於函數聲明。它表示該函數預計不會向調用它的函數返回任何信息。
Boolean
布爾值保存兩個值之一,true或false。每個布爾變量占用一個字節的內存。
Char
一種數據類型,占用一個字節的內存,存儲一個字符值。字符文字用單引號寫成:'A',對於多個字符,字符串使用雙引號:"ABC"。
但是,字符是存儲為數字。你可以在ASCII圖表中查看特定編碼。這意味着可以對使用ASCII值的字符進行算術運算。例如,'A'+1的值為66,因為大寫字母A的ASCII值為65。
unsigned char
unsigned char是一種無符號數據類型,占用一個字節的內存。unsigned char數據類型編碼數字為0到255。
byte
一個字節存儲一個8位無符號數,從0到255。
int
整數(int)是數字存儲的主要數據類型。int存儲16位(2字節)值。這產生-32768至32767的范圍(最小值為-2^15,最大值為(2^15)-1)。
int的大小因板而異。例如,在Arduino Due中,int存儲32位(4字節)值。這產生-2147483648至2147483647的范圍(最小值-2^31和最大值(2^31)-1)。
Unsigned int
unsigned int(無符號整數)與int相同,存儲2字節。然而,它們只存儲正值,產生0到65535(2^16)-1的有效范圍。Due存儲4字節(32位)值,范圍從0到4294967295(2^32-1)。
Word
在Uno和其他基於ATMEGA的板上,一個word存儲一個16位無符號數。在Due和Zero上,它存儲一個32位無符號數。
Long
Long變量是用於數字存儲的擴展大小變量,存儲32位(4字節),從-2147483648到2147483647。
unsigned long
unsigned long變量是用於數字存儲的擴展大小變量,並存儲32位(4字節)。與標准的long不同,unsigned long不會存儲負數,它們的范圍為0到4294967295(2^32-1)。
short
short是16位數據類型。在所有Arduinos(基於ATMega和ARM)上,一個short存儲一個16位(2字節)值。這產生-32768至32767的范圍(最小值為-2^15,最大值為(2^15)-1)。
float
浮點數的數據類型是具有小數點的數字。浮點數通常用於近似模擬值和連續值,因為它們的分辨率高於整數。
浮點數可以大到3.4028235E+38,也可以低到-3.4028235E+38。它們被存儲為32位(4字節)信息。
double
在Uno和其他基於ATMEGA的板上,雙精度浮點數占用四個字節。也就是說,double實現與float完全相同,精度沒有增益。在Arduino Due上,double具有8字節(64位)精度。
4、變量和常亮
與其他編程語言邏輯及風格基本相同
變量按作用范圍分為局部變量和全局變量,此處略去不講
5、運算符
運算符類型
- Arithmetic Operators 算術運算符
- Comparison Operators 比較運算符
- Boolean Operators 布爾運算符
- Bitwise Operators 位運算符
- Compound Operators 復合運算符
算術運算符
= 賦值
+ 相加
- 相減
* 相乘
/ 分母除以分子
% 取余數
比較運算符
== 比較值是否相等
!= 比較值是否不等
< 小於
> 大於
<= 小於等於
>= 大於等於
布爾運算
&& 邏輯與(and)
|| 邏輯或(or)
! 邏輯非(no)
位運算符
& and(與)
| or(或)
^ xor(異或)
~ not(非)
<< shift left(左移)
>> shift right(右移)
復合運算符
++ 自增
-- 自減
+= 復合加
-= 復合減
*= 復合乘
/= 復合除
%= 復合模(B %= A等效於B = B % A)
|= 復合按位或(A |= 2與A = A | 2相同)
&= 復合按位與(A &= 2與A = A & 2相同)
6、控制語句
它采用括號中的表達式,后面跟隨語句或語句塊。如果表達式為真,則執行語句或語句塊,否則跳過這些語句。
一個 if 語句后面可以跟隨一個可選的else語句,當表達式為false時執行。
if 語句后面可以跟隨一個可選的 else if ... else 語句,其對於測試各種條件非常有用。
類似於if語句, switch ... case 通過允許程序員指定應在各種條件下執行的不同代碼來控制程序的流程。
條件運算符? :是C語言中唯一的三元運算符。
7、循環
while循環將會連續、無限循環,直到括號()內的表達式變為false。必須用一些東西改變被測試的變量,否則while循環永遠不會退出。
do ... while循環類似於while循環。在while循環中,循環連續條件在循環開始時測試,然后再執行循環體。
for循環執行語句預定的次數。循環的控制表達式在for循環括號內完全的初始化,測試和操作。
C語言允許你在另一個循環內使用一個循環
它是沒有終止條件的循環,因此循環變為無限。
8、函數
函數聲明
函數在循環函數之上或之下的任何其他函數之外聲明。
我們可以用兩種不同的方式聲明函數:
第一種方法是在循環函數上面寫入被稱為函數原型的函數的一部分,它包括:
- 函數返回類型
- 函數名稱
- 函數參數類型,不需要寫參數名稱
函數原型后面必須加上分號(;)。
以下示例為使用第一種方法的函數聲明的示范。
例子
int sum_func (int x, int y) // function declaration { int z = 0; z = x+y ; return z; // return the value } void setup () { Statements // group of statements } Void loop () { int result = 0 ; result = Sum_func (5,6) ; // function call }
第二種方法,稱為函數定義或聲明,必須在循環函數的下面聲明,它包括:
- 函數返回類型
- 函數名稱
- 函數參數類型,這里必須添加參數名稱
- 函數體(調用函數時執行的函數內部的語句)
以下示例演示了使用第二種方法的函數聲明。
例子
int sum_func (int , int ) ; // function prototype void setup () { Statements // group of statements } Void loop () { int result = 0 ; result = Sum_func (5,6) ; // function call } int sum_func (int x, int y) // function declaration { int z = 0; z = x+y ; return z; // return the value }
9、字符串
字符串字符數組示例
此示例將顯示如何創建字符串並將其打印到串口監視器窗口。
例
void setup() { char my_str[6]; // an array big enough for a 5 character string Serial.begin(9600); my_str[0] = 'H'; // the string consists of 5 characters my_str[1] = 'e'; my_str[2] = 'l'; my_str[3] = 'l'; my_str[4] = 'o'; my_str[5] = 0; // 6th array element is a null terminator Serial.println(my_str); }
同樣的例子可以用更方便的方式編寫,如下所示:
void setup() { char my_str[] = "Hello"; Serial.begin(9600); Serial.println(my_str); }
10、字符串對象
void setup() { String my_str = "This is my string."; Serial.begin(9600); // (1) 打印字符串對象 Serial.println(my_str); // (2) 將字符串對象轉為大寫 my_str.toUpperCase(); Serial.println(my_str); // (3) 字符串對象重寫 my_str = "My new string."; Serial.println(my_str); // (4) 字符串內容替換 my_str.replace("string", "Arduino sketch"); Serial.println(my_str); // (5) 獲取字符串對象的長度 Serial.print("String length is: "); Serial.println(my_str.length()); }
11、時間函數
delay()函數的工作方式非常簡單。它接受單個整數(或數字)參數。此數字表示時間(以毫秒為單位)。
delayMicroseconds()函數接受單個整數(或數字)參數。一毫秒內有一千微秒,一秒內有一百萬微秒。
此函數用於返回Arduino板開始運行當前程序時的毫秒數。
micros()函數返回Arduino板開始運行當前程序時的微秒數。該數字在大約70分鍾后溢出,即回到零。
12、數組
下面以一個int數組示例來學習數組相關
// n is an array of 10 integers int n[ 10 ] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 } ; void setup () { } void loop () { for ( int i = 0; i < 10; ++i ) // initialize elements of array n to 0 { Serial.print (i) ; Serial.print (‘\r’) ; } for ( int j = 0; j < 10; ++j ) // output each array element's value { Serial.print (n[j]) ; Serial.print (‘\r’) ; } }