![Arduino語(yǔ)法基礎(chǔ)手冊(cè)專業(yè)資料_第1頁(yè)](http://file4.renrendoc.com/view2/M02/3C/36/wKhkFmZJbCuAKYKPAACw8Pe8KyQ867.jpg)
![Arduino語(yǔ)法基礎(chǔ)手冊(cè)專業(yè)資料_第2頁(yè)](http://file4.renrendoc.com/view2/M02/3C/36/wKhkFmZJbCuAKYKPAACw8Pe8KyQ8672.jpg)
![Arduino語(yǔ)法基礎(chǔ)手冊(cè)專業(yè)資料_第3頁(yè)](http://file4.renrendoc.com/view2/M02/3C/36/wKhkFmZJbCuAKYKPAACw8Pe8KyQ8673.jpg)
![Arduino語(yǔ)法基礎(chǔ)手冊(cè)專業(yè)資料_第4頁(yè)](http://file4.renrendoc.com/view2/M02/3C/36/wKhkFmZJbCuAKYKPAACw8Pe8KyQ8674.jpg)
![Arduino語(yǔ)法基礎(chǔ)手冊(cè)專業(yè)資料_第5頁(yè)](http://file4.renrendoc.com/view2/M02/3C/36/wKhkFmZJbCuAKYKPAACw8Pe8KyQ8675.jpg)
版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030全球七葉神安片行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球醫(yī)療器械消毒產(chǎn)品行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)缺氧帳篷行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)有機(jī)空穴傳輸材料行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球連續(xù)式鋰電池?zé)峤鉅t行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 競(jìng)業(yè)限制合同協(xié)議書
- 家具房屋租賃合同書
- 2025危險(xiǎn)廢物委托處置合同
- 房地產(chǎn)借款合同
- 提高談判技巧的訓(xùn)練課程
- 北京小客車指標(biāo)租賃協(xié)議五篇
- 輸液室運(yùn)用PDCA降低靜脈輸液患者外滲的發(fā)生率品管圈(QCC)活動(dòng)成果
- 北師大版小學(xué)六年級(jí)下冊(cè)數(shù)學(xué)全冊(cè)教學(xué)設(shè)計(jì)
- YY/T 0681.2-2010無(wú)菌醫(yī)療器械包裝試驗(yàn)方法第2部分:軟性屏障材料的密封強(qiáng)度
- GB/T 20472-2006硫鋁酸鹽水泥
- 煙氣管道阻力計(jì)算
- 城鄉(xiāng)環(huán)衛(wèi)一體化保潔服務(wù)迎接重大節(jié)日、活動(dòng)的保障措施
- 醫(yī)院-9S管理共88張課件
- 高考作文復(fù)習(xí):議論文論證方法課件15張
- MySQL數(shù)據(jù)庫(kù)項(xiàng)目式教程完整版課件全書電子教案教材課件(完整)
- 《網(wǎng)絡(luò)服務(wù)器搭建、配置與管理-Linux(RHEL8、CentOS8)(微課版)(第4版)》全冊(cè)電子教案
評(píng)論
0/150
提交評(píng)論