Arduino語(yǔ)法基礎(chǔ)手冊(cè)專業(yè)資料_第1頁(yè)
Arduino語(yǔ)法基礎(chǔ)手冊(cè)專業(yè)資料_第2頁(yè)
Arduino語(yǔ)法基礎(chǔ)手冊(cè)專業(yè)資料_第3頁(yè)
Arduino語(yǔ)法基礎(chǔ)手冊(cè)專業(yè)資料_第4頁(yè)
Arduino語(yǔ)法基礎(chǔ)手冊(cè)專業(yè)資料_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

#Arduino

語(yǔ)法

setup()

初始化函數(shù)

loop()

循環(huán)體函數(shù)

控制語(yǔ)句類似于C

//if

if...else

for

switch

case

while

do...

while

break

continue

return

goto

擴(kuò)展語(yǔ)法類似于C

//;(分號(hào))

{}(花括號(hào))

//(單行注釋)

/*

*/(多行注釋)

#define

#include

算數(shù)運(yùn)算符類似于C

//=(賦值運(yùn)算符)

+(加)

-(減)

*(乘)

/(除)

%(模)

比較運(yùn)算符類似于C

//==(等于)

!=(不等于)

<(不大于)

>(不不大于)

<=(不大于等于)

>=(不不大于等于)

布爾運(yùn)算符類似于C

//&&(與)

||(或)

!(非)

指針運(yùn)算符類似于C

//*

取消引用運(yùn)算符

&

引用運(yùn)算符

位運(yùn)算符類似于C

&

(bitwise

and)

|

(bitwise

or)

^

(bitwise

xor)

~

(bitwise

not)

<<

(bitshift

left)

>>

(bitshift

right)

復(fù)合運(yùn)算符類似于C

++

(increment)

--

(decrement)

+=

(compound

addition)

-=

(compound

subtraction)

*=

(compound

multiplication)

/=

(compound

division)

&=

(compound

bitwise

and)

|=

(compound

bitwise

or)

常量

constants

預(yù)定義常量

BOOL

true

false

引腳電壓定義,HIGH和LOW【當(dāng)讀取(read)或?qū)懭耄╳rite)數(shù)字引腳時(shí)只有兩個(gè)也許值:

HIGH

LOW

HIGH(參照引腳)含義取決于引腳(pin)設(shè)立,引腳定義為INPUT或OUTPUT時(shí)含義有所不同。當(dāng)一種引腳通過pinMode被設(shè)立為INPUT,并通過digitalRead讀取(read)時(shí)。如果當(dāng)前引腳電壓不不大于等于3V,微控制器將會(huì)返回為HIGH。

引腳也可以通過pinMode被設(shè)立為INPUT,并通過digitalWrite設(shè)立為HIGH。輸入引腳值將被一種內(nèi)在20K上拉電阻

控制

在HIGH上,除非一種外部電路將其拉低到LOW。

當(dāng)一種引腳通過pinMode被設(shè)立為OUTPUT,并digitalWrite設(shè)立為HIGH時(shí),引腳電壓應(yīng)在5V。在這種狀態(tài)下,它可以

輸出電流

。例如,點(diǎn)亮一種通過一串電阻接地或設(shè)立為L(zhǎng)OWOUTPUT屬性引腳LED。

LOW含義同樣取決于引腳設(shè)立,引腳定義為INPUT或OUTPUT時(shí)含義有所不同。當(dāng)一種引腳通過pinMode配備為INPUT,通過digitalRead設(shè)立為讀取(read)時(shí),如果當(dāng)前引腳電壓不大于等于2V,微控制器將返回為L(zhǎng)OW。

當(dāng)一種引腳通過pinMode配備為OUTPUT,并通過digitalWrite設(shè)立為L(zhǎng)OW時(shí),引腳為0V。在這種狀態(tài)下,它可以

倒灌

電流。例如,點(diǎn)亮一種通過串聯(lián)電阻連接到+5V,或到另一種引腳配備為OUTPUT、HIGHLED。

數(shù)字引腳(Digital

pins)定義,INPUT和OUTPUT【數(shù)字引腳當(dāng)作

INPUT

OUTPUT都可以

。用pinMode()辦法使一種數(shù)字引腳從INPUT到OUTPUT變化】

Arduino(Atmega)引腳通過pinMode()配備為

輸入(INPUT)

即是將其配備在一種高阻抗?fàn)顟B(tài)。配備為INPUT引腳可以理解為引腳取樣時(shí)對(duì)電路有極小需求,即等效于在引腳前串聯(lián)一種100兆歐姆(Megohms)電阻。這使得它們非常利于讀取傳感器,而不是為L(zhǎng)ED供電。

引腳通過pinMode()配備為

輸出(OUTPUT)

即是將其配備在一種低阻抗?fàn)顟B(tài)。

這意味著它們可覺得電路提供充分電流。Atmega引腳可以向其她設(shè)備/電路提供(提供正電流positive

current)或倒灌(提供負(fù)電流negative

current)達(dá)40毫安(mA)電流。這使得它們利于給LED供電,而不是讀取傳感器。輸出(OUTPUT)引腳被短路接地或5V電路上會(huì)受到損壞甚至燒毀。Atmega引腳在為繼電器或電機(jī)供電時(shí),由于電流局限性,將需要某些外接電路來實(shí)現(xiàn)供電。

整數(shù)常量

進(jìn)制

例子

格式

備注

10(十進(jìn)制)

123

無(wú)

2(二進(jìn)制)

B1111011

前綴'B'

只合用于8位值(0到255)字符0-1有效

8(八進(jìn)制)

0173

前綴”0”

字符0-7有效

16(十六進(jìn)制)

0x7B

前綴”0x”

字符0-9,A-F,A-F有效

小數(shù)是十進(jìn)制數(shù)。這是數(shù)學(xué)常識(shí)。如果一種數(shù)沒有特定前綴,則默以為十進(jìn)制。

二進(jìn)制以2為基底,只有數(shù)字0和1是有效。

'u'

or

'U'

指定一種常量為無(wú)符號(hào)型。(只能表達(dá)正數(shù)和0)

例如:

33u

'l'

or

'L'

指定一種常量為長(zhǎng)整型。(表達(dá)數(shù)范疇更廣)

例如:

100000L

'ul'

or

'UL'

這個(gè)你懂,就是上面兩種類型,稱作無(wú)符號(hào)長(zhǎng)整型。

例如:32767ul

浮點(diǎn)常量

浮點(diǎn)數(shù)

被轉(zhuǎn)換為

被轉(zhuǎn)換為

10.0

10

2.34E5

2.34

*

10^5

234000

67E-12

67.0

*

10^-12

0.

數(shù)據(jù)類型類似于C

void

boolean

char

unsigned

char

byte

int

unsigned

int

word

long

unsigned

long

float

double

string

-

char

array

String

-

object

array

-(數(shù)組)

數(shù)據(jù)類型轉(zhuǎn)換類似于C

char()

byte()

int()

word()

long()

float()

word()

把一種值轉(zhuǎn)換為word數(shù)據(jù)類型值,或由兩個(gè)字節(jié)創(chuàng)立一種字符。

word(x)

word(h,

l)

參數(shù)

X:任何類型值

H:高階(最左邊)字節(jié)

L:低序(最右邊)字節(jié)

修飾符類似于C

static

volatile

const

輔助工具

sizeof()

數(shù)字

I/O

pinMode()

將指定引腳配備成輸出或輸入【pinMode(pin,

mode)

pin:要設(shè)立模式引腳

mode:INPUT或OUTPUT】

例子:

ledPin

=

13

//

LED連接到數(shù)字腳13

void

setup()

{

pinMode(ledPin,OUTPUT);

//設(shè)立數(shù)字腳為輸出

}

void

loop()

{

digitalWrite(ledPin,HIGH);

//點(diǎn)亮LED

delay(1000);

//

等待一秒

digitalWrite(ledPin,

LOW);

//

滅掉LED

delay(1000);

//等待第二個(gè)

}

digitalWrite()

給一種數(shù)字引腳寫入HIGH或者LOW。

如果一種引腳已經(jīng)使用pinMode()配備為OUTPUT模式,其電壓將被設(shè)立為相應(yīng)值,HIGH為5V(3.3V控制板上為3.3V),LOW為0V。

如果引腳配備為INPUT模式,使用digitalWrite()寫入HIGH值,將使內(nèi)部20K上拉電阻(詳見數(shù)字引腳教程)。寫入LOW將會(huì)禁用上拉。上拉電阻可以點(diǎn)亮一種LED讓其微微亮,如果LED工作,但是亮度很低,也許是由于這個(gè)因素引起。補(bǔ)救辦法是

使用pinMode()函數(shù)設(shè)立為輸出引腳。

注意:數(shù)字13號(hào)引腳難以作為數(shù)字輸入使用,由于大某些控制板上使用了一顆LED與一種電阻連接到她。如果啟動(dòng)了內(nèi)部20K上拉電阻,她電壓將在1.7V左右,而不是正常5V,由于板載LED串聯(lián)電阻把她使她降了下來,這意味著她返回值總是LOW。如果必要使用數(shù)字13號(hào)引腳輸入模式,需要使用外部上拉下拉電阻。

digitalRead()

digitalRead(PIN)【pin:你想讀取引腳號(hào)(int),返回

HIGH

LOW】

例子:

ledPin

=

13

//

LED連接到13腳

int

inPin

=

7;

//

按鈕連接到數(shù)字引腳7

int

val

=

0;

//定義變量存以儲(chǔ)讀值

void

setup()

{

pinMode(ledPin,

OUTPUT);

//

將13腳設(shè)立為輸出

pinMode(inPin,

INPUT);

//

將7腳設(shè)立為輸入

}

void

loop()

{

val

=

digitalRead(inPin);

//

讀取輸入腳

digitalWrite(ledPin,

val);

//將LED值設(shè)立為按鈕值

}

模仿

I/O

analogReference()

analogReference(type)

配備用于模仿輸入基準(zhǔn)電壓(即輸入范疇最大值)。選項(xiàng)有:

DEFAULT:默認(rèn)5V(Arduino板為5V)或3.3伏特(Arduino板為3.3V)為基準(zhǔn)電壓。

INTERNAL:在ATmega168和ATmega328上以1.1V為基準(zhǔn)電壓,以及在ATmega8上以2.56V為基準(zhǔn)電壓(Arduino

Mega無(wú)此選項(xiàng))

INTERNAL1V1:以1.1V為基準(zhǔn)電壓(此選項(xiàng)僅針對(duì)Arduino

Mega)

INTERNAL2V56:以2.56V為基準(zhǔn)電壓(此選項(xiàng)僅針對(duì)Arduino

Mega)

EXTERNAL:以AREF引腳(0至5V)電壓作為基準(zhǔn)電壓。

type:使用哪種參照類型(DEFAULT,

INTERNAL,

INTERNAL1V1,

INTERNAL2V56,

或者

EXTERNAL)

變化基準(zhǔn)電壓后,之前從anal??ogRead()讀取數(shù)據(jù)也許不精確。

不要在AREF引腳上使用使用任何不大于0V或超過5V外部電壓。如果你使用AREF引腳上電壓作為基準(zhǔn)電壓,你在調(diào)用analogRead()前必要設(shè)立參照類型為EXTERNAL。否則,你將會(huì)削短有效基準(zhǔn)電壓(內(nèi)部產(chǎn)生)和AREF引腳,這也許會(huì)損壞您Arduino板上單片機(jī)。

此外,您可以在外部基準(zhǔn)電壓和AREF引腳之間連接一種5K電阻,使你可以在外部和內(nèi)部基準(zhǔn)電壓之間切換。請(qǐng)注意,總阻值將會(huì)發(fā)生變化,由于AREF引腳內(nèi)部有一種32K電阻。這兩個(gè)電阻均有分壓作用。因此,例如,如果輸入2.5V電壓,最后在在AREF引腳上電壓將為2.5

*

32

/(32

+

5)=

2.2V。

analogRead()

從指定模仿引腳讀取數(shù)據(jù)值。

Arduino板包括一種6通道(Mini和Nano有8個(gè)通道,Mega有16個(gè)通道),10位模仿數(shù)字轉(zhuǎn)換器。這意味著它將0至5伏特之間輸入電壓映射到0至1023之間整數(shù)值。這將產(chǎn)生讀數(shù)之間關(guān)系:5伏特/

1024單位,或0.0049伏特(4.9

mV)每單位。輸入范疇和精度可以使用analogReference()變化。

它需要大概100微秒(0.0001)來讀取模仿輸入,因此最大閱讀速度是每秒10000次。

analogRead(PIN)

引腳:從輸入引腳(大某些板子從0到5,Mini和Nano從0到7,Mega從0到15)讀取數(shù)值,返回從0到1023整數(shù)值

例子:

int

analogPin

=

3;

//電位器(中間引腳)連接到模仿輸入引腳3

//此外兩個(gè)引腳分別接地和+5

V

int

val

=

0;

//定義變量來存儲(chǔ)讀取數(shù)值

void

setup()

{

serial.begin(9600);

//設(shè)立波特率(9600)

}

void

loop()

{

val

=

analogRead(analogPin);

//從輸入引腳讀取數(shù)值

serial.println(val);

//顯示讀取數(shù)值

}

analogWrite()

-

PWM

analogWrite(pin,value)

從一種引腳輸出模仿值(PWM)??捎糜谧孡ED以不同亮度點(diǎn)亮或驅(qū)動(dòng)電機(jī)以不同速度旋轉(zhuǎn)。analogWrite()輸出結(jié)束后,該引腳將產(chǎn)生一種穩(wěn)定特殊占空比喻波,直到下次調(diào)用analogWrite()(或在同一引腳調(diào)用digitalRead()或digitalWrite())。PWM信號(hào)頻率大概是490赫茲。

在大多數(shù)arduino板(ATmega168或ATmega328),只有引腳3,5,6,9,10和11可以實(shí)現(xiàn)該功能。在aduino

Mega上,引腳2到13可以實(shí)現(xiàn)該功能。老Arduino板(ATmega8)只有引腳9、10、11可以使用analogWrite()。在使用analogWrite()前,你不需要調(diào)用pinMode()來設(shè)立引腳為輸出引腳。

analogWrite函數(shù)與模仿引腳、analogRead函數(shù)沒有直接關(guān)系。

pin:用于輸入數(shù)值引腳。

value:占空比:0(完全關(guān)閉)到255(完全打開)之間。

例子:

int

ledPin

=

9;

//

LED連接到數(shù)字引腳9

int

analogPin

=

3;

//電位器連接到模仿引腳3

int

val

=

0;

//定義變量存以儲(chǔ)讀值

void

setup()

{

pinMode(ledPin,OUTPUT);

//設(shè)立引腳為輸出引腳

}

void

loop()

{

val

=

analogRead(analogPin);

//從輸入引腳讀取數(shù)值

analogWrite(ledPin,val

/

4);

//

以val

/

4數(shù)值點(diǎn)亮LED(由于analogRead讀取數(shù)值從0到1023,而analogWrite輸出數(shù)值從0到255)

}

高檔

I/O

tone()

在一種引腳上產(chǎn)生一種特定頻率方波(50%占空比)。持續(xù)時(shí)間可以設(shè)定,否則波形會(huì)始終產(chǎn)生直到調(diào)用noTone()函數(shù)。該引腳可以連接壓電蜂鳴器或其她喇叭播放聲音。

在同一時(shí)刻只能產(chǎn)生一種聲音。如果一種引腳已經(jīng)在播放音樂,那調(diào)用tone()將不會(huì)有任何效果。如果音樂在同一種引腳上播放,它會(huì)自動(dòng)調(diào)節(jié)頻率。

使用tone()函數(shù)會(huì)與3腳和11腳PWM產(chǎn)生干擾(Mega板除外)。

注意:如果你要在各種引腳上產(chǎn)生不同音調(diào),你要在對(duì)下一種引腳使用tone()函數(shù)前對(duì)此引腳調(diào)用noTone()函數(shù)。

tone(pin,

frequency)

tone(pin,

frequency,

duration)

pin:要產(chǎn)生聲音引腳

frequency:

產(chǎn)生聲音頻率,單位Hz,類型unsigned

int

duration:聲音持續(xù)時(shí)間,單位毫秒(可選),類型unsigned

long

noTone()

停止由tone()產(chǎn)生方波。如果沒有使用tone()將不會(huì)有效果。

noTone(pin)

pin:

所要停止產(chǎn)生聲音引腳

shiftOut()

將一種數(shù)據(jù)一種字節(jié)一位一位移出。從最高有效位(最左邊)或最低有效位(最右邊)開始。依次向數(shù)據(jù)腳寫入每一位,之后時(shí)鐘腳被拉高或拉低,批示剛才數(shù)據(jù)有效。

注意:如果你所連接設(shè)備時(shí)鐘類型為上升沿,你要擬定在調(diào)用shiftOut()前時(shí)鐘腳為低電平,如調(diào)用digitalWrite(clockPin,

LOW)。

注意:這是一種軟件實(shí)現(xiàn);Arduino提供了一種硬件實(shí)現(xiàn)SPI庫(kù),它速度更快但只在特定腳有效。

shiftOut(dataPin,

clockPin,

bitOrder,

value)

dataPin:輸出每一位數(shù)據(jù)引腳(int)

clockPin:時(shí)鐘腳,當(dāng)dataPin有值時(shí)此引腳電平變化(int)

bitOrder:輸出位順序,最高位優(yōu)先或最低位優(yōu)先

value:

要移位輸出數(shù)據(jù)(byte)

dataPin和clockPin要用pinMode()配備為輸出。

shiftOut當(dāng)前只能輸出1個(gè)字節(jié)(8位),因此如果輸出值不不大于255需要分兩步。

//最高有效位優(yōu)先串行輸出

int

data=

500;

//移位輸出高字節(jié)

shiftOut(dataPin,

clock,

MSBFIRST,

(data

>>

8));

//移位輸出低字節(jié)

shiftOut(data,

clock,

MSBFIRST,

data);

//最低有效位優(yōu)先串行輸出

data

=

500;

//移位輸出低字節(jié)

shiftOut(dataPin,

clock,

LSBFIRST,

data);

//移位輸出高字節(jié)

shiftOut(dataPin,

clock,

LSBFIRST,

(data

>>

8));

例子:

相應(yīng)電路,查看tutorial

on

controlling

a

74HC595

shift

register

//引腳連接到74HC595ST_CP

int

latchPin

=

8;

//引腳連接到74HC595SH_CP

int

clockPin

=

12;

//

//引腳連接到74HC595DS

int

dataPin

=

11;

void

setup()

{

//設(shè)立引腳為輸出

pinMode(latchPin,

OUTPUT);

pinMode(clockPin,

OUTPUT);

pinMode(dataPin,

OUTPUT);

}

void

loop()

{

//向上計(jì)數(shù)程序

for(J

=

0;

J

<256;

J

+

+){

//傳播數(shù)據(jù)時(shí)候?qū)atchPin拉低

digitalWrite(latchpin,

LOW);

shiftOut(dataPin,clockPin,LSBFIRST,J);

//之后將latchPin拉高以告訴芯片

//它不需要再接受信息了

digitalWrite(latchpin,

HIGH);

delay(1000);

}

}

shiftIn()

將一種數(shù)據(jù)一種字節(jié)一位一位移入。從最高有效位(最左邊)或最低有效位(最右邊)開始。對(duì)于每個(gè)位,先拉高時(shí)鐘電平,再?gòu)臄?shù)據(jù)傳播線中讀取一位,再將時(shí)鐘線拉低。

注意:這是一種軟件實(shí)現(xiàn);Arduino提供了一種硬件實(shí)現(xiàn)SPI庫(kù),它速度更快但只在特定腳有效。

shiftIn(dataPin,clockPin,bitOrder)

dataPin:輸出每一位數(shù)據(jù)引腳(int)

clockPin:時(shí)鐘腳,當(dāng)dataPin有值時(shí)此引腳電平變化(int)

bitOrder:輸出位順序,最高位優(yōu)先或最低位優(yōu)先

pulseIn()

讀取一種引腳脈沖(HIGH或LOW)。例如,如果value是HIGH,pulseIn()會(huì)等待引腳變?yōu)镠IGH,開始計(jì)時(shí),再等待引腳變?yōu)長(zhǎng)OW并停止計(jì)時(shí)。返回脈沖長(zhǎng)度,單位微秒。如果在指定期間內(nèi)無(wú)脈沖函數(shù)返回。

此函數(shù)計(jì)時(shí)功能由經(jīng)驗(yàn)決定,長(zhǎng)時(shí)間脈沖計(jì)時(shí)也許會(huì)出錯(cuò)。計(jì)時(shí)范疇從10微秒至3分鐘。(1秒=1000毫秒=1000000微秒)

pulseIn(pin,

value)

pulseIn(pin,

value,

timeout)

pin:你要進(jìn)行脈沖計(jì)時(shí)引腳號(hào)(int)。

value:要讀取脈沖類型,HIGH或LOW(int)。

timeout

(可選):指定脈沖計(jì)數(shù)等待時(shí)間,單位為微秒,默認(rèn)值是1秒(unsigned

long)

返回:脈沖長(zhǎng)度(微秒),如果等待超時(shí)返回0(unsigned

long)

例子:

int

pin

=

7;

unsigned

long

duration;

void

setup()

{

pinMode(pin,

INPUT);

}

void

loop()

{

duration

=

pulseIn(pin,

HIGH);;

}

時(shí)間

millis()

返回Arduino開發(fā)板從運(yùn)營(yíng)當(dāng)前程序開始毫秒數(shù)。這個(gè)數(shù)字將在約50天后溢出(歸零)

例子:

unsigned

long

time;

void

setup(){

Serial.begin(9600);

}

void

loop(){

serial.print("Time:");

time

=

millis();

//打印從程序開始到當(dāng)前時(shí)間

serial.println(time);

//等待一秒鐘,以免發(fā)送大量數(shù)據(jù)

delay(1000);

}

參數(shù)

millis

是一種無(wú)符號(hào)長(zhǎng)整數(shù),試圖和其她數(shù)據(jù)類型(如整型數(shù))做數(shù)學(xué)運(yùn)算也許會(huì)產(chǎn)生錯(cuò)誤

micros()

返回

Arduino

開發(fā)板從運(yùn)營(yíng)當(dāng)前程序開始微秒數(shù)。這個(gè)數(shù)字將在約70分鐘后溢出(歸零)。在

16MHz

Arduino

開發(fā)板上(例如

Duemilanove

Nano),這個(gè)函數(shù)辨別率為四微秒(即返回值總是四倍數(shù))。在

8MHz

Arduino

開發(fā)板上(例如

LilyPad),這個(gè)函數(shù)辨別率為八微秒。

注意

:每毫秒是1,000微秒,每秒是1,000,000微秒。

例子:

unsigned

long

time;

void

setup(){

Serial.begin(9600);

}

void

loop(){

Serial.print(“Time:”);

time

=

micros();

//打印從程序開始時(shí)間

Serial.println(time);

//等待一秒鐘,以免發(fā)送大量數(shù)據(jù)

delay(1000);

}

delay()

使程序暫停設(shè)定期間(單位毫秒)。(一秒等于1000毫秒)

參數(shù):ms:暫停毫秒數(shù)(unsigned

long)

例子:

ledPin

=

13

/

/

LED連接到數(shù)字13腳

void

setup()

{

pinMode(ledPin,

OUTPUT);

//

設(shè)立引腳為輸出

}

void

loop()

{

digitalWrite(ledPin,

HIGH);

//

點(diǎn)亮LED

delay(1000);

//

等待1秒

digitalWrite(ledPin,

LOW);

//

滅掉LED

delay(1000);

//

等待一秒

}

雖然創(chuàng)立一種使用delay()閃爍LED很簡(jiǎn)樸,并且許多例子將很短delay用于消除開關(guān)抖動(dòng),delay()的確擁有諸多明顯缺陷。在delay函數(shù)使用過程中,讀取傳感器值、計(jì)算、引腳操作均無(wú)法執(zhí)行,因而,它所帶來后果就是使其她大多數(shù)活動(dòng)暫停。其她操作定期辦法請(qǐng)參加millis()函數(shù)和它下面例子。大多數(shù)純熟程序員普通避免超過10毫秒delay(),除非arduino程序非常簡(jiǎn)樸。

但某些操作在delay()執(zhí)行時(shí)任然可以運(yùn)營(yíng),由于delay函數(shù)不會(huì)使中斷失效。通信端口RX接受到得數(shù)據(jù)會(huì)被記錄,PWM(analogWrite)值和引腳狀態(tài)會(huì)保持,中斷也會(huì)按設(shè)定執(zhí)行。

delayMicroseconds()

使程序暫停指定一段時(shí)間(單位微秒)。一毫秒等于一千微秒,一秒等于1000000微秒。

當(dāng)前,可以產(chǎn)生最大延時(shí)精確值是16383。這也許會(huì)在將來Arduino版本中變化。對(duì)于超過幾千微秒延遲,你應(yīng)當(dāng)使用delay()代替。

例子:

int

outPin

=

8;

//

digital

pin

8

void

setup()

{

pinMode(outPin,OUTPUT);

//設(shè)立為輸出數(shù)字管腳

}

void

loop()

{

digitalWrite(outPin,HIGH);

//設(shè)立引腳高電平

delayMicroseconds(50);

//

暫停50微秒

digitalWrite(outPin,

LOW);

//

設(shè)立引腳低電平

delayMicroseconds(50);

//

暫停50微秒

}

數(shù)學(xué)運(yùn)算

min()

max()

abs()

constrain(x,a,b)【將一種數(shù)約束在一種范疇內(nèi)】

map(value,

fromLow,

fromHigh,

toLow,

toHigh)

value:需要映射值

fromLow:當(dāng)前范疇值下限

fromHigh:當(dāng)前范疇值上限

toLow:目的范疇值下限

toHigh:目的范疇值上限

例子:

void

setup(){}

void

loop()

{

int

val

=

analogRead(0);

val

=

map(val,

0,

1023,

0,

255);

analogWrite(9,

val);

}

數(shù)學(xué)實(shí)現(xiàn)

long

map(long

x,

long

in_min,

long

in_max,

long

out_min,

long

out_max)

{

return

(x

-

in_min)

*

(out_max

-

out_min)

/

(in_max

-

in_min)

+

out_min;

}

pow(base,

exponent)

sqrt(x)

三角函數(shù)

sin()

cos()

tan()

隨機(jī)數(shù)

randomSeed()【隨機(jī)數(shù)種子】

random()【random(max),random(min,

max)】

位操作

lowByte()

取一種變量(例如一種字)低位(最右邊)字節(jié)。

highByte()

提取一種字節(jié)高位(最左邊),或一種更長(zhǎng)字節(jié)第二低位。

bitRead()

讀取一種數(shù)位。bitRead(x,

n)

X:想要被讀取數(shù)

N:被讀取位,0是最重要(最右邊)位

該位值(0或1)

bitWrite()

在位上寫入數(shù)字變量

bitWrite(x,

n,

b)

X:要寫入數(shù)值變量

N:要寫入數(shù)值變量位,從0開始是最低(最右邊)位

B:寫入位數(shù)值(0或1)

bitSet()

為一種數(shù)字變量設(shè)立一種位

bitSet(x,

n)

X:想要設(shè)立數(shù)字變量

N:想要設(shè)立位,0是最重要(最右邊)位

bitClear()

清除一種數(shù)值型數(shù)值指定位(將此位設(shè)立成

0)

bitClear(x,

n)

X:指定要清除位數(shù)值

N:指定要清除位位置,從0開始,0

表達(dá)最右端位

bit()

計(jì)算指定位值(0位是1,1位是2,2位4,以此類推)

bit(n)

需要計(jì)算位

設(shè)立中斷函數(shù)

attachInterrupt()

attachInterrupt(interrupt,

function,

mode)

當(dāng)發(fā)生外部中斷時(shí),調(diào)用一種指定函數(shù)。當(dāng)中斷發(fā)生時(shí),該函數(shù)會(huì)取代正在執(zhí)行程序。大多數(shù)Arduino板有兩個(gè)外部中斷:0(數(shù)字引腳2)和1(數(shù)字引腳3)。

arduino

Mege有四個(gè)外部中斷:數(shù)字2(引腳21),3(20針),4(引腳19),5(引腳18)

interrupt:中斷引腳數(shù)

function:中斷發(fā)生時(shí)調(diào)用函數(shù),此函數(shù)必要不帶參數(shù)和不返回任何值。該函數(shù)有時(shí)被稱為中斷服務(wù)程序。

mode:定義何時(shí)發(fā)生中斷如下四個(gè)contstants預(yù)定有效值:

LOW

當(dāng)引腳為低電平時(shí),觸發(fā)中斷

CHANGE

當(dāng)引腳電平發(fā)生變化時(shí),觸發(fā)中斷

RISING

當(dāng)引腳由低電平變?yōu)楦唠娖綍r(shí),觸發(fā)中斷

FALLING

當(dāng)引腳由高電平變?yōu)榈碗娖綍r(shí),觸發(fā)中斷.

當(dāng)中斷函數(shù)發(fā)生時(shí),delya()和millis()數(shù)值將不會(huì)繼續(xù)變化。當(dāng)中斷發(fā)生時(shí),串口收到數(shù)據(jù)也許會(huì)丟失。你應(yīng)當(dāng)聲明一種變量來在未發(fā)生中斷時(shí)儲(chǔ)存變量。

在單片機(jī)自動(dòng)化程序中當(dāng)突發(fā)事件發(fā)生時(shí),中斷是非常有用,它可以協(xié)助解決時(shí)序問題。一種使用中斷任務(wù)也許會(huì)讀一種旋轉(zhuǎn)編碼器,監(jiān)視顧客輸入。

如果你想以保證程序始終抓住一種旋轉(zhuǎn)編碼器脈沖,從來不缺少一種脈沖,它將使寫一種程序做任何事情都要非常棘手,由于該籌劃將需要不斷輪詢傳感器線編碼器,為了趕上脈沖發(fā)生時(shí)。其她傳感器也是如此,如試圖讀取一種聲音傳感器正試圖趕上一按,或紅外線槽傳感器(照片滅弧室),試圖抓住一種硬幣下降。在所有這些狀況下,使用一種中斷可以釋放微控制器來完畢其她某些工作。

例子:

int

pin

=

13;

volatile

int

state

=

LOW;

void

setup()

{

pinMode(pin,

OUTPUT);

attachInterrupt(0,

blink,

CHANGE);

}

void

loop()

{

digitalWrite(pin,

state);

}

void

blink()

{

state

=

!state;

}

detachInterrupt()

關(guān)閉給定中斷

detachInterrupt(interrupt)

interrupt:

中斷禁用數(shù)(0或者1)

開關(guān)中斷

interrupts()

重新啟用中斷(使用noInterrupts()命令后將被禁用)。中斷容許某些重要任務(wù)在后臺(tái)運(yùn)營(yíng),默認(rèn)狀態(tài)是啟用。禁用中斷后某些函數(shù)也許無(wú)法工作,并傳入信息也許會(huì)被忽視。中斷會(huì)稍微打亂代碼時(shí)間,但是在核心某些可以禁用中斷

noInterrupts()

禁止中斷(重新使能中斷interrupts())。中斷容許在后臺(tái)運(yùn)營(yíng)某些重要任務(wù),默認(rèn)使能中斷。禁止中斷時(shí)某些函數(shù)會(huì)無(wú)法工作,通信中接受到信息也也許會(huì)丟失。

中斷會(huì)稍影響計(jì)時(shí)代碼,在某些特定代碼中也會(huì)失效

例子:

void

setup()

void

loop()

{

noInterrupts();

//核心、時(shí)間敏感代碼放在這

interrupts();

//其她代碼放在這

}

通訊

Serial

用于Arduino控制板和一臺(tái)計(jì)算機(jī)或其她設(shè)備之間通信。所有Arduino控制板有至少一種串口(又稱作為UART或USART)。它通過0(RX)和1(TX)數(shù)字引腳通過串口轉(zhuǎn)換芯片連接計(jì)算機(jī)USB端口與計(jì)算機(jī)進(jìn)行通信。因而,如果你使用這些功能同步你不能使用引腳0和1作為輸入或輸出。

您可以使用Arduino

IDE內(nèi)置串口監(jiān)視器與Arduino板通信。點(diǎn)擊工具欄上串口監(jiān)視器按鈕,調(diào)用begin()函數(shù)(選取相似波特率)。

Arduino

Mega

有三個(gè)額外串口:Serial

1使用19(RX)和18(TX),Serial

2使用17(RX)和16(TX),Serial3使用15(RX)和14(TX)。

若要使用這三個(gè)引腳與您個(gè)人電腦通信,你需要一種額外USB轉(zhuǎn)串口適配器,由于這三個(gè)引腳沒有連接到Mega上USB轉(zhuǎn)串口適配器。若要用它們來與外部TTL串口設(shè)備進(jìn)行通信,將TX引腳連接到您設(shè)備RX引腳,將RX引腳連接到您設(shè)備TX引腳,將GND連接到您設(shè)備GND。(不要直接將這些引腳直接連接到RS232串口;她們工作電壓在+/-

12V,也許會(huì)損壞您Arduino控制板。)

Arduino

Leonardo板使用Serial

1通過0(RX)和1(TX)與viaRS-232通信,。Serial預(yù)留給使用Mouse

and

Keyboard

libarariiesUSB

CDC通信

。更多信息,請(qǐng)參照Leonardo

開始使用頁(yè)和硬件頁(yè)。

函數(shù):

if

(Serial)

表達(dá)指定串口與否準(zhǔn)備好

在Leonardo上,if(Serial)表達(dá)無(wú)論有無(wú)USB

CDC,串行連接都是開放。對(duì)于所有其她狀況,涉及Leonardo上if(Serial1),將始終返回true。

這來自于

Arduino

1.0.1

版本簡(jiǎn)介

對(duì)于所有arduino板:

if

(Serial)

Arduino

Leonardo

特有:

if

(Serial1)

Arduino

Mega

特有:

if

(Serial1)

if

(Serial2)

if

(Serial3)

available()

獲取從串口讀取有效字節(jié)數(shù)(字符)。這是已經(jīng)傳播到,并存儲(chǔ)在串行接受緩沖區(qū)(可以存儲(chǔ)64個(gè)字節(jié))數(shù)據(jù)。

available()繼承了

Stream類

Serial.available()

僅合用于Arduino

Mega

Serial1.available()

Serial2.available()

Serial3.available()

例子:

incomingByte

=

0;

//傳入串行數(shù)據(jù)

void

setup()

{

Serial.begin(9600);

//

打開串行端口,設(shè)立傳播波特率為9600

bps

}

void

loop()

{

//只有當(dāng)你接受到數(shù)據(jù)時(shí)才會(huì)發(fā)送數(shù)據(jù),:

if

(Serial.available()

>

0)

{

//讀取傳入字節(jié):

incomingByte

=

Serial.read();

//顯示你得到數(shù)據(jù):

Serial.print("I

received:

");

Serial.println(incomingByte,

DEC);

}

}

begin()

將串行數(shù)據(jù)傳播速率設(shè)立為位/秒(波特)。與計(jì)算機(jī)進(jìn)行通信時(shí),可以使用這些波特率:300,1200,2400,4800,9600,14400,19200,28800,38400,57600或115200。固然,您也可以指定其她波特率

-

例如,引腳0和1和一種元件進(jìn)行通信,它需要一種特定波特率

Serial.begin(speed)

僅合用于Arduino

Mega

:

Serial1.begin(speed)

Serial2.begin(speed)

Serial3.begin(speed)

speed:

位/秒

(波特)

-

long

end()

停用串行通信,使RX和TX引腳用于普通輸入和輸出。要重新使用串行通信,

需要

Serial.begin()語(yǔ)句

Serial.end()

僅合用于Arduino

Mega:

Serial1.end()

Serial2.end()

Serial3.end()

find()

Serial.find()

從串行緩沖器中讀取數(shù)據(jù),直到發(fā)現(xiàn)給定長(zhǎng)度目的字符串。如果找到目的字符串,該函數(shù)返回true,如果超時(shí)則返回false

Serial.flush()

繼承了

Stream

Serial.find(target)

target

:

要搜索字符串(字符)

findUntil()

Serial.findUntil()從串行緩沖區(qū)讀取數(shù)據(jù),直到找到一種給定長(zhǎng)度或字符串終結(jié)位。

如果目的字符串被發(fā)現(xiàn),該函數(shù)返回true,如果超時(shí)則返回false。

Serial.findUntil()繼承了Stream類。

Serial.findUntil(target,

terminal)

target

:

要搜索字符串(char)

terminal

:

在搜索中字符串終結(jié)位

(char)

flush()

等待超過串行數(shù)據(jù)完畢傳播。(在1.0及以上版本中,flush()語(yǔ)句功能不再是丟棄所有進(jìn)入緩存器串行數(shù)據(jù)。)

flush()繼承了Stream類

Serial.flush()

Arduino

Mega

可以使用語(yǔ)法:

Serial1.flush()

Serial2.flush()

Serial3.flush()

parseFloat()

查找傳入串行數(shù)據(jù)流中下一種有效浮點(diǎn)數(shù)。

parseFloat()繼承了Stream類

Serial.parseFloat()

僅合用于Arduino

Mega:

Serial1.parseFloat()

Serial2.parseFloat()

Serial3.parseFloat()

parseInt()

查找傳入串行數(shù)據(jù)流中下一種有效整數(shù)。

parseInt()繼承了Stream類

Serial.parseInt()

僅合用于Arduino

Mega:

Serial1.parseInt()

Serial2.parseInt()

Serial3.parseInt()

peek()

返回傳入串行數(shù)據(jù)下一種字節(jié)(字符),而不是進(jìn)入內(nèi)部串行緩沖器調(diào)取。也就是說,持續(xù)調(diào)用

peek()將返回相似字符,與調(diào)用read()辦法相似。peek()繼承自

Stream類

Serial.peek()

僅合用于Arduino

Mega

:

Serial1.peek()

Serial2.peek()

Serial3.peek()

print()

以人們可讀ASCII文本形式打印數(shù)據(jù)到串口輸出。此命令可以采用各種形式。每個(gè)數(shù)字打印輸出使用是ASCII字符。浮點(diǎn)型同樣打印輸出是ASCII字符,保存到小數(shù)點(diǎn)后兩位。Bytes型則打印輸出單個(gè)字符。字符和字符串原樣打印輸出。Serial.print()打印輸出數(shù)據(jù)不換行,Serial.println()打印輸出數(shù)據(jù)自動(dòng)換行解決。例如

Serial.print(78)輸出為“78”

Serial.print(1.23456)輸出為“1.23”

Serial.print(“N”)輸出為“N”

Serial.print(“Hello

world.”)輸出為“Hello

world.”

也可以自己定義輸出為幾進(jìn)制(格式);可以是BIN(二進(jìn)制,或以2為基數(shù)),OCT(八進(jìn)制,或以8為基數(shù)),DEC(十進(jìn)制,或以10為基數(shù)),HEX(十六進(jìn)制,或以16為基數(shù))。對(duì)于浮點(diǎn)型數(shù)字,可以指定輸出小數(shù)數(shù)位。例如

Serial.print(78,BIN)輸出為“1001110”

Serial.print(78,OCT)輸出為“116”

Serial.print(78,DEC)輸出為“78”

Serial.print(78,HEX)輸出為“4E”

Serial.println(1.23456,0)輸出為“1”

Serial.println(1.23456,2)輸出為“1.23”

Serial.println(1.23456,4)輸出為“1.2346”

你可以通過基于閃存字符串來進(jìn)行打印輸出,將數(shù)據(jù)放入F()中,再放入Serial.print()。例如

Serial.print(F(“Hello

world”))

若要發(fā)送一種字節(jié),則使用

Serial.write()

Serial.print(val)

Serial.print(val,格式)

val:打印輸出值

-

任何數(shù)據(jù)類型

格式:指定進(jìn)制(整數(shù)數(shù)據(jù)類型)或小數(shù)位數(shù)(浮點(diǎn)類型)

例子:

int

x

=

0;

//

定義一種變量并賦值

void

setup()

{

Serial.begin(9600);

//

打開串口傳播,并設(shè)立波特率為9600

}

void

loop()

{

//打印標(biāo)簽

Serial.print("NO

FORMAT");

//

打印一種標(biāo)簽

Serial.print("\t");

//

打印一種轉(zhuǎn)義字符

Serial.print("DEC");

Serial.print("\t");

Serial.print("HEX");

Serial.print("\t");

Serial.print("OCT");

Serial.print("\t");

Serial.print("BIN");

Serial.print("\t");

for(x=0;

x<

64;

x++){

//

打印ASCII碼表一某些,

修改它格式得到需要內(nèi)容

//打印各種格式:

Serial.print(x);

//

以十進(jìn)制格式將x打印輸出

-

"DEC"相似

Serial.print("\t");

//

橫向跳格

Serial.print(x,

DEC);

//

以十進(jìn)制格式將x打印輸出

Serial.print("\t");

//

橫向跳格

Serial.print(x,

HEX);

//

以十六進(jìn)制格式打印輸出

Serial.print("\t");

//

橫向跳格

Serial.print(x,

OCT);

//

以八進(jìn)制格式打印輸出

Serial.print("\t");

//

橫向跳格

Serial.println(x,

BIN);

//

以二進(jìn)制格式打印輸出

//

然后用

"println"打印一種回車

delay(200);

//

延時(shí)200ms

}

Serial.println("");

//

打印一種空字符,并自動(dòng)換行

}

println()

打印數(shù)據(jù)到串行端口,輸出人們可辨認(rèn)ASCII碼文本并回車

(ASCII

13,

'\r')

及換行(ASCII

10,

'\n')。此命令采用形式與Serial.print

()相似

Serial.println(val)

Serial.println(val,

format)

val:

打印內(nèi)容

-

任何數(shù)據(jù)類型都可以

format:

指定基數(shù)(整數(shù)數(shù)據(jù)類型)或小數(shù)位數(shù)(浮點(diǎn)類型)

例子:

int

analogValue

=

0;

//

定義一種變量來保存模仿值

void

setup()

{

//設(shè)立串口波特率為9600

bps:

Serial.begin(9600);

}

void

loop()

{

//讀取引腳0模仿輸入:

analogValue

=

analogRead(0);

//打印g各種格式:

Serial.println(analogValue);

//打印ASCII編碼十進(jìn)制

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論