關於變數的類型可以在這裏查看更詳細的分別,有些project也會用int16_t x;這種C99語言代替我們平常用的int x;變數設定方式。參見下表:
需要特別留意Arduino程式運行算式時會有"陷阱",參考以下例子:
long result = 32767 + 1; //正常情況會出327678
正常情況下result的值應該為327678,可以實際出來的值卻是-327678。之所以會出現這個情況,是因為Arduino在實際計算時是以一個暫時的int變數記錄32767 + 1的結果,而因為其結果超出了int類的上限32767,固變成了int對應的-327678再放入result這個變數內。
以程式表示的話實際是這樣:
int temp = 32767 + 1; //實際是 -327678
long result = temp; //最後結果是 -327678
應對的方法我們可以算式的部份其中一個數字加上一個代表long長整數的L,系統就以long的範圍來進行計算了,像下面3種方法都可行:
long result = 32767L + 1L; 或者 long result = 32767L + 1; 或者 long result = 32767 + 1L;
而小數的情況也有類似情況:
int result = 3/2; //理想情況會是出4捨5入的2,但實際會是1,因為小數部份不會4捨5入而是直接刪除
float result = 3/2; //理想情況會出1.5,但經過int類暫存結果同上會變成1
應對的方法我們可以算式的部份其中一個數字加上一個.0代表運算時是小數,系統就以float的範圍來進行計算了,像下面幾種方法都可行:
float result = 3.0/2; 或者 float result = 3/2.0; 或者 float result = (float)3/2; 或者 float result = 3/(float)2;
Serial.println("hello");可以寫成Serial.print("hello\n");
Serial.print("value is ");
Serial.print(value);
也可以寫作Serial.print(String("value is ")+value); 或者 Serial.print(String("")+"value is "+value);
Serial.print()預設只會顯示資料到小數後2位,但可以加入第二個參數改變小數點後的位數,甚至可以改變進制。例如:
Serial.print(3.14159) 結果為3.14
Serial.print(3.14159,0) 結果為3,小數部份刪除,不會4捨5入
Serial.print(3.14159,4) 結果為3.1415,往後部份刪除,不會4捨5入
Serial.print(16,BIN) 結果為10000 (BIN=2進制)
Serial.print(16,OCT) 結果為20 (OCT=8進制)
Serial.print(16,DEC) 結果為16 (DEC=10進制)
Serial.print(16,HEX) 結果為10 (HEX=16進制)
反過來變數就算是其他進制﹐放在Serial.print預設也會出10進制的結果
Serial.print(0b10000) 結果為16 (0b開頭代表的是binary,2進制)
Serial.print(0x10) 結果為16 (0x開頭代表的hex,16進制)
要儲存字串的話,可以用
char x[]= "Hello"; 相對佔較少容量
或者 String x= "Hello"; 相對佔較多容量,但可以把文字內容轉換大小階、求字串字數、單獨取字等
例如 String x= "Hello"; x += "world!" 最後x的值會變成Hello world!
下表還有其他String的用法:
18650是鋰電池的一種,可充放電約1000次。18650的18代表電池的直徑(18.5mm)、65代表電池的長度(實際因為電池包含充電保護板,所以會再稍長一點,約66.8~69.5mm,購買電池座時也要注意電池座的長度是否相容。)
另外也有較小的18350/14500/16340。
石英振盪器/晶振相等於控制板的時脈/時鐘,協調控制板零件間的工作速度。UNO板的石英振盪器為16MHz
電腦的大腦--> CPU/MPU(中央處理器)=功能包含程式、運算等
Arduino等微控制板的大腦-->MCU(MicroController Unit,微控制器)=功能CPU+Flash+SDRAM+I/O
智能手機/個人電腦等的大腦-->SoC(System on a Clip)=功能包含wifi,顯卡,藍牙...等
SoC>MCU>CPU
在微電腦/微控制器等開機時控制其開機時動作的程式稱為韌體,例如Arduino通電時會亮"ON"的LED、自動執行上傳了的程式等表現就是由Firmware內的程式控制,一般使用上我們不會更改到其內容,如果隨意修改也有可以造成控制板的故障。這種程式也稱為開機啟動程式(bootloader)
SRAM: 揮發性(voltile),資料在斷電後會消失 記錄程式中運作時資料
Flash快閃記憶體:非揮發性,資料在斷電後仍存在。存放bootloader/我們上傳的程式
EEPROM:非揮發性,相當於記憶卡,程式運作時如需有非揮發性的變數則記錄於此
高階語言:接近人類語言,像digitalRead等接近我們的語言、容易理解(Read a digital signal)
低階語言:接近電腦看的語言,像10010101001010010這種機械碼,只有電腦理解而我們我們不會看懂。
Arduino編程的語言-Arduino語言則是C語言和C++語言的混合簡化版。
而把高階語言翻譯成低階語言的過程稱為編譯(compile),負責編譯的軟體稱為編譯器(compiler)