《Arduino零基礎(chǔ)C語言編程》課件-ch2 Arduino語法基礎(chǔ)_第1頁
《Arduino零基礎(chǔ)C語言編程》課件-ch2 Arduino語法基礎(chǔ)_第2頁
《Arduino零基礎(chǔ)C語言編程》課件-ch2 Arduino語法基礎(chǔ)_第3頁
《Arduino零基礎(chǔ)C語言編程》課件-ch2 Arduino語法基礎(chǔ)_第4頁
《Arduino零基礎(chǔ)C語言編程》課件-ch2 Arduino語法基礎(chǔ)_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第二章Arduino語法基礎(chǔ)Arduino零基礎(chǔ)C語言編程12025/2/72.1程序結(jié)構(gòu)在Arduino中,標(biāo)準(zhǔn)的程序入口main函數(shù)在內(nèi)部被定義,用戶只需要關(guān)心以下兩個函數(shù):(1)setup()當(dāng)Arduino板起動時setup()函數(shù)會被調(diào)用。用它來初始化變量,引腳模式,開始使用某個庫,等等。該函數(shù)在Arduino板的每次上電和復(fù)位時只運行一次。(2)loop()在創(chuàng)建setup函數(shù),該函數(shù)初始化和設(shè)置初始值,loop()函數(shù)所做事的正如其名,連續(xù)循環(huán),允許程序改變狀態(tài)和響應(yīng)事件??梢杂盟鼇韺崟r控制arduino板。Arduino零基礎(chǔ)C語言編程22025/2/7示例:intbuttonPin=3;voidsetup(){Serial.begin(9600);//初始化串口pinMode(buttonPin,INPUT);//設(shè)置3號引腳為輸入模式}voidloop(){if(digitalRead(buttonPin)==HIGH)serialWrite('H');

elseserialWrite('L');delay(1000);}Arduino零基礎(chǔ)C語言編程32025/2/72.2控制語句(1)選擇結(jié)構(gòu)

a.if結(jié)構(gòu)

:用于與比較運算符結(jié)合使用,測試是否已達到某些條件if(x>120)digitalWrite(LEDpin,HIGH);//格式1

if(x>120)digitalWrite(LEDpin,HIGH);//格式2

if(x>120){digitalWrite(LEDpin,HIGH);}//格式3

if(x>120){//格式4digitalWrite(LEDpin1,HIGH);digitalWrite(LEDpin2,HIGH);}//以上格式都是正確的Arduino零基礎(chǔ)C語言編程42025/2/7b.if...else結(jié)構(gòu)

與基本的if語句相比,由于允許多個測試組合在一起,if/else可以使用更多的控制流。if(pinFiveInput<500){//動作A}else{//動作B}Arduino零基礎(chǔ)C語言編程52025/2/7注意:一個elseif語句塊可能有或者沒有終止else語句塊,同理。每個elseif分支允許有無限多個。if(pinFiveInput<500){//執(zhí)行動作A}elseif(pinFiveInput>=1000){//執(zhí)行動作B}else{//執(zhí)行動作C}另外一種表達互斥分支測試的方式,是使用switchcase語句。2025/2/7Arduino零基礎(chǔ)C語言編程6c.switchcase結(jié)構(gòu)語法:switch(var){//var:與不同的case中的值進行比較的變量caselabel://label:相應(yīng)的case的值//statementsbreak;caselabel://statementsbreak;default://statements}break關(guān)鍵字將中止并跳出switch語句段,常常用于每個case語句的最后面。如果沒有break語句,switch語句將繼續(xù)執(zhí)行下面的表達式(“持續(xù)下降”)直到遇到break,或者是到達switch語句的末尾。2025/2/7Arduino零基礎(chǔ)C語言編程7(2)循環(huán)結(jié)構(gòu)a.for結(jié)構(gòu)for語句用于重復(fù)執(zhí)行被花括號包圍的語句塊。一個增量計數(shù)器通常被用來遞增和終止循環(huán)。for語句對于任何需要重復(fù)的操作是非常有用的。常常用于與數(shù)組聯(lián)合使用以收集數(shù)據(jù)/引腳。for循環(huán)的頭部有三個部分:for(初始化部分;條件判斷部分;數(shù)據(jù)遞增部分){//語句塊}初始化部分被第一個執(zhí)行,且只執(zhí)行一次。每次通過這個循環(huán),條件判斷部分將被測試;如果為真,語句塊和數(shù)據(jù)遞增部分就會被執(zhí)行,然后條件判斷部分就會被再次測試,當(dāng)條件測試為假時,結(jié)束循環(huán)。2025/2/7Arduino零基礎(chǔ)C語言編程8示例://使用一個PWM引腳使LED燈閃爍intPWMpin=10;//LED在10號引腳串聯(lián)一個470歐姆的電阻

voidsetup(){//這里無需設(shè)置}voidloop(){for(inti=0;i<=255;i++){analogWrite(PWMpin,i);delay(10);}}2025/2/7Arduino零基礎(chǔ)C語言編程9編碼提示:C中的for循環(huán)比在其它計算機語言中發(fā)現(xiàn)的for循環(huán)要靈活的多。三個頭元素中的任何一個或全部可能被省略,盡管分號是必須的。而且初始化部分、條件判斷部分和數(shù)據(jù)遞增部分可以是任何合法的使用任意變量的C語句。且可以使用任何數(shù)據(jù)類型包括floats。這些不常用的類型用于語句段也許可以為一些罕見的編程問題提供解決方案。例如,在遞增部分中使用一個乘法將形成對數(shù)級增長:for(intx=2;x<100;x=x*1.5){ println(x);}輸出:2,3,4,6,9,13,19,28,42,63,94另一個例子,在一個for循環(huán)中使一個LED燈漸漸地變亮和變暗:voidloop(){intx=1;for(inti=0;i>-1;i=i+x){analogWrite(PWMpin,i);if(i==255)x=-1;//在峰值切換方向delay(10);}2025/2/7Arduino零基礎(chǔ)C語言編程10b.While結(jié)構(gòu)語法:while(expression){//expression-一個(布爾型)C語句,被求值為真或假//statement(s)}while循環(huán)將會連續(xù)地?zé)o限地循環(huán),直到圓括號()中的表達式變?yōu)榧佟1粶y試的變量必須被改變,否則while循環(huán)將永遠(yuǎn)不會中止。這可以是代碼,比如一個遞增的變量,或者是一個外部條件,比如測試一個傳感器。示例:var=0;while(var<200){//做兩百次重復(fù)的事情var++;}2025/2/7Arduino零基礎(chǔ)C語言編程11c.do...while結(jié)構(gòu)語法:do{//語句塊}while(測試條件);do循環(huán)與while循環(huán)使用相同方式工作,不同的是條件是在循環(huán)的末尾被測試的,所以do循環(huán)總是至少會運行一次。示例:do{delay(50);//等待傳感器穩(wěn)定x=readSensors();//檢查傳感器的值}while(x<100);2025/2/7Arduino零基礎(chǔ)C語言編程12(3)跳轉(zhuǎn)語句a.break語句break用于中止do,for,或while循環(huán),繞過正常的循環(huán)條件。它也用于中止switch語句。示例:for(x=0;x<255;x++){digitalWrite(PWMpin,x);sens=analogRead(sensorPin);if(sens>threshold){//bailoutonsensordetectx=0;break;}delay(50);}2025/2/7Arduino零基礎(chǔ)C語言編程13b.continue語句continue語句跳過一個循環(huán)的當(dāng)前迭代的余下部分。(do,for,或while)。通過檢查循環(huán)測試條件它將繼續(xù)進行隨后的迭代。示例:for(x=0;x<255;x++){if(x>40&&x<120){//createjumpinvaluescontinue;}

digitalWrite(PWMpin,x);delay(50);}

2025/2/7Arduino零基礎(chǔ)C語言編程14c.return語句語法:return;returnvalue;//value:任何類型的變量或常量

終止一個函數(shù),并向被調(diào)用函數(shù)并返回一個值。示例://一個函數(shù),用于對一個傳感器輸入與一個閾值進行比較intcheckSensor(){if(analogRead(0)>400){return1;else{return0;}}return關(guān)鍵字對測試一段代碼很方便,不需“注釋掉”大段的可能是錯誤的代碼。voidloop(){//在此測試代碼是個好想法return;//這里是功能不正常的代碼//這里的代碼永遠(yuǎn)也不會執(zhí)行}2025/2/7Arduino零基礎(chǔ)C語言編程15d.goto語句語法:label:gotolabel;//在程序中轉(zhuǎn)移程序流到一個標(biāo)記點提示:在C程序中不建議使用goto,而且一些C編程書的作者主張永遠(yuǎn)不要使用goto語句,但是明智地使用它可以簡化某些代碼。許多程序員不贊成使用goto的原因是,無節(jié)制地使用goto語句很容易產(chǎn)生執(zhí)行流混亂的很難被調(diào)試程序。盡管如是說,仍然有很多使用goto語句而大大簡化編碼的實例。其中之一就是從一個很深的循環(huán)嵌套中跳出去,或者是if邏輯塊,在某些條件下。示例:for(byter=0;r<255;r++){for(byteg=255;g>-1;g--){for(byteb=0;b<255;b++){if(analogRead(0)>250){gotobailout;}//其它語句。。。}}}bailout:2025/2/7Arduino零基礎(chǔ)C語言編程162.3相關(guān)語法(1)分號示例: inta=13;//用于一個語句的結(jié)束提示:忘記在一行的末尾加一個分號將產(chǎn)生一個編譯器錯誤。該錯誤信息可能是明顯的,且會提及丟失分號,但也許不會。如果出現(xiàn)一個不可理喻的或看起來不合邏輯的錯誤,其中一個首先要做的事就是檢查分號丟失。編譯器會在前一行的附近發(fā)出抱怨。Arduino零基礎(chǔ)C語言編程172025/2/7(2)大括號大括號(又稱括弧或花括號)是C語言的主要組成部分。一個左大括號必須有一個右大括號跟在后面。這是一個常被稱為平衡括號的條件。ArduinoIDE(集成開發(fā)環(huán)境)包含一個方便的特性以檢驗平衡大括號。只需選擇一個大括號,甚至直接在一個大括號后面點擊插入點,然后它的邏輯上的同伴就會高亮顯示。2025/2/7Arduino零基礎(chǔ)C語言編程18(3)注釋注釋是程序中的一些行,用于讓自己或他人了解程序的工作方式。它們會被編譯器忽略,而不會輸出到控制器,所以它們不會占用Atmega芯片上的任何空間。注釋唯一的目的是幫助理解(或記憶)程序是怎樣工作的,或者是告知其他人程序是怎樣工作的。標(biāo)記一行為注釋只有兩種方式:(1)x=5;//這是一個單行注釋。此斜線后的任何內(nèi)容都是注釋//直到該行的結(jié)尾

(2)/*這是多行注釋-用它來注釋掉整個代碼塊if(gwb==0){//在多行注釋中使用單行注釋是沒有問題的x=3;/*但是其中不可以使用另一個多行注釋-這是不合法的*/}//別忘了加上“關(guān)閉”注釋符-它們必須是平衡的*/2025/2/7Arduino零基礎(chǔ)C語言編程19(4)define宏定義宏定義是一個有用的C組件,它允許程序員在程序編譯前給常量取一個名字。在arduino中定義的常量不會在芯片中占用任何程序空間。編譯器在編譯時會將這些常量引用替換為定義的值。Arduino宏定義與C宏定義有同樣的語法語法:#defineconstantNamevalue注意:‘#’是必須的示例:#defineledPin3//編譯器在編譯時會將任何提及l(fā)edPin的地方替換成數(shù)值3。提示:#define語句的后面分號。如果加了一個,編譯器將會在進一步的頁面引發(fā)奇怪的錯誤。#defineledPin3;//錯誤類似地,包含一個等號通常也會在進一步的頁面引發(fā)奇怪的編譯錯誤。#defineledPin=3//錯誤2025/2/7Arduino零基礎(chǔ)C語言編程20(5)include#include用于在sketch中包含外部的庫。這使程序員可以訪問一個巨大的標(biāo)準(zhǔn)C庫(預(yù)定義函數(shù)集合)的集合。注意#include和#define相似,沒有分號終止符,且如果加了,編譯器會產(chǎn)生奇怪的錯誤信息。示例:該示例包含一個用于輸出數(shù)據(jù)到程序空間閃存的庫,而不是內(nèi)存。這會為動態(tài)內(nèi)存需求節(jié)省存儲空間且使需要創(chuàng)建巨大的查找表變得更實際。#include<avr/pgmspace.h>prog_uint16_tmyConstants[]PROGMEM={0,21140,702,9128,0,25764,8456,0,0,0,0,0,0,0,0,29810,8968,29762,29762,4500};2025/2/7Arduino零基礎(chǔ)C語言編程212.4運算符(1)算術(shù)運算符a.賦值=賦值運算符(單個等號)在C語言中單個等號被稱為賦值運算符。它與在代數(shù)課中的意義不同,后者象征等式或相等。賦值運算符告訴微控制器求值等號右邊的變量或表達式,然后把結(jié)果存入等號左邊的變量中。intsensVal;//聲明一個名為sensVal的整型變量senVal=analogRead(0);//存儲(數(shù)字的)0號模擬引腳的輸入電壓值到sensVal賦值運算符(=號)左邊的變量需要能夠保存存儲在其中的值。如果它不足以大到容納一個值,那個存儲在該變量中的值將是錯誤的。不要混淆賦值運算符[=](單個等號)和比較運算符[==](雙等號),后者求值兩個表達式是否相等。Arduino零基礎(chǔ)C語言編程222025/2/7b.加,減,乘,除這些運算符(分別)返回運算對象的和,差,積,商。這些操作受運算對象的數(shù)據(jù)類型的影響。所以,例如,9/4結(jié)果是2,如果9和2是整型數(shù)。這也意味著運算會溢出,如果結(jié)果超出其在相應(yīng)的數(shù)據(jù)類型下所能表示的數(shù)。(例如,給整型數(shù)值32767加1結(jié)果是-32768)。如果運算對象是不同的類型,會用那個較大的類型進行計算。如果其中一個數(shù)字(運算符)是float類型或double類型,將采用浮點數(shù)進行計算。語法:result=value1+value2;result=value1-value2;result=value1*value2;result=value1/value2;Arduino零基礎(chǔ)C語言編程232025/2/7示例:y=y+3;x=x-7;i=j*6;r=r/5;c.取模%計算一個數(shù)除以另一個數(shù)的余數(shù)。這對于保持一個變量在一個特定的范圍很有用(例如:數(shù)組的大小)。語法

:result=dividend

%divisor示例代碼:intvalues[10];inti=0;voidsetup(){}voidloop(){values[i]=analogRead(0);i=(i+1)

%10;//modulooperatorrollsovervariable}提示:取模運算符不能用于浮點型數(shù)。Arduino零基礎(chǔ)C語言編程242025/2/7示例:x=7

%5;//xnowcontains2x=9

%5;//xnowcontains4x=5

%5;//xnowcontains0x=4

%5;//xnowcontains4(2)比較運算符==,

!=,<,>,>=,<=比較運算符一般和if語句聯(lián)合使用,測試某一條件是否到達,例如一個輸入超出某一數(shù)值。if(x>120)digitalWrite(LEDpin,HIGH);

if(x>120)digitalWrite(LEDpin,HIGH);

if(x>120){digitalWrite(LEDpin,HIGH);}

if(x>120){digitalWrite(LEDpin1,HIGH);digitalWrite(LEDpin2,HIGH);}

//allarecorrectArduino零基礎(chǔ)C語言編程252025/2/72025/2/7Arduino零基礎(chǔ)C語言編程26(3)比較運算符==,

!=,<,>a.&&(邏輯與)只有在兩個操作數(shù)都為真時才返回真,例如:if(digitalRead(2)==HIGH&&digitalRead(3)==HIGH){//readtwoswitches//...}只在兩個輸入都為高時返回真。b.||(邏輯或)任意一個為真時返回真,例如:if(x>0||y>0){//...}x或y任意一個大于0時返回真c.!(非)當(dāng)操作數(shù)為假時返回真,例如:if(!x){//...}若x為假返回真(即如果x等于0)2025/2/7Arduino零基礎(chǔ)C語言編程27(4)位運算按位與(&)規(guī)則:

0011operand10101operand2----------0001(operand1&operand2)-returnedresult示例:

inta=92;//inbinary:0000000001011100intb=101;//inbinary:0000000001100101intc=a&b;//result:0000000001000100,or68indecimal.2025/2/7Arduino零基礎(chǔ)C語言編程28(4)位運算b.按位或(|)規(guī)則:

0011operand10101operand2----------0111(operand1|operand2)-returnedresult示例:

inta=92;//inbinary:0000000001011100intb=101;//inbinary:0000000001100101intc=a|b;//result:0000000001111101,or125indecimal.2025/2/7Arduino零基礎(chǔ)C語言編程29(4)位運算c.按位異或(^)規(guī)則:

0011operand10101operand2----------0110(operand1^operand2)-returnedresult“^”運算符常用于翻轉(zhuǎn)整數(shù)表達式的某些位(例如從0變?yōu)?,或從1變?yōu)?)。在一個按位異或操作中,如果相應(yīng)的掩碼位為1,該位將翻轉(zhuǎn),如果為0,該位不變。以下是一個閃爍引腳5的程序。//Blink_Pin_5//demoforExclusiveORvoidsetup(){DDRD=DDRD|B00100000;//setdigitalpinfiveasOUTPUTSerial.begin(9600);}voidloop(){PORTD=PORTD^B00100000;//invertbit5(digitalpin5),leaveothersuntoucheddelay(100);}2025/2/7Arduino零基礎(chǔ)C語言編程30(4)位運算d.按位取反(~)規(guī)則:

按位取反操作會翻轉(zhuǎn)其每一位。0變?yōu)?,1變?yōu)?。例如:01operand1----------10~operand1

inta=103;//binary:0000000001100111intb=~a;//binary:1111111110011000=-104e.左移運算(<<),右移運算(>>)inta=5;//binary:0000000000000101intb=a<<3;//binary:0000000000101000,or40indecimalintc=b>>3;//binary:0000000000000101,orbackto5likewestartedwith當(dāng)把x左移y位(x<<y),x中最左邊的y位將會丟失。inta=5;//binary:0000000000000101intb=a<<14;//binary:0100000000000000-101中的第一個1被丟棄2025/2/7Arduino零基礎(chǔ)C語言編程31(5)復(fù)合運算符自加++i++;//相當(dāng)于i=i+1;自減--i--;//相當(dāng)于i=i-1;復(fù)合加+=i+=5;//相當(dāng)于i=i+5;復(fù)合減-=i-=5;//相當(dāng)于i=i-5;復(fù)合乘*=i*=5;//相當(dāng)于i=i*5;復(fù)合除/=i/=5;//相當(dāng)于i=i/5;復(fù)合與&=i&=5;//相當(dāng)于i=i&5;復(fù)合或|=i|=5;//相當(dāng)于i=i|5;2.5變量1.常量constants是在Arduino語言里預(yù)定義的變量。它們被用來使程序更易閱讀。一般按組將常量分類。在Arduino內(nèi)有兩個常量用來表示真和假:true和false。需要注意的是true和false常量,不同于HIGH,LOW,INPUT和OUTPUT,需要全部小寫。(1)HIGHHIGH(參考引腳)的含義取決于引腳(pin)的設(shè)置,引腳定義為INPUT或OUTPUT時含義有所不同。當(dāng)一個引腳通過pinMode被設(shè)置為INPUT,并通過digitalRead讀?。╮ead)時。如果當(dāng)前引腳的電壓大于等于3V,微控制器將會返回為HIGH。引腳也可以通過pinMode被設(shè)置為INPUT,并通過digitalWrite設(shè)置為HIGH。輸入引腳的值將被一個內(nèi)在的20K上拉電阻控制在HIGH上,除非一個外部電路將其拉低到LOW。當(dāng)一個引腳通過pinMode被設(shè)置為OUTPUT,并digitalWrite設(shè)置為HIGH時,引腳的電壓應(yīng)在5V。在這種狀態(tài)下,它可以輸出電流。例如,點亮一個通過一串電阻接地或設(shè)置為LOW的OUTPUT屬性引腳的LED。Arduino零基礎(chǔ)C語言編程322025/2/72.5變量1.常量(2)LOWLOW的含義同樣取決于引腳設(shè)置,引腳定義為INPUT或OUTPUT時含義有所不同。當(dāng)一個引腳通過pinMode配置為INPUT,通過digitalRead設(shè)置為讀取(read)時,如果當(dāng)前引腳的電壓小于等于2V,微控制器將返回為LOW。當(dāng)一個引腳通過pinMode配置為OUTPUT,并通過digitalWrite設(shè)置為LOW時,引腳為0V。在這種狀態(tài)下,它可以倒灌電流。例如,點亮一個通過串聯(lián)電阻連接到+5V,或到另一個引腳配置為OUTPUT、HIGH的LED。(3)整型常量整數(shù)常量是直接在程序中使用的數(shù)字,如123。默認(rèn)情況下,這些數(shù)字被視為int,但可以通過U和L修飾符進行更多的限制。通常情況下,整數(shù)常量默認(rèn)為十進制,但可以加上特殊前綴表示為其他進制。進制

例子

格式

備注10(十進制) 123 無

2(二進制) B1111011 前綴'B' 只適用于8位的值(0到255)字符0-1有效8(八進制) 0173 前綴”0” 字符0-7有效16(十六進制) 0x7B 前綴”0x” 字符0-9,A-F,A-F有效Arduino零基礎(chǔ)C語言編程332025/2/72.5變量1.常量(4)浮點數(shù)常量和整型常量類似,浮點常量可以使得代碼更具可讀性。浮點常量在編譯時被轉(zhuǎn)換為其表達式所取的值。浮點數(shù)可以用科學(xué)記數(shù)法表示。'E'和'e'都可以作為有效的指數(shù)標(biāo)志。浮點數(shù)

被轉(zhuǎn)換為

被轉(zhuǎn)換為10.0 102.34E5 2.34*10^5 23400067E-12 67.0*10^-12 0.000000000067Arduino零基礎(chǔ)C語言編程342025/2/72.5變量2.數(shù)據(jù)類型(1)void(2)boolean:布爾(3)char:字節(jié)(4)unsignedchar:無符號字符(5)byte:字節(jié)型(6)int:整型(7)unsignedint:無符號整型(8)word:字(9)long:長整型(10)unsignedlong(11)float:單精度浮點型(12)double:雙精度浮點型(13)string:字符串Arduino零基礎(chǔ)C語言編程352025/2/72.5變量2.數(shù)據(jù)類型(14)String(c++)字符串?dāng)?shù)組都用小寫的string表示而String類的實例通常用大寫的String表示。注意,在“雙引號”內(nèi)指定的字符常量通常被作為字符數(shù)組,并非String類實例。常用函數(shù)有:StringcharAt()compareTo()concat()endsWith()equals()equalsIgnoreCase()GetBytes()indexOf()lastIndexOflengthArduino零基礎(chǔ)C語言編程362025/2/7replace()setCharAt()startsWith()substring()toCharArray()toLowerCase()toUpperCase()trim()2.5變量2.數(shù)據(jù)類型(15)array下面的方法都可以用來創(chuàng)建(聲明)數(shù)組。//聲明一個未初始化數(shù)組myInts[6];//在數(shù)組myPins中,聲明了一個沒有明確大小的數(shù)組。編譯器將會計算元素的大小,并創(chuàng)建一個適當(dāng)大小的數(shù)組。myPins[]={2,4,8,3,6};//當(dāng)然,也可以初始化數(shù)組的大小,例如在mySensVals中。mySensVals[6]={2,4,-8,3,2};//注意,當(dāng)聲明一個char類型的數(shù)組時,初始化的大小必須大于元素的個數(shù),以容納所需的空字符。charmessage[6]="hello";數(shù)組是從零開始索引的,也就說,上面所提到的數(shù)組初始化,數(shù)組第一個元素是為索引0,因此:mySensVals[0]==2,mySensVals[1]==4,依此類推。這也意味著,在包含十個元素的數(shù)組中,索引9是最后一個元素。因此,intmyArray[10]={9,3,2,4,3,2,7,8,9,11};//myArray[9]的數(shù)值為11Arduino零基礎(chǔ)C語言編程372025/2/72.5變量3.數(shù)據(jù)類型轉(zhuǎn)換Arduino零基礎(chǔ)C語言編程382025/2/7描述語法參數(shù)返回將一個變量的類型變?yōu)閏harchar(x)x:任何類型的值Char將一個值轉(zhuǎn)換為字節(jié)型數(shù)值byte(x)X:任何類型的值字節(jié)將一個值轉(zhuǎn)換為int類型int(x)X:任何類型的值int把一個值轉(zhuǎn)換為word數(shù)據(jù)類型的值,或由兩個字節(jié)創(chuàng)建一個字符word(x)word(h,l)X:任何類型的值H:高階(最左邊)字節(jié)L:低序(最右邊)字節(jié)字符將一個值轉(zhuǎn)換為長整型數(shù)據(jù)類型long(x)x:任意類型的數(shù)值長整型數(shù)將一個值轉(zhuǎn)換為float型數(shù)值float(x)X:任何類型的值float型數(shù)2.5變量4.變量作用域&修飾符(1)static(靜態(tài)變量)(2)volatile(易變變量)(3)const(不可改變變量)5.輔助工具sizeof()Arduino零基礎(chǔ)C語言編程392025/2/7語法參數(shù)sizeof(variable)variable:任何變量類型或數(shù)組(如int,float,byte)2.6基本函數(shù)數(shù)字I/O(1)pinMode():設(shè)置引腳格式:voidpinMode(uint8_tpin,uint8_tmode)作用:配置引腳為輸出或輸出模式。參數(shù):pin引腳編號mode:INPUT,OUTPUT,或INPUT_PULLUP示例:intledPin=13;//LEDconnectedtodigitalpin13

voidsetup(){pinMode(ledPin,OUTPUT);//setsthedigitalpinasoutput}

voidloop(){digitalWrite(ledPin,HIGH);//setstheLEDondelay(1000);//waitsforaseconddigitalWrite(ledPin,LOW);//setstheLEDoffdelay(1000);//waitsforasecond}注解:模擬引腳也可以當(dāng)作數(shù)字引腳使用,編號為14(對應(yīng)模擬引腳0)到19(對應(yīng)模擬引腳5)。Arduino零基礎(chǔ)C語言編程402025/2/72.6基本函數(shù)(2)digitalWrite():寫數(shù)字引腳

格式:voiddigitalWrite(uint8_tpin,uint8_tvalue)作用:寫數(shù)字引腳,對應(yīng)引腳的高低電平.在寫引腳之前,需要將引腳設(shè)置為OUTPUT模式。參數(shù):pin引腳編號valueHIGH或LOW示例:intledPin=13;//LEDconnectedtodigitalpin13

voidsetup(){pinMode(ledPin,OUTPUT);//setsthedigitalpinasoutput}

voidloop(){digitalWrite(ledPin,HIGH);//點亮LEDdelay(1000);//等待1秒digitalWrite(ledPin,LOW);//關(guān)delay(1000);//waitsforasecond}Arduino零基礎(chǔ)C語言編程412025/2/72.6基本函數(shù)(3)digitalRead():讀數(shù)字引腳

格式:intdigitalRead(uint8_tpin) 作用:讀數(shù)字引腳,返回引腳的高低電平.在讀引腳之前,需要將引腳設(shè)置為INPUT模式。參數(shù):pin引腳編號返回值:HIGH或LOW示例:intledPin=13;//LEDconnectedtodigitalpin13intinPin=7;//pushbuttonconnectedtodigitalpin7intval=0;//variabletostorethereadvalue

voidsetup(){pinMode(ledPin,OUTPUT);//setsthedigitalpin13asoutputpinMode(inPin,INPUT);//setsthedigitalpin7asinput}

voidloop(){val=digitalRead(inPin);//readtheinputpindigitalWrite(ledPin,val);//setstheLEDtothebutton'svalue}注解:

如果引腳沒有鏈接到任何地方,那么將隨機返回HIGH或LOW.Arduino零基礎(chǔ)C語言編程422025/2/72.6基本函數(shù)2.模擬I/O(1)analogReference():配置參考電壓

格式:voidanalogReference(uint8_ttype)作用:配置模式引腳的參考電壓。函數(shù)analogRead在讀取模擬值之后,將根據(jù)參考電壓將模擬值轉(zhuǎn)換到[0,1023]區(qū)間。有以下類型:DEFAULT:默認(rèn)5V。INTERNAL:低功耗模式。ATmega168和ATmega8對應(yīng)1.1V到2.56V。EXTERNAL:擴展模式。通過AREF引腳獲取參考電壓。參數(shù):type參考類型(DEFAULT/INTERNAL/EXTERNAL)Arduino零基礎(chǔ)C語言編程432025/2/72.6基本函數(shù)2.模擬I/O(2)analogRead():讀模擬引腳格式:intanalogRead(uint8_tpin) 作用:讀模擬引腳,每讀一次需要花1微秒的時間。參數(shù):pin引腳編號返回值:0到1023之間的值示例:intanalogPin=3;//potentiometerwiper(middleterminal)connectedtoanalogpin3//outsideleadstogroundand+5Vintval=0;//variabletostorethevalueread

voidsetup(){Serial.begin(9600);//setupserial}

voidloop(){val=analogRead(analogPin);//readtheinputpinSerial.println(val);//debugvalue}Arduino零基礎(chǔ)C語言編程442025/2/72.6基本函數(shù)2.模擬I/O(3)analogWrite():寫模擬引腳格式:voidanalogWrite(uint8_tpin,intvalue)作用:寫一個模擬值(PWM)到引腳。可以用來控制LED的亮度,或者控制電機的轉(zhuǎn)速。在執(zhí)行該操作后,應(yīng)該等待一定時間后才能對該引腳進行下一次的讀或?qū)懖僮?。PWM的頻率大約為490Hz。在一些基于ATmega168的新的Arduino控制板(如Mini和BT)中,該函數(shù)支持以下引腳:3,5,6,9,10,11。在基于ATmega8的型號中支持9,10,11引腳。參數(shù):pin引腳編號value0到255之間的值,0對應(yīng)off,255對應(yīng)on示例:intledPin=9;//LEDconnectedtodigitalpin9intanalogPin=3;//potentiometerconnectedtoanalogpin3intval=0;//variabletostorethereadvalue

voidsetup(){pinMode(ledPin,OUTPUT);//setsthepinasoutput}

voidloop(){val=analogRead(analogPin);//readtheinputpinanalogWrite(ledPin,val/4);//analogReadvaluesgofrom0to1023,analogWritevaluesfrom0to255}Arduino零基礎(chǔ)C語言編程452025/2/72.6基本函數(shù)3.高級I/O(1)shiftOut():位移輸出函數(shù)格式:voidshiftOut(uint8_tdataPin,uint8_tclockPin,uint8_tbitOrder,byteval)作用:輸入val數(shù)據(jù)后Arduino會自動把數(shù)據(jù)移動分配到8個并行輸出端。其中dataPin為連接DS的引腳號,clockPin為連接SH_CP的引腳號,bitOrder為設(shè)置數(shù)據(jù)位移順序,分別為高位先入MSBFIRST或者低位先入LSBFIRST。參數(shù):dataPin數(shù)據(jù)引腳clockPin時鐘引腳bitOrder移位順序(MSBFIRST或LSBFIRST)val數(shù)據(jù)示例://DothisforMSBFIRSTserialintdata=500;//shiftouthighbyteshiftOut(dataPin,clock,MSBFIRST,(data>>8));//shiftoutlowbyteshiftOut(dataPin,clock,MSBFIRST,data);

//OrdothisforLSBFIRSTserialdata=500;//shiftoutlowbyteshiftOut(dataPin,clock,LSBFIRST,data);//shiftouthighbyteshiftOut(dataPin,clock,LSBFIRST,(data>>8));Arduino零基礎(chǔ)C語言編程462025/2/72.6基本函數(shù)3.高級I/O(2)pulseIn():讀脈沖格式:unsignedlongpulseIn(uint8_tpin,uint8_tstate,unsignedlongtimeout) 作用:讀引腳的脈沖,脈沖可以是HIGH或LOW。如果是HIGH,函數(shù)將先等引腳變?yōu)楦唠娖?,然后開始計時,一直到變?yōu)榈碗娖綖橹?。返回脈沖持續(xù)的時間長短,單位為微秒。如果超時還沒有讀到的話,將返回0。參數(shù):pin引腳編號state脈沖狀態(tài)timeout超時時間(us)示例:下面的例子演示了統(tǒng)計高電平的繼續(xù)時間:intpin=7;unsignedlongduration;

voidsetup(){pinMode(pin,INPUT);}

voidloop(){duration=pulseIn(pin,HIGH);}Arduino零基礎(chǔ)C語言編程472025/2/72.6基本函數(shù)4.時間(1)millis():毫秒時間格式:unsignedlongmillis(void)作用:獲取機器運行的時間長度,單位毫秒。系統(tǒng)最長的記錄時間接近50天,如果超出時間將從0開始。注意,時間為unsignedlong類型,如果用int保存時間將得到錯誤結(jié)果。(2)delay(ms):延時(毫秒)

格式:voiddelay(unsignedlongms)作用:延時,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論