Arduino語法手冊_第1頁
Arduino語法手冊_第2頁
Arduino語法手冊_第3頁
Arduino語法手冊_第4頁
Arduino語法手冊_第5頁
免費預覽已結束,剩余14頁可下載查看

下載本文檔

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

文檔簡介

1、#Arduino 語法setup()初始化函數(shù)loop()循環(huán)體函數(shù)控制語句類似于C/ififelseakcontinueforswitchreturngotocasewhiledo. whilebre擴展語法類似于C/;(分號)釋)#define(花括號)#include(單行注釋)/* */ (多行注算數(shù)運算符類似于C/=(賦值運算符)(模)+ (加)-(減)* (乘)/ (除)%比較運算符類似于C/=(等于)!=(不等于)(小于)(大于等于)>(大于)<=(小于等于)>=布爾運算符類似于C/&& (與)| (或)!(非)指針運算符類似于C/*取消引用運算

2、符&引用運算符位運算符類似于C& (bitwise and)| (bitwise or)人(bitwise xor)(bitwise not)<< (bitshift left)>> (bitshift right)復合運算符類似于C+ (increment)- (decrement)+= (compound addition)-= (compoundsubtraction)*= (compound multiplication)/= (compound division)&=(compound bitwise and)|= (compound

3、bitwise or)常量constants 預定義的常量BOOL true false引腳電壓定義,HIGH和LOW(當讀取(read )或寫入(write )數(shù)字引腳時只有兩個可能的 值:HIGH和LOW】HIGH (參考引腳)的含義取決于引腳(pin )的設置,引腳定義為INPUT或OUTPUT寸含義有所不 同。當一個引腳通過 pinMode被設置為INPUT并通過digitalRead 讀?。╮ead)時。如果當前引腳 的電壓大于等于3V,微控制器將會返回為 HIGH 引腳也可以通過pinMode被設置為INPUT,并通過 digitalWrite 設置為HIGH輸入引腳的值將被一個內(nèi)

4、在的20K上拉電阻 控制 在HIGH上,除非一個外部電路將其拉低到 LOW 當一個引腳通過 pinMode被設置為OUTPUT并digitalWrite設置為HIGH時,引腳的電壓應在 5V。在這種狀態(tài)下,它可以輸出電流。例如,點亮一個通過一串電阻接地或設置為LOW勺OUTPU囑性引腳的LED。LOW勺含義同樣取決于引腳設置,引腳定義為INPUT或OUTPUT寸含義有所不同。當一個引腳通過pinMode配置為INPUT,通過digitalRead 設置為讀?。╮ead)時,如果當前引腳的電壓小于等于 2V,微控制器將返回為 LOW 當一個引腳通過 pinMode配置為OUTPUT并通過digi

5、talWrite 設置為 LOW寸,引腳為0V。在這種狀態(tài)下,它可以 倒灌電流。例如,點亮一個通過串聯(lián)電阻連接到+5V,或到另一個引腳配置為 OUTPUT HIGH的的LED。數(shù)字引腳(Digital pins )定義,INPUT和OUTPUT數(shù)字引腳當作 INPUT或OUTPUTS可以。 用pinMode()方法使一個數(shù)字引腳從INPUT到OUTPU焚化】Arduino (Atmega)引腳通過pinMode()配置為 輸入(INPUT) 即是將其配置在一個高阻抗的狀 態(tài)。配置為INPUT的引腳可以理解為引腳取樣時對電路有極小的需求,即等效于在引腳前串聯(lián)一個 100兆歐姆(Megohms)的

6、電阻。這使得它們非常利于讀取傳感器,而不是為LED供電。引腳通過pinMode()配置為輸出(OUTPUT即是將其配置在一個低阻抗的狀態(tài)。這意味著它們可以為電路提供充足的電流。Atmega引腳可以向其他設備/電路提供(提供正電流positive current )或倒灌(提供負電流 negative current )達40毫安(mA的電流。這使得它們 利于給LED供電,而不是讀取彳感器。輸出( OUTPUT引腳被短路的接地或 5V電路上會受到損壞甚 至燒毀。Atmega引腳在為繼電器或電機供電時, 由于電流不足,將需要一些外接電路來實現(xiàn)供電。整數(shù)常量進制例子格式備注10 (十進制)123無2

7、 (二進制)B1111011前綴'B'只適用于8位的值(0到255)字符0-1有效8 (八進制)0173 前綴“0”字符0-7有效16 (十六進制) 0x7B 前綴"0x” 字符0-9, A-F, A-F有效小數(shù)是十進制數(shù)。這是數(shù)學常識。如果一個數(shù)沒有特定的前綴,則默認為十進制。二進制以2為基底,只有數(shù)字 0和1是有效的。'u' or 'U'指定一個常量為無符號型。(只能表示正數(shù)和0)例如:33uT or 'L'指定一個常量為長整型。(表示數(shù)的范圍更廣)例如:100000L'ul' or 'UL&

8、#39;這個你懂的,就是上面兩種類型,稱作無符號長整型。例如:32767ul浮點常量浮點數(shù)被轉換為被轉換為10.0102.34E52.34 * 10A5 23400067E-12 67.0 * 10A- 120.000000000067數(shù)據(jù)類型類似于Cvoidbooleancharunsignedcharbyteintunsigned intwordlongunsignedlongfloatdoublestring -char arrayString - objectarray-(數(shù)組)數(shù)據(jù)類型轉換類似于Cchar ()byte ()int ()word()long ()float()word

9、()把一個值轉換為 word數(shù)據(jù)類型的值,或由兩個字節(jié)創(chuàng)建一個字符。 word(x) word(h, l)參數(shù)X:任何類型的值H:高階(最左邊)字節(jié)L:低序(最右邊)字節(jié)修飾符類似于Cstaticvolatileconst輔助工具sizeof ()數(shù)字I/OpinMode()將指定的引腳配置成輸出或輸入【pinMode(pin, mode) pin:要設置模式的引腳mode:INPUT或OUTPUT例子:ledPin = 13 / LED連接到數(shù)字腳13 void setup() pinMode (ledPin , OUTPUT; 設置數(shù)字腳為輸出 void loop() digitalWri

10、te (ledPin , HIGH) ; / 點亮 LEDdelay( 1000);/ 等待一秒digitalWrite(ledPin, LOW); / 滅掉 LED delay( 1000);/ 等待第二個digitalWrite()給一個數(shù)字引腳寫入 HIGH或者LOW如果一個引腳已經(jīng)使用 pinMode()配置為OUTPUTS,其電壓將被設置為相應的值,HIGH為5V(3.3V 控制板上為 3.3V) , LOW 0Vo如果引腳配置為INPUT模式,使用digitalWrite() 寫入HIGH值,將使內(nèi)部20K上拉電阻(詳見 數(shù)字引腳教程)。寫入 LOW將會禁用上拉。上拉電阻可以點亮一

11、個 LED讓其微微亮,如果LED工作, 但是亮度很低,可能是因為這個原因引起的。 補救的辦法是 使用pinMode()函數(shù)設置為輸出引腳。注意:數(shù)字13號引腳難以作為數(shù)字輸入使用,因為大部分的控制板上使用了一顆LED與一個電阻連接到他。如果啟動了內(nèi)部的 20K上拉電阻,他的電壓將在 1.7V左右,而不是正常的 5V,因為板 載LED串聯(lián)的電阻把他使他降了下來, 這意味著他返回的值總是 LOW如果必須使用數(shù)字13號引腳的 輸入模式,需要使用外部上拉下拉電阻。digitalRead()digitalRead(PIN)【pin :你想讀取的弓I腳號(int ),返回 HIGH或LOW例子: ledP

12、in = 13 / LED連接到 13 腳 int inPin = 7;/按鈕連接到數(shù)字引腳 7int val = 0;/定義變量存以儲讀值void setup() pinMode(ledPin, OUTPUT); / 將 13 腳設置為輸出pinMode(inPin, INPUT); / 將 7 腳設置為輸入 void loop() val = digitalRead(inPin);/ 讀取輸入腳digitalWrite(ledPin, val); / 將 LED值設置為按鈕的值 模I/OanalogReference() analogReference(type) 配置用于模擬輸入的基準電

13、壓(即輸入范圍的最大值)。選項有 : DEFAULT默認5V (Arduino板為5V)或3.3伏特(Arduino 板為3.3V)為基準電壓。INTERNAL在ATmega168和ATmega328上以1.1V為基準電壓,以及在 ATmega8上以2.56V為基 準電壓(Arduino Mega無此選項)INTERNAL1V1以1.1V為基準電壓(此選項僅針對Arduino MegaINTERNAL2V56以2.56V為基準電壓(此選項僅針對 Arduino Mega)EXTERNAL以AREF弓I腳(0至5V)的電壓作為基準電壓。type : 使用哪種參考類型 (DEFAULT, INTE

14、RNAL, INTERNAL1V1, INTERNAL2V56,或 者 EXTERNAL改變基準電壓后,之前從anal?ogRead()讀取的數(shù)據(jù)可能不準確。不要在AREF引腳上使用使用任何小于 0V或超過5V的外部電壓。如果你使用AREF弓I腳上的電壓 作為基準電壓,你在調(diào)用analogRead()前必須設置參考類型為 EXTERNAL否則,你將會削短有效的基準電壓(內(nèi)部產(chǎn)生)和 AREFIW,這可能會損壞您 Arduino板上的單片機。另外,您可以在外部基準電壓和AREF引腳之間連接一個5K電阻,使你可以在外部和內(nèi)部基準電壓之間切換。請注意,總阻值將會發(fā)生改變,因為AREF引腳內(nèi)部有一個3

15、2K電阻。這兩個電阻都有分壓作用。所以,例如,如果輸入2.5V的電壓,最終在在AREF弓I腳上的電壓將為 2.5 * 32 / (32 + 5) =2.2V。analogRead()從指定的模擬引腳讀取數(shù)據(jù)值。Arduino板包含一個6通道(Mini和Nano有8個通道,Mega有16個通道),10位模擬數(shù)字轉換器。這意味著它將0至5伏特之間的輸入電壓映射到 0至1023之間的整數(shù)值。這將產(chǎn)生讀數(shù)之間的關系:5伏特/ 1024單位,或0.0049伏特(4.9 mV每單位。輸入范圍和精度可以使用analogReference()改變。它需要大約100微秒(0.0001 )來讀取模擬輸入,所以最大

16、的閱讀速度是每秒10000次。analogRead (PIN)弓I腳:從輸入引腳(大部分板子從0到5, Mini和Nano從0至U 7, Mega從0到15)讀取數(shù)值,返回從0到1023的整數(shù)值例子:int analogPin = 3;/電位器(中間的引腳)連接到模擬輸入引腳3/另外兩個引腳分別接地和 +5 Vint val = 0;/定義變量來存儲讀取的數(shù)值void setup() serial.begin (9600) ; / 設置波特率(9600)void loop() val = analogRead (analogPin ) ; / 從輸入引腳讀取數(shù)值 serial.println

17、(val ) ; / 顯示讀取的數(shù)值analogWrite() - PWManalogWrite (pin,value )從一個引腳輸出模擬值(PWM o可用于讓LED以不同的亮度點亮或驅動電機以不同的速度旋轉。analogWrite()輸出結束后,該引腳將產(chǎn)生一個穩(wěn)定的特殊占空比方波,直到下次調(diào)用analogWrite()(或在同一引腳調(diào)用digitalRead() 或digitalWrite() )。PWMB號的頻率大約是 490赫茲。在大多數(shù)arduino 板(ATmega168 ATmega328 ,只有引腳 3, 5, 6, 9, 10和11可以實現(xiàn)該 功能。在aduino Mega

18、上,弓I腳2到13可以實現(xiàn)該功能。老的 Arduino板(ATmega8的只有引腳9、 10、11可以使用analogWrite()。在使用analogWrite()前,你不需要調(diào)用 pinMode()來設置引腳為 輸出引腳。analogWrite函數(shù)與模擬引腳、analogRead函數(shù)沒有直接關系。pin :用于輸入數(shù)值的引腳。value :占空比:0 (完全關閉)至I 255 (完全打開)之間。例子:int ledPin = 9;/ LED連接到數(shù)字引腳 9int analogPin = 3;/電位器連接到模擬引腳 3int val = 0;/定義變量存以儲讀值void setup() p

19、inMode (ledPin,OUTPUT) ;/設置引腳為輸出引腳 void loop() val = analogRead (analogPin ) ;/ 從輸入引腳讀取數(shù)值analogWrite (ledPin , val / 4) ;/ 以 val / 4 的數(shù)值點亮 LED(因為 analogRead 讀取的數(shù)值從0到1023,而analogWrite 輸出的數(shù)值從0到255)高級I/Otone()在一個引腳上產(chǎn)生一個特定頻率的方波(50%占空比)。持續(xù)時間可以設定,否則波形會一直產(chǎn)生直到調(diào)用noTone()函數(shù)。該引腳可以連接壓電蜂鳴器或其他喇叭播放聲音。在同一時刻只能產(chǎn)生一個聲音

20、。如果一個引腳已經(jīng)在播放音樂,那調(diào)用 tone()將不會有任何效 果。如果音樂在同一個引腳上播放,它會自動調(diào)整頻率。使用tone()函數(shù)會與3腳和11腳的PWM生干擾(Mega板除外)。注意:如果你要在多個引腳上產(chǎn)生不同的音調(diào),你要在對下一個引腳使用tone()函數(shù)前對此引腳調(diào)用noTone()函數(shù)。tone(pin, frequency)tone(pin, frequency, duration)pin :要產(chǎn)生聲音的引腳frequency: 產(chǎn)生聲音的頻率,單位 Hz, 類型 unsigned intduration :聲音持續(xù)的時間,單位毫秒(可選),類型 unsigned longno

21、Tone()停止由tone()產(chǎn)生的方波。如果沒有使用tone()將不會有效果。noTone(pin)pin:所要停止產(chǎn)生聲音的引腳shiftOut()將一個數(shù)據(jù)的一個字節(jié)一位一位的移出。從最高有效位(最左邊)或最低有效位(最右邊)開始。依次向數(shù)據(jù)腳寫入每一位,之后時鐘腳被拉高或拉低,指示剛才的數(shù)據(jù)有效。注意:如果你所連接的設備時鐘類型為上升沿,你要確定在調(diào)用shiftOut()前時鐘腳為低電平,如調(diào)用 digitalWrite(clockPin, LOW)注意:這是一個軟件實現(xiàn);Arduino提供了一個硬件實現(xiàn)的SPI庫,它速度更快但只在特定腳有效。shiftOut(dataPin, clo

22、ckPin, bitOrder, value) dataPin :輸出每一位數(shù)據(jù)的引腳 (int )clockPin :時鐘腳,當dataPin有值時此引腳電平變化(int )bitOrder :輸出位的順序,最高位優(yōu)先或最低位優(yōu)先 value: 要移位輸出的數(shù)據(jù)(byte)dataPin和clockPin 要用pinMode()配置為輸出。shiftOut 目前只能輸出 1個字節(jié)(8位),所以如果輸出值大于 255需要分兩步。/最高有效位優(yōu)先串行輸出 int data= 500;/移位輸出高字節(jié) shiftOut(dataPin, clock, MSBFIRST, (data >>

23、; 8); /移位輸出低字節(jié) shiftOut(data, clock, MSBFIRST, data);/最低有效位優(yōu)先串行輸出 data = 500;/移位輸出低字節(jié)shiftOut(dataPin,clock,LSBFIRST, data);/移位輸出高字節(jié)shiftOut(dataPin,clock,LSBFIRST, (data >> 8);例子: 相應電路,查看 tutorial on controlling a 74HC595 shift register /引腳連接到74HC595的ST_CP int latchPin = 8;/引腳連接到74HC595的SH_CP

24、 int clockPin = 12;/ /引腳連接到74HC595的DS int dataPin = 11; void setup() /設置引腳為輸出pinMode(latchPin,OUTPUT);pinMode(clockPin,OUTPUT);pinMode(dataPin, OUTPUT); void loop() /向上計數(shù)程序 for (J = 0; J <256; J + +)/傳輸數(shù)據(jù)的時候將latchPin 拉低digitalWrite(latchpin, LOW);shiftOut(dataPin,clockPin,LSBFIRST,J);/之后將latchPin

25、 拉高以告訴芯片 /它不需要再接受信息了digitalWrite(latchpin, HIGH); delay( 1000); shiftIn()將一個數(shù)據(jù)的一個字節(jié)一位一位的移入。從最高有效位(最左邊)或最低有效位(最右邊)開始對于每個位,先拉高時鐘電平,再從數(shù)據(jù)傳輸線中讀取一位,再將時鐘線拉低。注意:這是一個軟件實現(xiàn);Arduino提供了一個硬件實現(xiàn)的SPI庫,它速度更快但只在特定腳有效。shiftIn(dataPin,clockPin,bitOrder)dataPin :輸出每一位數(shù)據(jù)的引腳 (int )clockPin :時鐘腳,當dataPin有值時此引腳電平變化(int )bitO

26、rder :輸出位的順序,最高位優(yōu)先或最低位優(yōu)先pulseIn()讀取一個引腳的脈沖(HIGH或LOW。例如,如果value是HIGH pulseIn()會等待引腳變?yōu)镠IGH 開始計時,再等待引腳變?yōu)長OW并停止計時。返回脈沖的長度,單位微秒。如果在指定的時間內(nèi)無脈沖函數(shù)返回。此函數(shù)的計時功能由經(jīng)驗決定,長時間的脈沖計時可能會出錯。計時范圍從10微秒至3分鐘。(1 秒= 1000 毫秒=1000000 微秒)pulseIn(pin,value)pulseIn(pin,value,timeout)pin:你要進行脈沖計時的引腳號(int )。value:要讀取的脈沖類型,HIGH或LOW; i

27、nt )。timeout (可選):指定脈沖計數(shù)的等待時間,單位為微秒,默認值是1秒(unsigned long )返回:脈沖長度(微秒),如果等待超時返回0 (unsigned long)例子:int pin = 7;unsigned long duration;void setup() pinMode(pin, INPUT);void loop() duration = pulseIn(pin, HIGH);時間millis()返回Arduino開發(fā)板從運行當前程序開始的毫秒數(shù)。這個數(shù)字將在約50天后溢出(歸零)例子:unsigned long time;void setup()Seria

28、l.begin( 9600); void loop()serial.print( "Time:");time = millis();/打印從程序開始到現(xiàn)在的時間serial.println(time);/等待一秒鐘,以免發(fā)送大量的數(shù)據(jù) delay( 1000);參數(shù)millis是一個無符號長整數(shù),試圖和其他數(shù)據(jù)類型(如整型數(shù))做數(shù)學運算可能會產(chǎn)生錯誤micros()返回Arduino開發(fā)板從運行當前程序開始的微秒數(shù)。這個數(shù)字將在約70分鐘后溢出(歸零)。在16MHz的Arduino 開發(fā)板上(比如 Duemilanove和Nano),這個函數(shù)的分辨率為四微秒(即 返回值總是

29、四的倍數(shù))。在8MHz的Arduino開發(fā)板上(比如 LilyPad ),這個函數(shù)的分辨率為八微秒。注意:每毫秒是1,000微秒,每秒是1,000,000微秒。例子:unsigned long time;void setup()Serial.begin( 9600);void loop()Serial.print ( Time:");time = micros();/打印從程序開始的時間Serial.println(time);/等待一秒鐘,以免發(fā)送大量的數(shù)據(jù) delay( 1000);delay()使程序暫停設定的時間(單位毫秒)。(一秒等于1000毫秒)參數(shù):ms:暫停的毫秒數(shù)(

30、unsigned long )例子:ledPin = 13 / / LED連接到數(shù)字13腳void setup()pinMode(ledPin, OUTPUT); / 設置引腳為輸出void loop() digitalWrite(ledPin,HIGH);/ 點亮LEDdelay( 1000);/等待1秒digitalWrite(ledPin,LOW);/ 滅掉LEDdelay( 1000);/等待一秒雖然創(chuàng)建一個使用delay()的閃爍LED很簡單,并且許多例子將很短的 delay用于消除開關抖動, delay()確實擁有很多顯著的缺點。在 delay函數(shù)使用的過程中,讀取傳感器值、計算、

31、引腳操作均無法執(zhí)行,因此,它所帶來的后果就是使其他大多數(shù)活動暫停。 其他操作定時的方法請參加 millis() 函數(shù)和它下面的例子。大多數(shù)熟練的程序員通常避免超過10毫秒的delay(),除非arduino程序非常簡單。但某些操作在delay()執(zhí)行時任然能夠運行,因為 delay函數(shù)不會使中斷失效。通信端口RX接收到得數(shù)據(jù)會被記錄,PWM(analogWrite)值和引腳狀態(tài)會保持,中斷也會按設定的執(zhí)行。delayMicroseconds()使程序暫停指定的一段時間(單位微秒)。一毫秒等于一千微秒,一秒等于1000000微秒。目前,能夠產(chǎn)生的最大的延時準確值是16383。這可能會在未來的 A

32、rduino版本中改變。對于超過幾千微秒的延遲,彳應該使用delay()代替。例子:int outPin = 8;/ digital pin 8void setup() pinMode (outPin , OUTPUT ; 設置為輸出的數(shù)字管腳 void loop() digitalWrite (outPin , HIGH); 設置引腳高電平 delayMicroseconds( 50);/ 暫停 50 微秒digitalWrite(outPin, LOW); / 設置引腳低電平 delayMicroseconds( 50);/ 暫停 50 微秒數(shù)學運算min()max()abs()const

33、rain(x,a,b)【將一個數(shù)約束在一個范圍內(nèi)】map(value, fromLow, fromHigh, toLow, toHigh)value:需要映射的值fromLow:當前范圍值的下限fromHigh:當前范圍值的上限toLow:目標范圍值的下限toHigh:目標范圍值的上限例子:void setup()void loop()int val = analogRead( 0);val = map(val, 0, 1023, 0, 255);analogWrite( 9, val);數(shù)學實現(xiàn)long map(long x, long in_min, long in_max, long o

34、ut_min, long out_max) 教育資料return (xin_min) * (out_max - out_min) / (in_maxin_min) + out_min;pow(base, exponent) sqrt(x)三角函數(shù)sin()cos()tan()教育資料隨機數(shù)randomSeed()【隨機數(shù)種子】random()【random(max),random(min,max)位操作lowByte()highByte()bitRead()要(最右邊)的位取一個變量(例如一個字)的低位(最右邊)字節(jié)。提取一個字節(jié)的高位(最左邊的),或一個更長的字節(jié)的第二低位。讀取一個數(shù)的位。

35、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ù)字變量設置一個位bitSet(x, n) X:想要設置的數(shù)字變量N:想要設置的位,0是最重要(最右邊)的位bitClear()清除一個數(shù)值型數(shù)值的指定位(將此位設置成0) bitClear(x, n) X:指定要清除位的數(shù)值 N:指定要清除位的位置,從 0開始,0表示最右端位bit()計算指定位的值(0位是1

36、, 1位是2, 2位4,以此類推)bit(n)需要計算的位 設置中斷函數(shù)attachInterrupt()attachInterrupt(interrupt,function , mode)當發(fā)生外部中斷時,調(diào)用一個指定函數(shù)。當中斷發(fā)生時,該函數(shù)會取代正在執(zhí)行的程序。大多數(shù) 的Arduino板有兩個外部中斷:0 (數(shù)字引腳2)和1 (數(shù)字引腳3)。arduino Mege有四個外部中斷:數(shù)字 2 (引腳21) , 3 (20針),4 (引腳19) , 5 (引腳18)interrupt :中斷引腳數(shù)function :中斷發(fā)生時調(diào)用的函數(shù),此函數(shù)必須不帶參數(shù)和不返回任何值。該函數(shù)有時被稱為中斷

37、服務程序。mode定義何時發(fā)生中斷以下四個contstants 預定有效值:LOW當引腳為低電平時,觸發(fā)中斷CHANG肖引腳電平發(fā)生改變時,觸發(fā)中斷RISING當引腳由低電平變?yōu)楦唠娖綍r,觸發(fā)中斷FALLING當引腳由高電平變?yōu)榈碗娖綍r,觸發(fā)中斷 .當中斷函數(shù)發(fā)生時,delya()和millis()的數(shù)值將不會繼續(xù)變化。當中斷發(fā)生時,串口收到的數(shù)據(jù)可能會丟失。你應該聲明一個變量來在未發(fā)生中斷時儲存變量。在單片機自動化程序中當突發(fā)事件發(fā)生時,中斷是非常有用的,它可以幫助解決時序問題。 一個使用中斷的任務可能會讀一個旋轉編碼器,監(jiān)視用戶的輸入。如果你想以確保程序始終抓住一個旋轉編碼器的脈沖,從來不

38、缺少一個脈沖,它將使寫一個程序做任何事情都要非常棘手,因為該計劃將需要不斷輪詢的傳感器線編碼器,為了趕上脈沖發(fā)生時。其 他傳感器也是如此,如試圖讀取一個聲音傳感器正試圖趕上一按,或紅外線槽傳感器(照片滅弧室)試圖抓住一個硬幣下降。在所有這些情況下,使用一個中斷可以釋放的微控制器來完成其他一些工 作。例子:int pin = 13;volatile int state = LOW;void setup() pinMode(pin, OUTPUT); attachInterrupt( 0, blink, CHANGE);void loop()digitalWrite(pin, state);voi

39、d blink() state = !state;detachInterrupt()關閉給定的中斷detachInterrupt(interrupt)interrupt:中斷禁用的數(shù)(0或者1)開關中斷interrupts。重新啟用中斷(使用 noInterrupts() 命令后將被禁用)。中斷允許一些重要任務在后臺運行, 默認狀態(tài)是啟用的。禁用中斷后一些函數(shù)可能無法工作,并傳入信息可能會被忽略。中斷會稍微打亂 代碼的時間,但是在關鍵部分可以禁用中斷noInterrupts()禁止中斷(重新使能中斷interrupts。)。中斷允許在后臺運行一些重要任務,默認使能中斷。禁止中斷時部分函數(shù)會無法

40、工作,通信中接收到的信息也可能會丟失。中斷會稍影響計時代碼,在某些特定的代碼中也會失效例子:void setup()void loop() noInterrupts ();/關鍵的、時間敏感的代碼放在這interrupts。;/其他代碼放在這通訊Serial用于Arduino控制板和一臺計算機或其他設備之間的通信。所有的Arduino控制板有至少一個串口 (又稱作為UAR偵USART)它通過0(RX)和1(TX)數(shù)字引腳經(jīng)過串口轉換芯片連接計算機US端口與計算機進行通信。因此,如果你使用這些功能的同時你不能使用引腳0和1作為輸入或輸出。您可以使用Arduino IDE內(nèi)置的串口監(jiān)視器與 Ard

41、uino板通信。點擊工具欄上的串口監(jiān)視器按鈕,調(diào)用begin()函數(shù)(選擇相同的波特率)。Arduino Mega 有三個額外的串口: Serial 1 使用 19(RX)和 18(TX) , Serial 2 使用 17(RX)和 16(TX), Serial3使用15(RX)和14(TX)。若要使用這三個引腳與您的個人電腦通信,你需要一個額外的USB轉串口適配器,因為這三個引腳沒有連接到Mega上的USB專串口適配器。若要用它們來與外部的TTL串口設備進行通信,將 TX引腳連接到您的設備的 RX引腳,將RX引腳連接到您的設備的 TX引腳,將 GND1接到您的設備的 GND(不要直接將這些引

42、腳直接連接到RS232串口;他們的工彳電壓在+/- 12V,可能會損壞您的 Arduino控制板。)Arduino Leonardo 板使用 Serial 1 通過 0(RX)和 1(TX)與 viaRS- 232 通信,。Serial 預留給使用 Mouse and Keyboard libarariies 的USB CDC!信。更多信息,請參考 Leonardo 開始使用頁和硬 件頁。函數(shù):if (Serial) 表示指定的串口是否準備好 在Leonardo ±, if (Serial) 表示不論有無 USB CDC串行連接都是開放的。對于所有其他 的情況,包括 Leonardo

43、上的if (Serial1),將一直返回true 。 這來自于 Arduino 1.0. 1版本的介 紹對于所有的arduino 板:if (Serial)Arduino Leonardo 特有:if (Serial1)Arduino Mega 特有: if (Serial1) if (Serial2) if (Serial3)available()獲取從串口讀取有效的字節(jié)數(shù)(字符)。這是已經(jīng)傳輸?shù)?,并存儲在串行接收緩沖區(qū)(能 夠存儲64個字節(jié))的數(shù)據(jù)。 available。 繼承了 Stream類Serial.available() 僅適用于Arduino Mega : Serial1.av

44、ailable() Serial2.available() Serial3.available() 例子: incomingByte = 0; /傳入的串行數(shù)據(jù)/打開串行端口,設置傳輸波特率為9600 bpsvoid setup() Serial.begin( 9600);void loop() /只有當你接收到數(shù)據(jù)時才會發(fā)送數(shù)據(jù),:if (Serial.available() > 0) /讀取傳入的字節(jié):incomingByte = Serial.read();/顯示你得到的數(shù)據(jù):Serial.print( "I received: ");Serial.printl

45、n(incomingByte,DEC);begin()將串行數(shù)據(jù)傳輸速率設置為位/秒(波特)。與計算機進行通信時,可以使用這些波特率:300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 或 115200。當然,您也可以 指定其他波特率-例如,引腳0和1和一個元件進行通信,它需要一個特定的波特率Serial.begin(speed)僅適用于Arduino Mega: Serial1.begin(speed) Serial2.begin(speed) Serial3.begin(speed)speed:位/秒(波特)-lon

46、gend()停用串行通信,使 RX和TX引腳用于一般輸入和輸出。要重新使用串行通信,需要 Serial.begin() 語句Serial.end()僅適用于 Arduino Mega: Serial1.end() Serial2.end() Serial3.end()find()Serial.find()從串行緩沖器中讀取數(shù)據(jù),直到發(fā)現(xiàn)給定長度的目標字符串。如果找到目標字符串,該函數(shù)返回true ,如果超時則返回falseSerial.flush()繼承了 Stream 類Serial.find(target)target :要搜索的字符串(字符)findUntil()Serial.findU

47、ntil()從串行緩沖區(qū)讀取數(shù)據(jù),直到找到一個給定的長度或字符串終止位。如果目標字符串被發(fā)現(xiàn),該函數(shù)返回true ,如果超時則返回false 。Serial.findUntil()繼承了 Stream 類。Serial.findUntil(target,terminal)target :要搜索的字符串(char) terminal :在搜索中的字符串終止位(char)flush()1.0及以上的版本中,flush()語句的功能不再是丟棄等待超出的串行數(shù)據(jù)完成傳輸。(在 所有進入緩存器的串行數(shù)據(jù)。)flush()繼承了 Stream 類Serial.flush()僅Arduino Mega可以使

48、用的語法:Serial1.flush()Serial2.flush()Serial3.flush()parseFloat()查找傳入的串行數(shù)據(jù)流中的下一個有效的浮點數(shù)。parseFloat()繼承了 Stream類Serial.parseFloat()僅適用于Arduino MegaSerial1.parseFloat()Serial2.parseFloat()Serial3.parseFloat()parseInt()查找傳入的串行數(shù)據(jù)流中的下一個有效的整數(shù)。parseInt()繼承了 Stream類Serial.parseInt()僅適用于Arduino MegaSerial1.parse

49、Int()Serial2.parseInt()Serial3.parseInt()peek()返回傳入的串行數(shù)據(jù)的下一個字節(jié)(字符),而不是進入內(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ù)到串口輸出。此命令可以采取多種形式。每個數(shù)字 的打印輸出使用的是 ASCII字符。浮點型同樣打印輸出的是ASCII字符,保留

50、到小數(shù)點后兩位。Bytes型則打印輸出單個字符。字符和字符串原樣打印輸出。Serial.print() 打印輸出數(shù)據(jù)不換行,Serial.println()打印輸出數(shù)據(jù)自動換行處理。例如Serial.print(78)輸出為 78”Serial.print(1.23456 )輸出為 1.23”Serial.print(N')輸出為 N'Serial.print( Hello world.")輸出為 Hello world."也可以自己定義輸出為幾進制(格式);可以是 BIN (二進制,或以2為基數(shù)),OCT(八 進制,或以8為基數(shù)),DEC (十進制,或以1

51、0為基數(shù)),HEX (十六進制,或以16為基數(shù))。對于 浮點型數(shù)字,可以指定輸出的小數(shù)數(shù)位。例如Serial.print(78,BIN)輸出為 1001110”Serial.print(Serial.print(Serial.print(Serial.println(78,OCT)輸出為 116”78,DEC)輸出為 78”78,HEX)輸出為4E1.23456,0)輸出為rSerial.println(1.23456,2)輸出為1.23”Serial.println(1.23456,4)輸出為1.2346 ”你可以通過基于閃存的字符串來進行打印輸出,將數(shù)據(jù)放入F()中,再放入Serial.p

52、rint()例如 Serial.print(F( Hello world")若要發(fā)送一個字節(jié),則使用 Serial.write()Serial.print(val)Serial.print(val ,格式) val :打印輸出的值 -任何數(shù)據(jù)類型 格式:指定進制(整數(shù)數(shù)據(jù)類型)或小數(shù)位數(shù)(浮點類型) 例子: int x = 0;/定義一個變量并賦值void setup() Serial.begin( 9600);/打開串口傳輸,并設置波特率為9600 void loop() /打印標簽Serial.print("NO FORMAT"/打印一個標簽Serial.pr

53、int("t");/打印一個轉義字符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碼表的一部分,修改

54、它的格式得到需要的內(nèi)容/打印多種格式:Serial.print(x);/以十進制格式將x打印輸出Serial.print("t");/橫向跳格Serial.print(x,DEC);/以十進制格式將x打印輸出Serial.print("t");/橫向跳格Serial.print(x,HEX);/以十六進制格式打印輸出Serial.print("t");/橫向跳格Serial.print(x,OCT);/以八進制格式打印輸出與"DEC"相同Serial.print( "t");/橫向跳格Seria

55、l.println(x,/delay( 200);Serial.println( "");BIN); /以二進制格式打印輸出 然后用"println"/ 延時 200ms/打印一個空字符,并自動換行打印一個回車println()打印數(shù)據(jù)到串行端口,輸出人們可識別的 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ù)(浮點類型) 例子:int analogVa

溫馨提示

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

評論

0/150

提交評論