溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Arduino課程:02.數(shù)據(jù)類型及條件語句

發(fā)布時(shí)間:2020-08-06 10:01:19 來源:網(wǎng)絡(luò) 閱讀:175 作者:acktomas 欄目:編程語言

2.1 課程說明

今天制作一期人機(jī)互動(dòng)的例子帶給大家:用按鈕控制LED。將開關(guān)作為延時(shí)開關(guān)來使用,按下開關(guān)后1秒鐘,燈才會(huì)亮,燈亮5秒后才熄滅,這樣大家就能依據(jù)這個(gè)例子,自己延伸出很多好玩的玩法出來。通過案例學(xué)習(xí)變量、運(yùn)算符、條件語句三種語法知識(shí)。

2.2. 器材:

名稱 數(shù)量 規(guī)格
Arduino uno控制板 1 R3
按鈕開關(guān) 1
藍(lán)色LED 1

2.3. 重點(diǎn)器材介紹

開關(guān):有按鍵式、滑動(dòng)式、微動(dòng)型,除了尺寸和外型不同,開關(guān)可分成:

  • 常開(normal open,簡稱N.O):接點(diǎn)平常是不相連的,按下去之后才導(dǎo)通。
  • 常閉(normal close):接點(diǎn)平常是導(dǎo)通的
    開關(guān)也是傳感器,微動(dòng)開關(guān)(鼠標(biāo));極限開關(guān)(光驅(qū)的托盤);磁簧開關(guān);水銀開關(guān)。

2.3. 電路:

2.4 條件語句

形式1

Arduino課程:02.數(shù)據(jù)類型及條件語句
if (expression)
statement;
如果你有一個(gè)語句,你可以使用沒有大括號{}的if語句。

形式2

if (expression) {
Block of statements;
}

形式3

Arduino課程:02.數(shù)據(jù)類型及條件語句
if ... else語句語法
if (expression) { Block of statements; }
else { Block of statements; }

2.5 改變程序流程的if條件式

-比較運(yùn)算符
比較運(yùn)算符 說明
== 如果兩者相等則成立,請注意,這要寫成兩個(gè)連續(xù)等號,中間不能有空格
!= 如果不相等則成立
< 如果左邊小于右邊則成立
> 如果左邊大于右邊則成立
<= 如果左邊小于或等于右邊則成立
>= 如果左邊大于或等于右邊則成立

比較運(yùn)算符參與運(yùn)算后,會(huì)返回一個(gè)布爾值(true或false)。

-邏輯運(yùn)算符
名稱 運(yùn)算符號 表達(dá)式 說明
與(and) && A && B 只有A和B兩個(gè)值都成立時(shí),整個(gè)條件才算成立。
或(OR) || A || B 只要A或B任何一方成立,整個(gè)條件就算成立
非(NOT) ! !A 把成立的變?yōu)椴怀闪?;不成立的變?yōu)槌闪?/td>
-指定運(yùn)算符
運(yùn)算符 意義 說明
++ 遞增 將變量值增加1
-- 遞減 將變量值減1
+= 指定增加 將變量加上某數(shù)
-= 指定減少 將變量減去某數(shù)
*= 指定相乘 將變量乘上某數(shù)
/= 指定相除 將變量除以某數(shù)

2.6 使用端口操作指令、位移運(yùn)算符

處理器有D、B兩個(gè)數(shù)位輸出/輸入接口,以及一個(gè)類比接口C。
DDRB = B00110100; //DDRB包含8、13接口,DDRD包含07接口
PORTB= B00100100;

2.7 任務(wù)一

利用按鈕控制LED

/* 
    作用:當(dāng)你按下按鈕后1秒鐘,燈會(huì)亮,然后維持5秒鐘,熄滅 
*/  
void setup () {
    pinMode(4,INPUT);   //將4號數(shù)字口設(shè)置為輸入狀態(tài),13號數(shù)字口設(shè)置為輸出狀態(tài)  
    pinMode(13,OUTPUT);  
}
void loop(){
    int n =digitalRead(4);      //創(chuàng)建一個(gè)變量n,將4號數(shù)字口的狀態(tài)采集出來賦值給他。  
    if (n==HIGH)            //判斷n是否為高電平,如果是執(zhí)行下面的語句,不是則跳過。  
    {
        delay(1000);  
        digitalWrite(13,HIGH);  
        delay(5000);  
        digitalWrite(13,LOW);  
    }
}
結(jié)果:

編譯并上傳代碼之后,按著、放開幾次微動(dòng)開關(guān)試試,理論上,LED將在按著開關(guān)時(shí)被點(diǎn)亮,放開開關(guān)時(shí)熄滅。但實(shí)際上,LED可能在你放開開光之后,仍然點(diǎn)亮著,這是機(jī)械式開關(guān)的彈跳(bouncing)現(xiàn)象。

2.8 流水燈

在arduino控制板上的3、4、5引腳上連接3個(gè)LED,通過程序依次控制3個(gè)LED燈的亮滅

const byte LED1 = 3;  
const byte LED2 = 4;  
const byte LED3 = 5;  
void setup() {  
    // put your setup code here, to run once:  
    pinMode(LED1, OUTPUT);  
    pinMode(LED2, OUTPUT);  
    pinMode(LED3, OUTPUT);  
}  

void loop() {  
    // put your main code here, to run repeatedly:  
    digitalWrite(LED1,HIGH);  
    digitalWrite(LED2,LOW);  
    digitalWrite(LED3,LOW);  
    delay(1000);  

    digitalWrite(LED1,LOW);  
    digitalWrite(LED2,HIGH);  
    digitalWrite(LED3,LOW);  
    delay(1000);  

    digitalWrite(LED1,LOW);  
    digitalWrite(LED2,LOW);  
    digitalWrite(LED3,HIGH);  
    delay(1000);  
}

2.9 用變量來管理代碼

上例中連接在13引腳的led閃爍,如果把led接在10腳,代碼需要修改2次,利用變量可簡化代碼的修改。

byte led = 13;
void setup(){
    pinMode(led, OUTPUT);
}
void loop(){
    digitalWrite(led, HIGH);
}
聲明變量的語法:

數(shù)據(jù)類型 變量名

例如:
int age = 18; //預(yù)留16位的存儲(chǔ)空間,并存入數(shù)字18;
int older = age +10; //先取出age的值,加上10之后,再賦值給older。

變量命名規(guī)定

? 變量名稱只能包含英文字母、數(shù)字和底線(_)。
? 第一個(gè)字符不能是數(shù)字。
? 變量的名稱大小寫有別,因此LED和led是兩個(gè)不同的變量!
? 變量名稱應(yīng)該使用有意義的文字,如LED和pin,。讓代碼變得容易理解。
? 若要用兩個(gè)單字來命名變量,可以用“駝峰式”記法,
? 避免用特殊意義的保留字來命名。

2.10 數(shù)據(jù)類型

數(shù)據(jù)類型用于設(shè)置“數(shù)據(jù)容器”的格式和容量。在聲明變量的同時(shí),必須設(shè)置該變量所能保存的數(shù)據(jù)類型。

基礎(chǔ)類型
類型 中文名 占用內(nèi)存大小 數(shù)值范圍
boolean 布爾 8位 1或0 true或false)
byte 字節(jié) 8位 0~255
char 字符 8位 -127~127
int 整型 16位 -32768~32767
long 長整數(shù) 32位 -2147483648~2147483647
float 浮點(diǎn)數(shù) 32位 ±3.4028235E+38
double 雙精度浮點(diǎn)數(shù) ±3.4028235E+38
表:不帶正負(fù)號的數(shù)據(jù)類型
類型 中文名稱 數(shù)值范圍
unsigned char 正字符 0~255
unsigned int 正整數(shù) 0~65535
unsigned long 正長整數(shù) 0~4294967295
數(shù)據(jù)類型說明
  1. 設(shè)置數(shù)據(jù)類型時(shí),需要留意該類型所能保存的最大值。如果保存值超過變量的容量,該值將從0開始計(jì)算。
    • byte類型最大只能保存十進(jìn)制的255,若存入256,則實(shí)際的保存值將是0; 數(shù)學(xué)表達(dá)式也要留意數(shù)據(jù)類型的上限,
    • long ans = 4000 100; //計(jì)算結(jié)果:6784; 這是因?yàn)槌绦蚓幾g程序用整數(shù)型態(tài)計(jì)算4000100,正確寫法:其中一個(gè)計(jì)算數(shù)字后面加上設(shè)置數(shù)值類型的格式字符, long ans = 4000L * 100L; //計(jì)算結(jié)果:400000
      表: 轉(zhuǎn)換數(shù)值數(shù)據(jù)類型的格式字符
      格式字符 說明 示例
      L或l 強(qiáng)制轉(zhuǎn)換成長整數(shù) 4000L
      U或u 轉(zhuǎn)化成無正負(fù)號(unsigned)整數(shù) 32800U
      UL或ul 強(qiáng)制轉(zhuǎn)換成無正負(fù)號的長整數(shù)(unsigned long) 7295UL
      tips

      ATmega微處理器內(nèi)部沒有浮點(diǎn)運(yùn)算處理單元,因此,執(zhí)行浮點(diǎn)數(shù)值運(yùn)算,不僅耗時(shí)且精確度不高,請避免在程序中執(zhí)行大量的浮點(diǎn)數(shù)運(yùn)算。附帶一提,浮點(diǎn)數(shù)值可以用科學(xué)記號E或e表示,例如:
      1.8E3 = 1800
      在數(shù)字系統(tǒng)中,用四個(gè)二進(jìn)制數(shù)來代表十進(jìn)制的編碼,又稱為BCD碼(Binary Coded Decimal, 二進(jìn)編碼十進(jìn)數(shù))

      2.11 不變的“常量”

      常量: 存放固定、不變量值的容器。

    • 使用const指令(constant,常量)定義常量
    • 常量名稱中的字母通常寫成大寫。
    • 變量設(shè)置后,就不能再更改其值。
      常量與“程序內(nèi)存”
  2. ATmega微處理器的代碼保存在內(nèi)存,其內(nèi)容無法在程序運(yùn)行時(shí)間更改。而保存變量的容器,將在運(yùn)行時(shí)間被建立在內(nèi)容可隨意更換的SRAM中
  3. 常見的預(yù)設(shè)常量 INPUT、OUTPUT、HIGH、LOW、true、false
    常量定義補(bǔ)充說明

    若要讓常量僅僅保存在程序內(nèi)存,需要在常量聲明代碼中加入PROGMEM關(guān)鍵字。

    2.13 內(nèi)存類型說明

    計(jì)算機(jī)內(nèi)存分為RAM和ROM兩大類型

    RAM:
    • DRAM(Dynamic)→需搭配DRAM控制器持續(xù)刷新,存取慢,價(jià)格低廉
    • SRAM(Static)→ 不需要持續(xù)刷新,存取速度快,價(jià)格高 #### #### ROM:
    • mask ROM → 相當(dāng)于DVD和CD
    • PROM → Programmable,可編程
    • EPROM → EP 代表Erasable and Programmalbe(可擦除編程)

2.14. 補(bǔ)充閱讀材料:

Arduino 數(shù)據(jù)類型
C中的數(shù)據(jù)類型是指用于聲明不同類型的變量或函數(shù)的擴(kuò)展系統(tǒng)。變量的類型確定它在存儲(chǔ)器中占用多少空間以及如何解釋存儲(chǔ)的位模式。
下表提供了你將在Arduino編程期間使用的所有數(shù)據(jù)類型。
void Boolean char Unsigned char
byte int Unsigned int word
long Unsigned long short float
double array String-chararray String-object
關(guān)鍵字 說明
  1. void void關(guān)鍵字僅用于函數(shù)聲明。它表示該函數(shù)預(yù)計(jì)不會(huì)向調(diào)用它的函數(shù)返回任何信息。 例子
    Void Loop ( ) {
    // rest of the code
    }
  2. Boolean 布爾值保存兩個(gè)值之一,true或false。每個(gè)布爾變量占用一個(gè)字節(jié)的內(nèi)存。
    例子
    boolean val = false ; // declaration of variable with type boolean and initialize it with false
    boolean state = true ; // declaration of variable with type boolean and initialize it with false
  3. Char
    一種數(shù)據(jù)類型,占用一個(gè)字節(jié)的內(nèi)存,存儲(chǔ)一個(gè)字符值。字符文字用單引號寫成:'A',對于多個(gè)字符,字符串使用雙引號:"ABC"。
    但是,字符是存儲(chǔ)為數(shù)字。你可以在ASCII圖表中查看特定編碼。這意味著可以對使用ASCII值的字符進(jìn)行算術(shù)運(yùn)算。例如,'A'+1的值為66,因?yàn)榇髮懽帜窤的ASCII值為65。
    例子
    Char chr_a = ‘a(chǎn)’ ;//declaration of variable with type char and initialize it with character a
    Char chr_c = 97 ;//declaration of variable with type char and initialize it with character 97 ASCII Char Table
  4. unsigned char
    unsigned char是一種無符號數(shù)據(jù)類型,占用一個(gè)字節(jié)的內(nèi)存。unsigned char數(shù)據(jù)類型編碼數(shù)字為0到255。
    例子
    Unsigned Char chr_y = 121 ; // declaration of variable with type Unsigned char and initialize it with character y
  5. byte 一個(gè)字節(jié)存儲(chǔ)一個(gè)8位無符號數(shù),從0到255。
    例子
    byte m = 25 ;//declaration of variable with type byte and initialize it with 25
  6. int
    整數(shù)(int)是數(shù)字存儲(chǔ)的主要數(shù)據(jù)類型。int存儲(chǔ)16位(2字節(jié))值。這產(chǎn)生-32768至32767的范圍(最小值為-215 ,最大值為(215 )-1)。
    int的大小因板而異。例如,在Arduino Due中,int存儲(chǔ)32位(4字節(jié))值。這產(chǎn)生-2147483648至2147483647的范圍(最小值-231 和最大值(231 )-1)。
    例子
    int counter = 32 ;// declaration of variable with type int and initialize it with 32
  7. Unsigned int
    unsigned int(無符號整數(shù))與int相同,存儲(chǔ)2字節(jié)。然而,它們只存儲(chǔ)正值,產(chǎn)生0到65535(216)-1的有效范圍。Due存儲(chǔ)4字節(jié)(32位)值,范圍從0到4294967295(232-1)。
    例子
    Unsigned int counter = 60 ; // declaration of variable with type unsigned int and initialize it with 60
  8. Word
    在Uno和其他基于ATMEGA的板上,一個(gè)word存儲(chǔ)一個(gè)16位無符號數(shù)。在Due和Zero上,它存儲(chǔ)一個(gè)32位無符號數(shù)。
    例子
    word w = 1000 ;//declaration of variable with type word and initialize it with 1000
  9. Long
    Long變量是用于數(shù)字存儲(chǔ)的擴(kuò)展大小變量,存儲(chǔ)32位(4字節(jié)),從-2147483648到2147483647。
    例子
    Long velocity = 102346 ;//declaration of variable with type Long and initialize it with 102346
  10. unsigned long
    unsigned long變量是用于數(shù)字存儲(chǔ)的擴(kuò)展大小變量,并存儲(chǔ)32位(4字節(jié))。與標(biāo)準(zhǔn)的long不同,unsigned long不會(huì)存儲(chǔ)負(fù)數(shù),它們的范圍為0到4294967295(232-1)。
    例子
    Unsigned Long velocity = 101006 ;// declaration of variable with type Unsigned Long and initialize it with 101006
  11. short
    short是16位數(shù)據(jù)類型。在所有Arduinos(基于ATMega和ARM)上,一個(gè)short存儲(chǔ)一個(gè)16位(2字節(jié))值。這產(chǎn)生-32768至32767的范圍(最小值為-215,最大值為(215)-1)。
    例子
    short val = 13 ;//declaration of variable with type short and initialize it with 13
  12. float
    浮點(diǎn)數(shù)的數(shù)據(jù)類型是具有小數(shù)點(diǎn)的數(shù)字。浮點(diǎn)數(shù)通常用于近似模擬值和連續(xù)值,因?yàn)樗鼈兊姆直媛矢哂谡麛?shù)。
    浮點(diǎn)數(shù)可以大到3.4028235E+38,也可以低到-3.4028235E+38。它們被存儲(chǔ)為32位(4字節(jié))信息。
    例子
    float num = 1.352;//declaration of variable with type float and initialize it with 1.352
  13. double
    在Uno和其他基于ATMEGA的板上,雙精度浮點(diǎn)數(shù)占用四個(gè)字節(jié)。也就是說,double實(shí)現(xiàn)與float完全相同,精度沒有增益。在Arduino Due上,double具有8字節(jié)(64位)精度。
    例子
    double num = 45.352 ;// declaration of variable with type double and initialize it with 45.352
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI