Arduino數據類型


Arduino -數據類型-系列1

數據類型在C語言中是一個很廣泛的體系,它用於聲明不同類型的變量或函數。變量的類型決定了它在存儲中占用多少空間以及如何存儲。下面列出了我們在Arduino編程過程中會使用到的所有數據類型。

void

例子:

Void Loop ( ) {
// rest of the code
}

void只在函數聲明中使用。它表明,函數不會向調用它的函數返回任何信息。

Boolean

例子:

boolean val = false ; // 用布爾類型聲明變量,並用false初始化它.
boolean state = true ; // 用布爾類型聲明變量,並用true初始化它.

布爾類型的變量包含了兩個值中,true 或 false。每個布爾變量占用一個字節的內存。

Char

例子:

Char chr_a = 'a' ;//用char類型聲明變量,並用字符a初始化它.
Char chr_c = 97 ;//用char類型聲明變量,並用字符97初始化它.

char類似於字符串,這種變量的大小通常為1個字節。書寫時,單字符用單引號,比如:’A’;多個字符,使用雙引號:”ABC”。當字符以數字形式存儲時,需要遵循ASCII碼表中的特定編碼,這意味着可以使用字符對應的 ASCII 碼進行算術運算。比如:’A’ + 1的值是66,因為大寫字母A的ASCII 碼是65。 范圍是-128 ~127 。

 

unsigned char

例子:

Unsigned Char chr_y = 121 ; // 用無符號字符類型聲明變量

無符號字節型是一種無符號數據類型,占用一個字節的內存。無符號字節類型的取值范圍是 0 到 255。

byte

byte 存儲一個8位無符號數字,范圍從0到255。如:

byte m = 25 ;//用字節類型聲明變量,並用25初始化它.

int

整形是數字存儲的主要數據類型。int 存儲一個16位(2字節)的值范圍是: -32,768到 32,767 (最小值為-2^15,最大值為(2^15)- 1)。在Arduino中 int 的大小會因開發板的不同而不同。例如,在Arduino Due上,int 存儲一個32位(4字節)的值,范圍是 -2,147,483,648 到 2,147,483,647 (最小值為-2^31,最大值為(2^31)- 1)。如:

int counter = 32 ;// 用int類型聲明變量,並用32初始化它.

Unsigned int

無符號整型數在存儲方式上與 int 相同,它不存儲負值只存儲正值,范圍是:0 到65,535 (2^16)- 1。對於Arduino Due 它的存儲范圍從 0 到4,294,967,295 (2^32 – 1)。

Unsigned int counter = 60 ;

Word

在Uno和其他基於ATMEGA的開發板上,一個 word 存儲一個16位無符號數字。而在 Due 和 Zero 開發板上,word 存儲一個32位無符號數字。

word w = 1000 ;//使用類型 word 聲明變量,並用1000初始化它.

Long

long 長整型常量末尾要用L標識出來,它字節數是4,存儲位數32位,范圍:從 -2,147,483,648 到 2,147,483,647。

Long velocity = 102346 ;//Long型變量的聲明,並用102346初始化它.

unsigned long

無符號long變量是用於數字存儲和存儲32位(4字節)的擴展大小變量。與long不同,無符號long變量不存儲負數,其范圍從 0 到 4,294,967,295(2^32 – 1)。

Unsigned Long velocity = 101006 ;

short

short是16位數據類型。在所有arduino(基於ATMega和ARM)的開發板上,一個short存儲一個16位(2字節)的值。這將產生-32,768到32,767的范圍(最小值為-2^15,最大值為(2^15)- 1)。

short val = 13 ;

float

浮點數的數據類型是具有小數點的數字。浮點數通常用於近似模擬值和連續值,因為它們比整數具有更高的分辨率。浮點數可以大到3.4028235E+38,也可以小到-3.4028235E+38。它們被存儲為32位(4字節)的信息。

float num = 1.352;

double

在Uno和其他基於ATMEGA的開發板上,double 占用4個字節。也就是說,double 與 float 完全相同,在精度上沒有任何提高。在Arduino Due上,double有8 字節(64bit)的精度。

double num = 45.352 ;

Arduino -數據類型-系列2

常見的Arduino是基於ATmega的8位 AVR單片機,例如Arduino UNO ,Arduino Nano,Arduino mega2560等。還有高級點 32位的,如Arduino Due。
由於Arduino是基於C/C++語言的,具有平台差異性,因此,其基本數據類型在這2個平台(8位機和32位機)下有差別。8位機下,int占2字節,double和float一樣占4字節。而32位機下int是4字節,double是8字節。由於32位機很少見,本文就只以8位機類型講解。
 
 
類型
字節數
范圍
說明
char
 
signed  char             
 
unsigned char
1
-128 ~127
 
-128 ~127
 
0~255
Arduino中的char是有符號的,等價於signed char。范圍是-128 ~127 。
char目的是用於儲存ASCII字符。如果你想存儲字節數據,建議使用byte來明確代碼目的。
byte
1
0~255
 
byte不是C/C++標准類型,他是Arduino平台下特有的,實際就是無符號8位整型。
 
 
Arduino.h中,有這樣的類型定義: typedef uint8_t byte;
int 
unsigned int
2
-32768-32767  
(2字節有符號)
 
0~65535    
(2字節無符號)
 
 
在基於ATMega的8位單片機中,如Arduino UNO,Ardunio Mega2560,int是2字節的.
 
而在有些高級Arduino板,如Arduino Due,SAMD等中,int占4字節。
long 
 
 
unsigned long
4
-2147483648 ~ 2147483647
 
0 ~ 4294967295
長整型常量末尾要用L標識出來。
如:long num  = 29596725L;
 
float
4
-3.4028235E+38 to 3.4028235E+38
 
 \
double
4
-3.4028235E+38 to 3.4028235E+38
在基於ATMega的8位單片機中,如Arduino UNO,Ardunio Mega2560,double和float沒有差別,都是4字節的.
而在Due,等高級板中,占8字節。
雖然在8位機的Arduino中float和double是一樣的,但是在32位平台中,double的精度比float高。
bool
1
true 、 false
實質就是C++中的bool類型,你也可以使用boolean,因為在Arduino.h中,有這樣的類型定義:
typedef bool boolean;
 
 

二進制常量

C/C++是不支持在代碼中直接使用二進制格式的字面值的,但是Arduino.h中包含了一個頭文件 "binary.h" ,如下。其作用就是將0~255范圍的整數用一組二進制格式的宏表示,這樣,我們要在程序中顯式的使用0~255范圍內的二進制常量,則可以寫成 以B開頭的格式。
#ifndef Binary_h
#define Binary_h

#define B0 0
#define B00 0
#define B000 0
#define B0000 0
#define B00000 0
#define B000000 0
#define B0000000 0
#define B00000000 0
#define B1 1
#define B01 1
#define B001 1
#define B0001 1
#define B00001 1
#define B000001 1
#define B0000001 1
#define B00000001 1
#define B10 2
#define B010 2
#define B0010 2
#define B00010 2
#define B000010 2
#define B0000010 2
#define B00000010 2
/*.......篇幅原因,省去........*/
#define B11111110 254
#define B11111111 255

#endif

  

包含類型大小信息的整數類型

有些做過硬件開發的人會使用類似於  int8_t  、int16_t 等形式的類型,特點是類型本身包含了類型的大小,讓代碼更具有移植性。在Arduino中也可以使用。
需要包含頭文件 #include<inttypes.h >
 
/*********************整數類型************************/

typedef signed char int8_t;   //8bit有符號類型
typedef unsigned char uint8_t; // 8bit無符號類型


typedef signed int int16_t; //16bit有符號類型
typedef unsigned int uint16_t;//16bit有符號類型


typedef signed long int int32_t;   //328bit有符號類型
typedef unsigned long int uint32_t;  //32bit有符號類型


typedef signed long long int int64_t;   //32bit有符號類型.可能無法使用
typedef unsigned long long int uint64_t;     //32bit有符號類型,可能無法使用




/***************保存地址值的類型****************/


typedef int16_t intptr_t;     //保存地址值的類型,有符號

typedef uint16_t uintptr_t;  //保存地址值的類型,無符號


//遠地址類型,用於單片機SRAM大於64K(地址編號為0~65535 )的情況,用intptr_t可能會溢出。

typedef uint32_t   uint_farptr_t;
typedef int32_t    int_farptr_t;   


/***********宏符號常量,保存了各種類型的最大,最小值**********/

INT8_MAX     INT8_MIN

UINT_MAX     


INT16_MAX    INT16_MIN

UINT16_MAX

INT32_MAX    INT32_MIN

UINT32_MAX

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM