void
void只用在函數聲明中。它表示該函數將不會被返回任何數據到它被調用的函數中。 例子
//功能在“setup”和“l(fā)oop”被執(zhí)行
//但沒有數據被返回到高一級的程序中
void setup()
{
// ...
}
void loop()
{
// ...
}
boolean
布爾
一個布爾變量擁有兩個值,true或false。(每個布爾變量占用一個字節(jié)的內存瓶逃。)
例子:
int LEDpin = 5; // LED與引腳5相連
int switchPin = 13; // 開關的一個引腳連接引腳,另一個引腳接地廓块。
boolean running = false;
void setup()
{
pinMode(LEDpin, OUTPUT);
pinMode(switchPin, INPUT);
digitalWrite(switchPin, HIGH); // 打開上拉電阻
}
void loop()
{
if (digitalRead(switchPin) == LOW)
{ // 按下開關 - 使引腳拉向高電勢
delay(100); // 通過延遲厢绝,以濾去開關抖動產生的雜波
running = !running; // 觸發(fā)running變量
digitalWrite(LEDpin, running) //點亮LED
}
}
char
char 描述
一個數據類型,占用1個字節(jié)的內存存儲一個字符值带猴。字符都寫在單引號昔汉,如'A'(多個字符(字符串)使用雙引號,如“ABC”)浓利。
字符以編號的形式存儲挤庇。你可以在ASCII表中看到對應的編碼钞速。這意味著字符的ASCII值可以用來作數學計算。(例如'A'+ 1嫡秕,因為大寫A的ASCII值是65渴语,所以結果為66)。如何將字符轉換成數字參考serial.println命令昆咽。
char數據類型是有符號的類型驾凶,這意味著它的編碼為-8到7。對于一個無符號一個字節(jié)(8位)的數據類型掷酗,使用byte數據類型调违。 例如
char myChar = 'A';
char myChar = 65; // both are equivalent
unsigned char
無符號字符型 描述
一個無符號數據類型占用1個字節(jié)的內存。與byte的數據類型相同泻轰。
無符號的char數據類型能編碼0到255的數字技肩。
為了保持Arduino的編程風格的一致性,byte數據類型是首選浮声。
例子:
unsigned char myChar = 240;
byte
字節(jié)型 描述
一個字節(jié)存儲8位無符號數虚婿,從0到255。
例子:
byte b = B10010; // "B" 是二進制格式(B10010等于十進制18)
int
整型 簡介
整數是基本數據類型泳挥,占用2字節(jié)然痊。
整數的范圍為-32,768到32,767( -2^15 ~(2^15)-1)。
整數類型使用2的補碼方式存儲負數屉符。最高位通常為符號位剧浸,表示數的正負。其余位被“取反加1”矗钟。
Arduino為您處理負數計算問題唆香,所以數學計算對您是透明的(術語:實際存在,但不可操作真仲。相當于“黑盒”)袋马。但是,當處理右移位運算符(?)時秸应,可能有未預期的編譯過程。
示例:
int ledPin = 13;
語法
int var = val;
var - 變量名
val - 賦給變量的值
提示
當變量數值過大而超過整數類型所能表示的范圍時(-32,768到32,767)碑宴,變量值會“回滾”(詳情見示例)软啼。
int x
x = -32,768;
x = x - 1; // x 現在是 32,767。
x = 32,767;
x = x + 1; // x 現在是 -32,768延柠。
unsigned int
無符號整型 描述
無符號整型變量擴充了變量容量以存儲更大的數據祸挪,它能存儲32位(4字節(jié))數據。與標準長整型不同無符號長整型無法存儲負數贞间,其范圍0~65,535贿条。
無符號整型和整型最重要的區(qū)別是它們的最高位不同雹仿,既符號位。在Arduino整型類型中整以,如果最高位是1胧辽,則此數被認為是負數,剩下的15位為按2的補碼計算所得值公黑。
例子
unsigned int ledPin = 13;
語法
unsigned int var = val;
var - 無符號變量名稱
val - 給變量所賦予的值
編程提示
當變量的值超過它能表示的最大值時它會“滾回”最小值邑商,反向也會出現這種現象。
unsigned int x
x = 0;
x = x - 1; //x現在等于65535--向負數方向滾回
x = x + 1; //x現在等于0--滾回
word
字 描述
一個存儲一個16字節(jié)無符號數的字符凡蚜,取值范圍從0到65535人断,與unsigned int相同。
例子:
word w = 10000;
long
長整型 描述
長整數型變量是擴展的數字存儲變量朝蜘,它可以存儲位(4字節(jié))大小的變量,從-2,147,483,648到2,147,483,647恶迈。
例子:
long speedOfLight = 186000L; //參見整數常量‘L’的說明
語法
long var = val;
var - 長整型變量名
var - 賦給變量的值
unsigned long
無符號長整型 描述
無符號長整型變量擴充了變量容量以存儲更大的數據,它能存儲位(4字節(jié))數據谱醇。與標準長整型不同無符號長整型無法存儲負數暇仲,其范圍從0到4,294,967,295。
例子:
unsigned long time;
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.print("Time: ");
time = millis();
//程序開始后一直打印時間
Serial.println(time);
//等待一秒鐘枣抱,以免發(fā)送大量的數據
delay(1000);
}
語法
unsigned long var = val;
var - 你所定義的變量名
val - 給變量所賦的值
float
單精度浮點型 描述
float熔吗,浮點型數據,就是有一個小數點的數字佳晶。浮點數經常被用來近似的模擬連續(xù)值桅狠,因為他們比整數更大的精確度。浮點數的取值范圍在3.40285 E+38 ~ -3.40285E +38轿秧。它被存儲為位(4字節(jié))的信息中跌。
float只有6-7位有效數字。這指的是總位數菇篡,而不是小數點右邊的數字漩符。與其他平臺不同的是,在那里你可以使用double型得到更精確的結果(如15位)驱还,在Arduino上嗜暴,double型與float型的大小相同。
浮點數字在有些情況下是不準確的议蟆,在數據大小比較時闷沥,可能會產生奇怪的結果。例如 6.0 / 3.0 可能不等于 2.0咐容。你應該使兩個數字之間的差額的絕對值小于一些小的數字舆逃,這樣就可以近似的得到這兩個數字相等這樣的結果。
浮點運算速度遠遠慢于執(zhí)行整??數運算,例如路狮,如果這個循環(huán)有一個關鍵的計時功能虫啥,并需要以最快的速度運行,就應該避免浮點運算奄妨。程序員經常使用較長的程式把浮點運算轉換成整數運算來提高速度涂籽。
舉例:
float myfloat;
float sensorCalbrate = 1.7;
語法
float var = val;
var——您的float型變量名稱
val——分配給該變量的值
示例代碼
int x;
int y;
float z;
x = 1;
y = x / 2; // Y為0,因為整數不能容納分數
z = (float)x / 2.0; // Z為0.5(你必須使用2.0做除數展蒂,而不是2)
double
雙清度浮點型 描述
雙精度浮點數又活。占用4個字節(jié)。
目前的arduino上的double實現和float相同锰悼,精度并未提高柳骄。
提示
如果你從其他地方得到的代碼中包含了double類變量,最好檢查一遍代碼以確認其中的變量的精確度能否在arduino上達到箕般。
string
string(字符串) 描述
文本字符串可以有兩種表現形式耐薯。你可以使用字符串數據類型(這是0019版本的核心部分),或者你可以做一個字符串丝里,由char類型的數組和空終止字符('\0')構成曲初。(求助,待潤色-Leo)本節(jié)描述了后一種方法杯聚。而字符串對象(String object)將讓你擁有更多的功能臼婆,同時也消耗更多的內存資源。
舉例
以下所有字符串都是有效的聲明幌绍。
char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
char Str4[ ] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";
聲明字符串的解釋
在Str1中 聲明一個沒有初始化的字符數組
在Str2中 聲明一個字符數組(包括一個附加字符)颁褂,編譯器會自動添加所需的空字符
在Str3中 明確加入空字符
在Str4中 用引號分隔初始化的字符串常數,編譯器將調整數組的大小傀广,以適應字符串常量和終止空字符
在Str5中 初始化一個包括明確的尺寸和字符串常量的數組
在Str6中 初始化數組颁独,預留額外的空間用于一個較大的字符串
空終止字符
一般來說,字符串的結尾有一個空終止字符(ASCII代碼0)伪冰。以此讓功能函數(例如Serial.pring())知道一個字符串的結束誓酒。否則,他們將從內存繼續(xù)讀取后續(xù)字節(jié)贮聂,而這些并不屬于所需字符串的一部分靠柑。
這意味著,你的字符串比你想要的文字包含更多的個字符空間吓懈。這就是為什么Str2和Str5需要八個字符病往,即使“Arduino”只有七個字符 - 最后一個位置會自動填充空字符。str4將自動調整為八個字符骄瓣,包括一個額外的空。在Str3的,我們自己已經明確地包含了空字符(寫入'\ 0')榕栏。
需要注意的是畔勤,字符串可能沒有一個最后的空字符(例如在Str2中您已定義字符長度為7,而不是8)扒磁。這會破壞大部分使用字符串的功能庆揪,所以不要故意而為之。如果你注意到一些奇怪的現象(在字符串中操作字符)妨托,基本就是這個原因導致的了缸榛。 單引號?還是雙引號兰伤?
定義字符串時使用雙引號(例如“ABC”)内颗,而定義一個單獨的字符時使用單引號(例如'A') 包裝長字符串
你可以像這樣打包長字符串: char myString[] = “This is the first line” ” this is the second line” ” etcetera”; 字符串數組
當你的應用包含大量的文字,如帶有液晶顯示屏的一個項目敦腔,建立一個字符串數組是非常便利的均澳。因為字符串本身就是數組,它實際上是一個兩維數組的典型符衔。
在下面的代碼找前,”char”在字符數據類型char后跟了一個星號''表示這是一個“指針”數組。所有的數組名實際上是指針判族,所以這需要一個數組的數組躺盛。指針對于C語言初學者而言是非常深奧的部分之一,但我們沒有必要了解詳細指針形帮,就可以有效地應用它槽惫。 樣例
char* myStrings[]={
"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5","This is string 6"
};
void setup(){
Serial.begin(9600);
}
void loop(){
for (int i = 0; i < 6; i++){
Serial.println(myStrings[i]);
delay(500);
}
}
String(c++)
描述
String類,是0019版的核心的一部分沃缘,允許你實現比運用字符數組更復雜的文字操作躯枢。你可以連接字符串,增加字符串槐臀,尋找和替換子字符串以及其他操作锄蹂。它比使用一個簡單的字符數組需要更多的內存,但它更方便水慨。
僅供參考得糜,字符串數組都用小寫的string表示而String類的實例通常用大寫的String表示。注意晰洒,在“雙引號”內指定的字符常量通常被作為字符數組朝抖,并非String類實例。
函數:
String
charAt()
compareTo()
concat()
endsWith()
equals()
equalsIgnoreCase()
GetBytes()
indexOf()
lastIndexOf
length
replace()
setCharAt()
startsWith()
substring()
toCharArray()
toLowerCase()
toUpperCase()
trim()
操作符
[](元素訪問)
+(串連)
==(比較)
array
Arrays (數組)
數組是一種可訪問的變量的集合谍珊。Arduino的數組是基于C語言的治宣,因此這會變得很復雜,但使用簡單的數組是比較簡單的。 創(chuàng)建(聲明)一個數組
下面的方法都可以用來創(chuàng)建(聲明)數組侮邀。
myInts [6];
myPins [] = {2坏怪,4,8绊茧,3铝宵,6};
mySensVals [6] = {2,4华畏,-8鹏秋,3,2};
char message[6] = "hello";
你聲明一個未初始化數組亡笑,例如myPins侣夷。
在myPins中,我們聲明了一個沒有明確大小的數組况芒。編譯器將會計算元素的大小惜纸,并創(chuàng)建一個適當大小的數組。
當然绝骚,你也可以初始化數組的大小耐版,例如在mySensVals中。請注意压汪,當聲明一個char類型的數組時粪牲,你初始化的大小必須大于元素的個數,以容納所需的空字符止剖。 訪問數組
數組是從零開始索引的腺阳,也就說,上面所提到的數組初始化穿香,數組第一個元素是為索引0亭引,因此:
mySensVals [0] == 2,mySensVals [1] == 4皮获,
依此類推 焙蚓。
這也意味著,在包含十個元素的數組中洒宝,索引九是最后一個元素购公。因此
int myArray[10] = {9,3,2,4,3,2,7,8,9,};
// myArray[9]的數值為
// myArray[10],該索引是無效的雁歌,它將會是任意的隨機信息(內存地址)
出于這個原因宏浩,你在訪問數組應該小心。若訪問的數據超出數組的末尾(即索引數大于你聲明的數組的大小- 1)靠瞎,則將從其他內存中讀取數據比庄。從這些地方讀取的數據求妹,除了產生無效的數據外,沒有任何作用印蔗。向隨機存儲器中寫入數據絕對是一個壞主意扒最,通常會導致不愉快的結果,如導致系統崩潰或程序故障华嘹。要排查這樣的錯誤是也是一件難事。 不同于Basic或JAVA法竞,C語言編譯器不會檢查你訪問的數組是否大于你聲明的數組耙厚。 指定一個數組的值:
mySensVals [0] = 10;
從數組中訪問一個值:
X = mySensVals [4];
數組和循環(huán)
數組往往在for循環(huán)中進行操作,循環(huán)計數器可用于訪問每個數組元素岔霸。例如薛躬,將數組中的元素通過串口打印,你可以這樣做:
int i;
for (i = 0; i < 5; i = i + 1) {
Serial.println(myPins[i]);
}