版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、#Arduino 語(yǔ)法 setup() 初始化函數(shù) loop() 循環(huán)體函數(shù) 控制語(yǔ)句類(lèi)似于C /if if.else for
2、 switch case while do. while break continue return
3、 goto 擴(kuò)展語(yǔ)法類(lèi)似于C /;(分號(hào)) (花括號(hào)) /(單行注釋?zhuān)?#160; /* */(多行注釋?zhuān)?#160; #define #include
4、;算數(shù)運(yùn)算符類(lèi)似于C /=(賦值運(yùn)算符) +(加) -(減) *(乘) /(除) %(模)
5、60;比較運(yùn)算符類(lèi)似于C /=(等于) !=(不等于) <(小于) >(大于) <=(小于等于) >=(大于等于)
6、60;布爾運(yùn)算符類(lèi)似于C /&&(與) |(或) !(非) 指針運(yùn)算符類(lèi)似于C /* 取消引用運(yùn)算符 & 引用運(yùn)算符 位運(yùn)算符類(lèi)似于C &
7、60;(bitwise and) | (bitwise or) (bitwise xor) (bitwise not) << (bitshift left)
8、;>> (bitshift right) 復(fù)合運(yùn)算符類(lèi)似于C + (increment) - (decrement) += (compound addition) -= (compound
9、160;subtraction) *= (compound multiplication) /= (compound division) &= (compound bitwise and) |=
10、 (compound bitwise or) 常量 constants 預(yù)定義的常量 BOOL true false 引腳電壓定義,HIGH和LOW【當(dāng)讀?。╮ead)或?qū)懭耄╳rite)數(shù)字引腳時(shí)只有兩個(gè)可能的值: HIGH 和 LOW
11、160;】 HIGH(參考引腳)的含義取決于引腳(pin)的設(shè)置,引腳定義為INPUT或OUTPUT時(shí)含義有所不同。當(dāng)一個(gè)引腳通過(guò)推薦精選pinMode被設(shè)置為INPUT,并通過(guò)digitalRead讀取(read)時(shí)。如果當(dāng)前引腳的電壓大于等于3V,微控制器將會(huì)返回為HIGH。 引腳也可以通過(guò)pinMode被設(shè)置為INPUT,并通過(guò)digitalWrite設(shè)置為HIGH。輸入引腳的值將被一個(gè)內(nèi)在的20K上拉電阻 控制 在HIGH上,除非一個(gè)外部電路將其拉低到LOW。 當(dāng)一個(gè)引腳通過(guò)p
12、inMode被設(shè)置為OUTPUT,并digitalWrite設(shè)置為HIGH時(shí),引腳的電壓應(yīng)在5V。在這種狀態(tài)下,它可以 輸出電流 。例如,點(diǎn)亮一個(gè)通過(guò)一串電阻接地或設(shè)置為L(zhǎng)OW的OUTPUT屬性引腳的LED。 LOW的含義同樣取決于引腳設(shè)置,引腳定義為INPUT或OUTPUT時(shí)含義有所不同。當(dāng)一個(gè)引腳通過(guò)pinMode配置為INPUT,通過(guò)digitalRead設(shè)置為讀?。╮ead)時(shí),如果當(dāng)前引腳的電壓小于等于2V,微控制器將返回為L(zhǎng)OW。 當(dāng)一個(gè)引腳通過(guò)pinMode配置為OUTPUT,并通
13、過(guò)digitalWrite設(shè)置為L(zhǎng)OW時(shí),引腳為0V。在這種狀態(tài)下,它可以 倒灌 電流。例如,點(diǎn)亮一個(gè)通過(guò)串聯(lián)電阻連接到+5V,或到另一個(gè)引腳配置為OUTPUT、HIGH的的LED。 數(shù)字引腳(Digital pins)定義,INPUT和OUTPUT【數(shù)字引腳當(dāng)作 INPUT 或 OUTPUT都可以 。用pinMode()方法使一個(gè)數(shù)字引腳從INPUT到OUTPUT變化】 &
14、#160;Arduino(Atmega)引腳通過(guò)pinMode()配置為 輸入(INPUT) 即是將其配置在一個(gè)高阻抗的狀態(tài)。配置為INPUT的引腳可以理解為引腳取樣時(shí)對(duì)電路有極小的需求,即等效于在引腳前串聯(lián)一個(gè)100兆歐姆(Megohms)的電阻。這使得它們非常利于讀取傳感器,而不是為L(zhǎng)ED供電。 引腳通過(guò)pinMode()配置為 輸出(OUTPUT) 即是將其配置在一個(gè)低阻抗的狀態(tài)。 這意味著它們可以為電路提供充
15、足的電流。Atmega引腳可以向其他設(shè)備/電路提供(提供正電流positive current)或倒灌(提供負(fù)電流negative current)達(dá)40毫安(mA)的電流。這使得它們利于給LED供電,而不是讀取傳感器。輸出(OUTPUT)引腳被短路的接地或5V電路上會(huì)受到損壞甚至燒毀。Atmega引腳在為繼電器或電機(jī)供電時(shí),由于電流不足,將需要一些外接電路來(lái)實(shí)現(xiàn)供電。 整數(shù)常量 進(jìn)制 例子
16、 格式 備注 10(十進(jìn)制) 123 無(wú) 2(二進(jìn)制) B1111011 前綴'B' 只適用于8位的值(0到255)字符0-1有效 8(八進(jìn)制) 01
17、73 前綴”0” 字符0-7有效 16(十六進(jìn)制) 0x7B 前綴”0x” 字符0-9,A-F,A-F有效 小數(shù)是十進(jìn)制數(shù)。這是數(shù)學(xué)常識(shí)。如果一個(gè)數(shù)沒(méi)有特定的前綴,則默認(rèn)為十進(jìn)制。 &
18、#160;二進(jìn)制以2為基底,只有數(shù)字0和1是有效的。 'u' or 'U' 指定一個(gè)常量為無(wú)符號(hào)型。(只能表示正數(shù)和0) 例如: 33u 'l' or 'L' 指定一個(gè)常量為長(zhǎng)整型。(表示數(shù)的范圍更廣) 例如: 100000L
19、; 'ul' or 'UL' 這個(gè)你懂的,就是上面兩種類(lèi)型,稱(chēng)作無(wú)符號(hào)長(zhǎng)整型。 例如:32767ul 浮點(diǎn)常量 推薦精選 浮點(diǎn)數(shù) 被轉(zhuǎn)換為 被轉(zhuǎn)換為 10.0
20、 10 2.34E5 2.34 * 105 234000 67E-12 67.0 * 10-12 0.000000000067 數(shù)據(jù)類(lèi)型類(lèi)似于C void
21、160; boolean char unsigned char byte int unsigned int
22、60; word long unsigned long float double string - char
23、60;array String - object array -(數(shù)組) 數(shù)據(jù)類(lèi)型轉(zhuǎn)換類(lèi)似于C char() byte() int()
24、160; word() long() float() word() 把一個(gè)值轉(zhuǎn)換為word數(shù)據(jù)類(lèi)型的值,或由兩個(gè)字節(jié)創(chuàng)建一個(gè)字符。 word(x) word(
25、h, l) 參數(shù) X:任何類(lèi)型的值 H:高階(最左邊)字節(jié) L:低序(最右邊)字節(jié) 修飾符類(lèi)似于C static
26、; volatile const 輔助工具 sizeof() 數(shù)字 I/O pinMode() 將指定的引腳配置成輸出或輸入【pinMode(pin, mode)
27、pin:要設(shè)置模式的引腳 mode:INPUT或OUTPUT】 例子: ledPin = 13 / LED連接到數(shù)字腳13 void setup() &
28、#160; pinMode(ledPin,OUTPUT); /設(shè)置數(shù)字腳為輸出 void loop() digitalWrite(ledPin,HIGH); /點(diǎn)亮LED
29、; delay(1000); / 等待一秒 digitalWrite(ledPin, LOW); / 滅掉LED
30、; delay(1000); /等待第二個(gè) 推薦精選 digitalWrite() 給一個(gè)數(shù)字引腳寫(xiě)入HIGH或者LOW。 如果一個(gè)引腳已經(jīng)使用pinMode()配置為OUTPUT
31、模式,其電壓將被設(shè)置為相應(yīng)的值,HIGH為5V(3.3V控制板上為3.3V),LOW為0V。 如果引腳配置為INPUT模式,使用digitalWrite()寫(xiě)入HIGH值,將使內(nèi)部20K上拉電阻(詳見(jiàn)數(shù)字引腳教程)。寫(xiě)入LOW將會(huì)禁用上拉。上拉電阻可以點(diǎn)亮一個(gè)LED讓其微微亮,如果LED工作,但是亮度很低,可能是因?yàn)檫@個(gè)原因引起的。補(bǔ)救的辦法是 使用pinMode()函數(shù)設(shè)置為輸出引腳。 注意:數(shù)字13號(hào)引腳難以作為數(shù)字輸入使用,因?yàn)榇蟛糠值目刂?/p>
32、板上使用了一顆LED與一個(gè)電阻連接到他。如果啟動(dòng)了內(nèi)部的20K上拉電阻,他的電壓將在1.7V左右,而不是正常的5V,因?yàn)榘遢dLED串聯(lián)的電阻把他使他降了下來(lái),這意味著他返回的值總是LOW。如果必須使用數(shù)字13號(hào)引腳的輸入模式,需要使用外部上拉下拉電阻。 digitalRead() digitalRead(PIN)【pin:你想讀取的引腳號(hào)(int),返回 HIGH 或 LOW】 &
33、#160; 例子: ledPin = 13 / LED連接到13腳 int inPin = 7; / 按鈕連接到數(shù)字引腳7 int val = 0; /定義變量存以?xún)?chǔ)讀值
34、0; void setup() pinMode(ledPin, OUTPUT); / 將13腳設(shè)置為輸出 pinMode(inPin,
35、INPUT); / 將7腳設(shè)置為輸入 void loop() val = digitalRead(inPin); /
36、0;讀取輸入腳 digitalWrite(ledPin, val); /將LED值設(shè)置為按鈕的值 模擬 I/O analogReference() analo
37、gReference(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))
38、60; 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:使用哪種參考類(lèi)型(DEFAULT, INTERNAL,
39、 INTERNAL1V1, INTERNAL2V56, 或者推薦精選 EXTERNAL) 改變基準(zhǔn)電壓后,之前從anal?ogRead()讀取的數(shù)據(jù)可能不準(zhǔn)確。 不要在AREF引腳上使用使用任何小于0V或超過(guò)5V的外部電壓。如果你使用AREF引腳上的電壓作為基準(zhǔn)電壓,你在調(diào)用analogRead()前必須設(shè)置參考類(lèi)型為EXTERNAL。否則,你將會(huì)削短有效的基準(zhǔn)電壓(內(nèi)部產(chǎn)生)和AREF引腳,這可能會(huì)損壞您Ardui
40、no板上的單片機(jī)。 另外,您可以在外部基準(zhǔn)電壓和AREF引腳之間連接一個(gè)5K電阻,使你可以在外部和內(nèi)部基準(zhǔn)電壓之間切換。請(qǐng)注意,總阻值將會(huì)發(fā)生改變,因?yàn)锳REF引腳內(nèi)部有一個(gè)32K電阻。這兩個(gè)電阻都有分壓作用。所以,例如,如果輸入2.5V的電壓,最終在在AREF引腳上的電壓將為2.5 * 32 /(32 + 5)= 2.2V。 analogRead()
41、; 從指定的模擬引腳讀取數(shù)據(jù)值。 Arduino板包含一個(gè)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)來(lái)讀取模擬輸入,所以最大的閱讀速度是每秒10000次。
42、 analogRead(PIN) 引腳:從輸入引腳(大部分板子從0到5,Mini和Nano從0到7,Mega從0到15)讀取數(shù)值,返回從0到1023的整數(shù)值 例子: int analogPin = 3; /電位器(中間的引腳)連接到模擬輸入引腳3
43、; /另外兩個(gè)引腳分別接地和+5 V int val = 0; /定義變量來(lái)存儲(chǔ)讀取的數(shù)值 void setup(
44、) serial.begin(9600); /設(shè)置波特率(9600) void loop()
45、 val = analogRead(analogPin); /從輸入引腳讀取數(shù)值 serial.println(val); /顯示讀取的數(shù)值 analogWrite() - PWM
46、60; analogWrite(pin,value) 從一個(gè)引腳輸出模擬值(PWM)。可用于讓LED以不同的亮度點(diǎn)亮或驅(qū)動(dòng)電機(jī)以不同的速度旋轉(zhuǎn)。analogWrite()輸出結(jié)束后,該引腳將產(chǎn)生一個(gè)穩(wěn)定的特殊占空比方波,直到下次調(diào)用analogWrite()(或在同一引腳調(diào)用digitalRead()或digitalWrite())。PWM信號(hào)的頻率大約是490赫茲。 在大多數(shù)arduino板(ATmega168或ATmega328)
47、,只有引腳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()來(lái)設(shè)置引腳為輸出引腳。 推薦精選 analogWrite函數(shù)與模擬引腳、analogRead函數(shù)沒(méi)有直接關(guān)系。 pin:用于輸入數(shù)值的引腳。
48、160; value:占空比:0(完全關(guān)閉)到255(完全打開(kāi))之間。 例子: int ledPin = 9; / LED連接到數(shù)字引腳9 int analogPin = 3; /電位器連接到模擬引腳3
49、160; int val = 0; /定義變量存以?xún)?chǔ)讀值 void setup() pinMode(ledPin,OUTPUT); /設(shè)置引腳為輸出引腳
50、; void loop() val = analogRead(analogPin); /從輸入引腳讀取數(shù)值 analogWrite(ledPin,val / 4)
51、; / 以val / 4的數(shù)值點(diǎn)亮LED(因?yàn)閍nalogRead讀取的數(shù)值從0到1023,而analogWrite輸出的數(shù)值從0到255) 高級(jí) I/O tone() 在一個(gè)引腳上產(chǎn)生一個(gè)特定頻率的方波(50%占空比)。持續(xù)時(shí)間可以設(shè)定,否則波形會(huì)一直產(chǎn)生直到調(diào)用noTone(
52、)函數(shù)。該引腳可以連接壓電蜂鳴器或其他喇叭播放聲音。 在同一時(shí)刻只能產(chǎn)生一個(gè)聲音。如果一個(gè)引腳已經(jīng)在播放音樂(lè),那調(diào)用tone()將不會(huì)有任何效果。如果音樂(lè)在同一個(gè)引腳上播放,它會(huì)自動(dòng)調(diào)整頻率。 使用tone()函數(shù)會(huì)與3腳和11腳的PWM產(chǎn)生干擾(Mega板除外)。 注意:如果你要在多個(gè)引腳上產(chǎn)生不同的音調(diào),你要在對(duì)下一個(gè)引腳使用tone()函數(shù)前對(duì)此引腳調(diào)用noTone()函數(shù)。
53、60; tone(pin, frequency) tone(pin, frequency, duration) pin:要產(chǎn)生聲音的引腳 frequency: 產(chǎn)生聲音的頻率,單位Hz,類(lèi)型unsigned int
54、0; duration:聲音持續(xù)的時(shí)間,單位毫秒(可選),類(lèi)型unsigned long noTone() 停止由tone()產(chǎn)生的方波。如果沒(méi)有使用tone()將不會(huì)有效果。 noTone(pin) pin: 所要停止產(chǎn)生聲音的引腳
55、0; shiftOut() 將一個(gè)數(shù)據(jù)的一個(gè)字節(jié)一位一位的移出。從最高有效位(最左邊)或最低有效位(最右邊)開(kāi)始。依次向數(shù)據(jù)腳寫(xiě)入每一位,之后時(shí)鐘腳被拉高或拉低,指示剛才的數(shù)據(jù)有效。 注意:如果你所連接的設(shè)備時(shí)鐘類(lèi)型為上升沿,你要確定在調(diào)用shiftOut()前時(shí)鐘腳為低電平,如調(diào)用digitalWrite(clockPin, LOW)。 推薦
56、精選 注意:這是一個(gè)軟件實(shí)現(xiàn);Arduino提供了一個(gè)硬件實(shí)現(xiàn)的SPI庫(kù),它速度更快但只在特定腳有效。 shiftOut(dataPin, clockPin, bitOrder, value) dataPin:輸出每一位數(shù)據(jù)的引腳(int) clockPin:時(shí)鐘腳,當(dāng)dataPin有值時(shí)此引腳電平變
57、化(int) bitOrder:輸出位的順序,最高位優(yōu)先或最低位優(yōu)先 value: 要移位輸出的數(shù)據(jù)(byte) dataPin和clockPin要用pinMode()配置為輸出。 shiftOut目前只能輸出1個(gè)字節(jié)(8位),所以如果輸出值大于255需要分兩步。 /最高有效
58、位優(yōu)先串行輸出 int data= 500; /移位輸出高字節(jié) shiftOut(dataPin, clock, MSBFIRST, (data >> 8); /移位輸出低字節(jié) &
59、#160; shiftOut(data, clock, MSBFIRST, data); /最低有效位優(yōu)先串行輸出 data = 500; /移位輸出低字節(jié) shiftOut(dataPin, clock, LSBFIRST,&
60、#160;data); /移位輸出高字節(jié) shiftOut(dataPin, clock, LSBFIRST, (data >> 8); 例子: 相應(yīng)電路,查看tutorial on controlling
61、0;a 74HC595 shift register /引腳連接到74HC595的ST_CP int latchPin = 8; /引腳連接到74HC595的SH_CP int clockPin = 12;
62、 / /引腳連接到74HC595的DS int dataPin = 11; void setup() /設(shè)置引腳為輸出 pinMode(latchPin,
63、;OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); void loop()
64、0; /向上計(jì)數(shù)程序 for(J = 0; J <256; J + +) /傳輸數(shù)據(jù)的時(shí)候?qū)atchPin拉低
65、; digitalWrite(latchpin, LOW); shiftOut(dataPin,clockPin,LSBFIRST,J);
66、/之后將latchPin拉高以告訴芯片 /它不需要再接受信息了 digitalWrite(latchpin, HIGH); 推薦精選
67、0; delay(1000); shiftIn() 將一個(gè)數(shù)據(jù)的一個(gè)字節(jié)一位一位的移入。從最高有效位(最左邊)或最低有效位(最右邊)開(kāi)始。對(duì)于每個(gè)位,先拉高時(shí)鐘電平,再?gòu)臄?shù)據(jù)傳輸線(xiàn)中讀取一位,再將時(shí)鐘線(xiàn)拉低。&
68、#160; 注意:這是一個(gè)軟件實(shí)現(xiàn);Arduino提供了一個(gè)硬件實(shí)現(xiàn)的SPI庫(kù),它速度更快但只在特定腳有效。 shiftIn(dataPin,clockPin,bitOrder) dataPin:輸出每一位數(shù)據(jù)的引腳(int) clockPin:時(shí)鐘腳,當(dāng)dataPin有值時(shí)此引腳電平變化(int)
69、0; bitOrder:輸出位的順序,最高位優(yōu)先或最低位優(yōu)先 pulseIn() 讀取一個(gè)引腳的脈沖(HIGH或LOW)。例如,如果value是HIGH,pulseIn()會(huì)等待引腳變?yōu)镠IGH,開(kāi)始計(jì)時(shí),再等待引腳變?yōu)長(zhǎng)OW并停止計(jì)時(shí)。返回脈沖的長(zhǎng)度,單位微秒。如果在指定的時(shí)間內(nèi)無(wú)脈沖函數(shù)返回。 此函數(shù)的
70、計(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)。 v
71、alue:要讀取的脈沖類(lèi)型,HIGH或LOW(int)。 timeout (可選):指定脈沖計(jì)數(shù)的等待時(shí)間,單位為微秒,默認(rèn)值是1秒(unsigned long) 返回:脈沖長(zhǎng)度(微秒),如果等待超時(shí)返回0(unsigned long) 例子: int pin
72、0;= 7; unsigned long duration; void setup() pinMode(pin, INPUT);
73、0; void loop() duration = pulseIn(pin, HIGH); 時(shí)間 millis()
74、; 返回Arduino開(kāi)發(fā)板從運(yùn)行當(dāng)前程序開(kāi)始的毫秒數(shù)。這個(gè)數(shù)字將在約50天后溢出(歸零) 推薦精選 例子: unsigned long time; void setup() Serial.begi
75、n(9600); void loop() serial.print("Time:"); time = millis();
76、160; /打印從程序開(kāi)始到現(xiàn)在的時(shí)間 serial.println(time); /等待一秒鐘,以免發(fā)送大量的數(shù)據(jù) delay(1000);
77、; 參數(shù) millis 是一個(gè)無(wú)符號(hào)長(zhǎng)整數(shù),試圖和其他數(shù)據(jù)類(lèi)型(如整型數(shù))做數(shù)學(xué)運(yùn)算可能會(huì)產(chǎn)生錯(cuò)誤 micros() 返回 Arduino 開(kāi)發(fā)板從運(yùn)行當(dāng)前程序開(kāi)始的微秒數(shù)。這個(gè)數(shù)字將在約70分鐘后溢出(歸零)。在 16MHz 的 Arduino 開(kāi)發(fā)板上(比如
78、 Duemilanove 和 Nano),這個(gè)函數(shù)的分辨率為四微秒(即返回值總是四的倍數(shù))。在 8MHz 的 Arduino 開(kāi)發(fā)板上(比如 LilyPad),這個(gè)函數(shù)的分辨率為八微秒。 注意 :每毫秒是1,000微秒,每秒是1,000,000微秒。 例子: unsigned long
79、160;time; void setup() Serial.begin(9600); void loop() Serial.prin
80、t(“Time:”); time = micros(); /打印從程序開(kāi)始的時(shí)間 Serial.println(time);
81、60; /等待一秒鐘,以免發(fā)送大量的數(shù)據(jù) delay(1000); delay() 使程序暫停設(shè)定的時(shí)間(單位毫秒)。(一秒等于1000毫秒) 參數(shù):ms:暫停的毫秒
82、數(shù)(unsigned long) 例子: ledPin = 13 / / LED連接到數(shù)字13腳 void setup() pin
83、Mode(ledPin, OUTPUT); / 設(shè)置引腳為輸出 推薦精選 void loop() digitalWrite(ledPin, HIGH);
84、0; / 點(diǎn)亮LED delay(1000); / 等待1秒 digitalWrite(ledPin,
85、60;LOW); / 滅掉LED delay(1000); / 等待一秒
86、; 雖然創(chuàng)建一個(gè)使用delay()的閃爍LED很簡(jiǎn)單,并且許多例子將很短的delay用于消除開(kāi)關(guān)抖動(dòng),delay()確實(shí)擁有很多顯著的缺點(diǎn)。在delay函數(shù)使用的過(guò)程中,讀取傳感器值、計(jì)算、引腳操作均無(wú)法執(zhí)行,因此,它所帶來(lái)的后果就是使其他大多數(shù)活動(dòng)暫停。其他操作定時(shí)的方法請(qǐng)參加millis()函數(shù)和它下面的例子。大多數(shù)熟練的程序員通常避免超過(guò)10毫秒的delay(),除非arduino程序非常簡(jiǎn)單。 但某些操作在delay()執(zhí)行時(shí)任然能夠運(yùn)行,因?yàn)閐elay函數(shù)不會(huì)使中斷失效。通信端口RX接收到得數(shù)據(jù)會(huì)被記錄,
87、PWM(analogWrite)值和引腳狀態(tài)會(huì)保持,中斷也會(huì)按設(shè)定的執(zhí)行。 delayMicroseconds() 使程序暫停指定的一段時(shí)間(單位微秒)。一毫秒等于一千微秒,一秒等于1000000微秒。 目前,能夠產(chǎn)生的最大的延時(shí)準(zhǔn)確值是16383。這可能會(huì)在未來(lái)的Arduino版本中改變。對(duì)于超過(guò)幾千微秒的延遲,你應(yīng)該使用delay()代替。 例子:&
88、#160; int outPin = 8; / digital pin 8 void setup()
89、160; pinMode(outPin,OUTPUT); /設(shè)置為輸出的數(shù)字管腳 void loop() digitalWrite(outPin,HIGH);
90、0;/設(shè)置引腳高電平 delayMicroseconds(50); / 暫停50微秒 digitalWrite(outPin, LOW); / 設(shè)置引腳低電平
91、 delayMicroseconds(50); / 暫停50微秒 數(shù)學(xué)運(yùn)算 min() max()
92、; abs() constrain(x,a,b)【將一個(gè)數(shù)約束在一個(gè)范圍內(nèi)】 map(value, fromLow, fromHigh, toLow, toHigh) value:需要映射的值 fromLow:當(dāng)前范圍值的下限
93、0; fromHigh:當(dāng)前范圍值的上限 toLow:目標(biāo)范圍值的下限 toHigh:目標(biāo)范圍值的上限 推薦精選 例子: void setup()
94、void loop() int val = analogRead(0); val = map(val, 0, 1023, 0, 255);
95、60; analogWrite(9, val); 數(shù)學(xué)實(shí)現(xiàn) long map(long x, long in_min, long in_max, long out_min, long out_max)
96、0; return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; pow(b
97、ase, exponent) sqrt(x) 三角函數(shù) sin() cos() tan() 隨機(jī)數(shù) randomSeed()【隨機(jī)數(shù)種子
98、】 random()【random(max),random(min, max)】 位操作 lowByte() 取一個(gè)變量(例如一個(gè)字)的低位(最右邊)字節(jié)。 highByte() 提取一個(gè)字節(jié)的高位(最左邊的),或一個(gè)更長(zhǎng)的字節(jié)的第二低位。 &
99、#160; bitRead() 讀取一個(gè)數(shù)的位。bitRead(x, n) X:想要被讀取的數(shù) N:被讀取的位,0是最重要(最右邊)的位 該位的值(0或1) bitWrite() 在位上寫(xiě)入數(shù)字變量 bitWrite(x, n, b) X:要寫(xiě)入的數(shù)值變量 N:要寫(xiě)入的數(shù)值變量的位,從0開(kāi)
100、始是最低(最右邊)的位 B:寫(xiě)入位的數(shù)值(0或1) bitSet() 為一個(gè)數(shù)字變量設(shè)置一個(gè)位 bitSet(x, n) X:想要設(shè)置的數(shù)字變量 N:想要設(shè)置的位,0是最重要(最右邊)的位 bitClear() 清除一個(gè)數(shù)值型數(shù)值的指定位(將此位設(shè)置成 0)&
101、#160;bitClear(x, n) X:指定要清除位的數(shù)值 N:指定要清除位的位置,從0開(kāi)始,0 表示最右端位 bit() 計(jì)算指定位的值(0位是1,1位是2,2位4,以此類(lèi)推) bit(n) 需要計(jì)算的位 設(shè)置中斷函數(shù) attachInterrupt()
102、 attachInterrupt(interrupt, function, mode) 當(dāng)發(fā)生外部中斷時(shí),調(diào)用一個(gè)指定函數(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)
103、160; interrupt:中斷引腳數(shù) function:中斷發(fā)生時(shí)調(diào)用的函數(shù),此函數(shù)必須不帶參數(shù)和不返回任何值。該函數(shù)有時(shí)被稱(chēng)為中斷服務(wù)程序。 mode:定義何時(shí)發(fā)生中斷以下四個(gè)contstants預(yù)定有效值: LOW 當(dāng)引腳為低電平時(shí),觸發(fā)中斷
104、 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)該聲明一個(gè)變量來(lái)在未發(fā)生中斷時(shí)儲(chǔ)存變量。 &
105、#160; 在單片機(jī)自動(dòng)化程序中當(dāng)突發(fā)事件發(fā)生時(shí),中斷是非常有用的,它可以幫助解決時(shí)序問(wèn)題。一個(gè)使用中斷的任務(wù)可能會(huì)讀一個(gè)旋轉(zhuǎn)編碼器,監(jiān)視用戶(hù)的輸入。 如果你想以確保程序始終抓住一個(gè)旋轉(zhuǎn)編碼器的脈沖,從來(lái)不缺少一個(gè)脈沖,它將使寫(xiě)一個(gè)程序做任何事情都要非常棘手,因?yàn)樵撚?jì)劃將需要不斷輪詢(xún)的傳感器線(xiàn)編碼器,為了趕上脈沖發(fā)生時(shí)。其他傳感器也是如此,如試圖讀取一個(gè)聲音傳感器正試圖趕上一按,或紅外線(xiàn)槽傳感器(照片滅弧室),試圖抓住一個(gè)硬幣下降。在所有這些情況下,使用一個(gè)中斷可以釋放的微控制器
106、來(lái)完成其他一些工作。 例子: int pin = 13; volatile int state = LOW; void setup(
107、) pinMode(pin, OUTPUT); attachInterrupt(0, blink, CHANGE); v
108、oid loop() digitalWrite(pin, state); void blink()
109、0; state = !state; detachInterrupt() 關(guān)閉給定的中斷 detachInterrupt(interrupt) interru
110、pt: 中斷禁用的數(shù)(0或者1) 推薦精選 開(kāi)關(guān)中斷 interrupts() 重新啟用中斷(使用noInterrupts()命令后將被禁用)。中斷允許一些重要任務(wù)在后臺(tái)運(yùn)行,默認(rèn)狀態(tài)是啟用的。禁用中斷后一些函數(shù)可能無(wú)法工作,并傳入信息可能會(huì)被忽略。中斷會(huì)稍微打亂代碼的時(shí)間,但是在關(guān)鍵部分可以禁用中斷 noIn
111、terrupts() 禁止中斷(重新使能中斷interrupts())。中斷允許在后臺(tái)運(yùn)行一些重要任務(wù),默認(rèn)使能中斷。禁止中斷時(shí)部分函數(shù)會(huì)無(wú)法工作,通信中接收到的信息也可能會(huì)丟失。 中斷會(huì)稍影響計(jì)時(shí)代碼,在某些特定的代碼中也會(huì)失效 例子: void setup()
112、; void loop() noInterrupts(); /關(guān)鍵的、時(shí)間敏感的代碼放在這 interrupts();
113、 /其他代碼放在這 通訊 Serial 用于Arduino控制板和一臺(tái)計(jì)算機(jī)或其他設(shè)備之間的通信。所有的Arduino控制板有至少一個(gè)串口(又稱(chēng)作為UART或USART)。它通過(guò)0(RX)和1(TX)數(shù)字引腳經(jīng)過(guò)串口轉(zhuǎn)換芯片連接計(jì)算機(jī)USB端口與計(jì)算機(jī)進(jìn)行通信。因此,如果你使用這些功能的同時(shí)你不能使用引腳0和1作為輸入或輸出。 您可以使用Arduino ID
114、E內(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è)人電腦通信,你需要一個(gè)額外的USB轉(zhuǎn)串口適配器,因?yàn)檫@三個(gè)引腳沒(méi)有連接到Mega上的USB轉(zhuǎn)串口適配器。若要用它們來(lái)與外部的TTL串口設(shè)備進(jìn)行通信,將TX引腳連接到您的設(shè)備的RX引腳,將RX引腳連
115、接到您的設(shè)備的TX引腳,將GND連接到您的設(shè)備的GND。(不要直接將這些引腳直接連接到RS232串口;他們的工作電壓在+/- 12V,可能會(huì)損壞您的Arduino控制板。) Arduino Leonardo板使用Serial 1通過(guò)0(RX)和1(TX)與viaRS-232通信,。Serial預(yù)留給使用Mouse and Keyboard libarariies的USB CDC通信 。更多信息,請(qǐng)參考Leonardo 開(kāi)始使用頁(yè)和硬件頁(yè)。 函數(shù):
116、160; if (Serial) 表示指定的串口是否準(zhǔn)備好 在Leonardo上,if(Serial)表示不論有無(wú)USB CDC,串行連接都是開(kāi)放的。對(duì)于所有其他的情況,包括Leonardo上的if(Serial1),將一直返回true。 這來(lái)自于 Arduino 1
117、.0.1 版本的介紹 推薦精選 對(duì)于所有的arduino板: if (Serial) Arduino Leonardo 特有: if (Serial1)
118、 Arduino Mega 特有: if (Serial1) if (Serial2)
119、 if (Serial3) available() 獲取從串口讀取有效的字節(jié)數(shù)(字符)。這是已經(jīng)傳輸?shù)?,并存?chǔ)在串行接收緩沖區(qū)(能夠存儲(chǔ)64個(gè)字節(jié))的數(shù)據(jù)。 available()繼承了 Stream類(lèi) &
120、#160; Serial.available() 僅適用于Arduino Mega : Serial1.available() Serial2.available() &
121、#160; Serial3.available() 例子: incomingByte = 0; /傳入的串行數(shù)據(jù)
122、0;void setup() Serial.begin(9600); / 打開(kāi)串行端口,設(shè)置傳輸波特率為9600 bps
123、; void loop() /只有當(dāng)你接收到數(shù)據(jù)時(shí)才會(huì)發(fā)送數(shù)據(jù),: if (Serial.available() > 0)
124、60; /讀取傳入的字節(jié): incomingByte = Serial.read();
125、60; /顯示你得到的數(shù)據(jù): Serial.print("I received: "); Seri
126、al.println(incomingByte, DEC); begin()
127、 將串行數(shù)據(jù)傳輸速率設(shè)置為位/秒(波特)。與計(jì)算機(jī)進(jìn)行通信時(shí),可以使用這些波特率:300,1200,2400,4800,9600,14400,19200,28800,38400,57600或115200。當(dāng)然,您也可以指定其他波特率 - 例如,引腳0和1和一個(gè)元件進(jìn)行通信,它需要一個(gè)特定的波特率 Serial.begin(speed) 僅適用于Arduino
128、;Mega : Serial1.begin(speed) Serial2.begin(speed) Serial3.begin(speed) speed: 位/秒 (波特) - long end() 停用串行通信,使R
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 44591-2024農(nóng)業(yè)社會(huì)化服務(wù)社區(qū)生鮮店服務(wù)規(guī)范
- 2024年二手車(chē)買(mǎi)賣(mài)合同協(xié)議
- 房產(chǎn)證購(gòu)房合同格式
- 新式勞務(wù)合同范例模板
- 2024裝修工程結(jié)算協(xié)議
- 出租車(chē)公司車(chē)輛轉(zhuǎn)讓合同樣本
- 股權(quán)激勵(lì)合同范本
- 技術(shù)開(kāi)發(fā)保密合同樣本
- 小區(qū)環(huán)境整治施工合同
- 就業(yè)安置協(xié)議書(shū)撰寫(xiě)心得
- JGT366-2012 外墻保溫用錨栓
- 網(wǎng)球運(yùn)動(dòng)損傷與預(yù)防
- 病理性咬指甲的心理動(dòng)力學(xué)分析
- 江蘇省揚(yáng)州市寶應(yīng)縣2023-2024學(xué)年八年級(jí)上學(xué)期期中英語(yǔ)試題(含聽(tīng)力)( 含答案解析 )
- 火龍罐綜合灸療法
- 2022年GOLD慢阻肺診治指南
- 登金陵鳳凰臺(tái)-李白
- 第4章-動(dòng)車(chē)組列車(chē)餐飲服務(wù)操作技能《高速鐵路列車(chē)餐飲服務(wù)》
- 安徽省宿州市碭山縣2023-2024學(xué)年九年級(jí)上學(xué)期12月質(zhì)量調(diào)研語(yǔ)文試題(含答案)
- 高教社新國(guó)規(guī)中職教材《英語(yǔ)1基礎(chǔ)模塊》英語(yǔ)1-U1-220905改
- 大學(xué)生婚戀觀調(diào)查問(wèn)卷
評(píng)論
0/150
提交評(píng)論