Arduino 數據類型

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]);
 }
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末呆细,一起剝皮案震驚了整個濱河市型宝,隨后出現的幾起案子,更是在濱河造成了極大的恐慌絮爷,老刑警劉巖趴酣,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異坑夯,居然都是意外死亡岖寞,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門柜蜈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仗谆,“玉大人,你說我怎么就攤上這事淑履×タ澹” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵秘噪,是天一觀的道長狸吞。 經常有香客問我,道長缆娃,這世上最難降的妖魔是什么捷绒? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮贯要,結果婚禮上暖侨,老公的妹妹穿的比我還像新娘。我一直安慰自己崇渗,他們只是感情好字逗,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布京郑。 她就那樣靜靜地躺著,像睡著了一般葫掉。 火紅的嫁衣襯著肌膚如雪些举。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天俭厚,我揣著相機與錄音户魏,去河邊找鬼。 笑死挪挤,一個胖子當著我的面吹牛叼丑,可吹牛的內容都是我干的。 我是一名探鬼主播扛门,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼鸠信,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了论寨?” 一聲冷哼從身側響起星立,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎葬凳,沒想到半個月后绰垂,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡沮明,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年辕坝,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荐健。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡酱畅,死狀恐怖,靈堂內的尸體忽然破棺而出江场,到底是詐尸還是另有隱情纺酸,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布址否,位于F島的核電站餐蔬,受9級特大地震影響,放射性物質發(fā)生泄漏佑附。R本人自食惡果不足惜樊诺,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望音同。 院中可真熱鬧词爬,春花似錦、人聲如沸权均。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恋沃,卻和暖如春必搞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背囊咏。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工恕洲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匆笤。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓研侣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親炮捧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內容

  • 指針是C語言中廣泛使用的一種數據類型惦银。 運用指針編程是C語言最主要的風格之一咆课。利用指針變量可以表示各種數據結構; ...
    朱森閱讀 3,430評論 3 44
  • 使用過Python的數據類型后扯俱,會發(fā)現C/C++的數據類型比較單一书蚪。Arduino實際上是C++,除了基礎數據類型...
    小魚兒他老漢閱讀 8,362評論 0 1
  • char() 描述:將一個變量的類型變?yōu)閏har迅栅。 語法 參數:x:任何類型的值 返回:char byte() 描...
    飛揚code閱讀 869評論 0 1
  • 一殊校、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,723評論 0 10
  • 光頭甜睡很坦然,暢快同時雨滿面读存。 忽然驚醒夢中人为流,大哭是誰真討厭。
    思索者閱讀 164評論 3 0