arduino學(xué)習(xí)筆記_第1頁(yè)
arduino學(xué)習(xí)筆記_第2頁(yè)
arduino學(xué)習(xí)筆記_第3頁(yè)
arduino學(xué)習(xí)筆記_第4頁(yè)
arduino學(xué)習(xí)筆記_第5頁(yè)
已閱讀5頁(yè),還剩206頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Arduino學(xué)習(xí)筆記arduino學(xué)習(xí)筆記1 - 什么是arduino?要了解arduino就先要了解什么是單片機(jī),arduino平臺(tái)的基礎(chǔ)就是AVR指令集的單片機(jī)。1、什么是單片機(jī)?它與個(gè)人計(jì)算機(jī)有什么不同?一臺(tái)能夠工作的計(jì)算機(jī)要有這樣幾個(gè)部份構(gòu)成:中央處理單元CPU(進(jìn)行運(yùn)算、控制)、隨機(jī)存儲(chǔ)器RAM(數(shù)據(jù)存儲(chǔ))、存儲(chǔ)器ROM(程序存儲(chǔ))、輸入/輸出設(shè)備I/O(串行口、并行輸出口等)。在個(gè)人計(jì)算機(jī)(PC)上這些部份被分成若干塊芯片,安裝在一個(gè)被稱之為主板的印刷線路板上。而在單片機(jī)中,這些部份全部被做到一塊集成電路芯片中了,所以就稱為單片(單芯片)機(jī),而且有一些單片機(jī)中除了上述部份外,還集

2、成了其它部份如模擬量/數(shù)字量轉(zhuǎn)換(A/D)和數(shù)字量/模擬量轉(zhuǎn)換(D/A)等。2、單片機(jī)有什么用?實(shí)際工作中并不是任何需要計(jì)算機(jī)的場(chǎng)合都要求計(jì)算機(jī)有很高的性能,一個(gè)控制電冰箱溫度的計(jì)算機(jī)難道要用酷睿處理器嗎?應(yīng)用的關(guān)鍵是看是否夠用,是否有很好的性能價(jià)格比。如果一臺(tái)冰箱都需要用酷睿處理起來(lái)進(jìn)行溫度控制,那價(jià)格就是天價(jià)了。單片機(jī)通常用于工業(yè)生產(chǎn)的控制、生活中與程序和控制有關(guān)(如:電子琴、冰箱、智能空調(diào)等)的場(chǎng)合。下圖就是一個(gè)Atmega328P-PU單片機(jī),基于AVR指令集的8位處理器,頻率20MHz,存儲(chǔ)器空間32KB。什么是Arduino?Arduino是一個(gè)能夠用來(lái)感應(yīng)和控制現(xiàn)實(shí)物理世界的一套

3、工具。 它由一個(gè)基于單片機(jī)并且開(kāi)放源碼的硬件平臺(tái),和一套為Arduino板編寫(xiě)程序 的開(kāi)發(fā)環(huán)境組成。Arduino可以用來(lái)開(kāi)發(fā)交互產(chǎn)品,比如它可以讀取大量的開(kāi)關(guān)和傳感器信號(hào),并且可以控制各式各樣的電燈、電機(jī)和其他物理設(shè)備。Arduino項(xiàng)目可以是單獨(dú)的,也可以在運(yùn)行時(shí)和你電腦中運(yùn)行的程序(例如:Flash,Processing,MaxMSP)進(jìn)行通訊。Arduino板你可以選擇自己去手動(dòng)組裝或是購(gòu)買已經(jīng)組裝好的;Arduino開(kāi)源的IDE可以免費(fèi)下載得到。Arduino的編程語(yǔ)言就像似在對(duì)一個(gè)類似于物理的計(jì)算平臺(tái)進(jìn)行相應(yīng)的連線,它基于處理多媒體的編程環(huán)境。為什么要使用Arduino?有很多的單

4、片機(jī)和單片機(jī)平臺(tái)都適合用做交互式系統(tǒng)的設(shè)計(jì)。例如:Parallax Basic Stamp, Netmedias BX-24,Phidgets,MITs Handyboard 和其它等等提供類似功能的。 所有這些工具,你都不需要去關(guān)心單片機(jī)編程繁瑣的細(xì)節(jié),提供給你的是一套容易使用的工具包。 Arduino同樣也簡(jiǎn)化了同單片機(jī)工作的流程,但同其它系統(tǒng)相比Arduino在很多地方更具有優(yōu)越性,特別適合老師,學(xué)生和一些業(yè)余愛(ài)好者們使用: 便宜 和其它平臺(tái)相比,Arduino板算是相當(dāng)便宜了。最便宜的Arduino版本可以自己動(dòng)手制作,即使是組裝好的成品,其價(jià)格也不會(huì)超過(guò)200元。 跨平臺(tái) Ardui

5、no軟件可以運(yùn)行在Windows,Macintosh OSX,和Linux操作系統(tǒng)。大部分其它的單片機(jī)系統(tǒng)都只能運(yùn)行在Windows上。 簡(jiǎn)易的編程環(huán)境 初學(xué)者很容易就能學(xué)會(huì)使用Arduino編程環(huán)境,同時(shí)它又能為高級(jí)用戶提供足夠多的高級(jí)應(yīng)用。對(duì)于老師們來(lái)說(shuō),一般都能很方便的使用Processing 編程環(huán)境,所以如果學(xué)生學(xué)習(xí)過(guò)使用Processing 編程環(huán)境的話,那他們?cè)谑褂肁rduino開(kāi)發(fā)環(huán)境的時(shí)候就會(huì)覺(jué)得很相似很熟悉。 軟件開(kāi)源并可擴(kuò)展 Arduino軟件是開(kāi)源的,對(duì)于有經(jīng)驗(yàn)的程序員可以對(duì)其進(jìn)行擴(kuò)展。Arduino編程語(yǔ)言可以通過(guò)C+庫(kù)進(jìn)行擴(kuò)展,如果有人想去了解技術(shù)上的細(xì)節(jié),可以跳過(guò)

6、Arduino語(yǔ)言而直接使用AVR C 編程語(yǔ)言(因?yàn)锳rduino語(yǔ)言實(shí)際上是基于AVR C的)。類似的,如果你需要的話,你也可以直接往你的Arduino程序中添加AVR-C 代碼。 硬件開(kāi)源并可擴(kuò)展 Arduino板基于 Atmel 的ATMEGA8 和ATMEGA168/328 單片機(jī)。Arduino基于Creative Commons 許可協(xié)議,所以有經(jīng)驗(yàn)的電路設(shè)計(jì)師能夠根據(jù)需求設(shè)計(jì)自己的模塊,可以對(duì)其擴(kuò)展或改進(jìn)。甚至是對(duì)于一些相對(duì)沒(méi)有什么經(jīng)驗(yàn)的用戶,也可以通過(guò)制作試驗(yàn)板來(lái)理解Arduino是怎么工作的,省錢又省事。 Arduino基于AVR平臺(tái),對(duì)AVR庫(kù)進(jìn)行了二次編譯封裝,把端口都

7、打包好了,寄存器啦、地址指針之類的基本不用管。大大降低了軟件開(kāi)發(fā)難度,適宜非專業(yè)愛(ài)好者使用。優(yōu)點(diǎn)和缺點(diǎn)并存,因?yàn)槭嵌尉幾g封裝,代碼不如直接使用AVR代碼編寫(xiě)精練,代碼執(zhí)行效率與代碼體積都弱于AVR直接編譯。性能:Digital I/O 數(shù)字輸入/輸出端口013。Analog I/O 模擬輸入/輸出端口0-5。支持ICSP下載,支持TX/RX。輸入電壓:USB接口供電或者5V-12V外部電源供電。輸出電壓:支持3.3V級(jí)5V DC輸出。處理器:使用Atmel Atmega168 328處理器,因其支持者眾多,已有公司開(kāi)發(fā)出來(lái)32位的MCU平臺(tái)支持arduino。目前arduino的控制板最新的

8、為Arduino Uno,如下圖:國(guó)內(nèi)使用比較多的為Arduino Duemilanove 2009,主要原因是Uno的usb控制芯片封裝方式改變,制造成本上升,其他變化不大,性價(jià)比還是Arduino Duemilanove 2009比較好。因其開(kāi)源特性,生產(chǎn)arduino控制板的廠商眾多,同樣的Duemilanove 2009就有很多種顏色。對(duì)于一些對(duì)電路板大小要求比較嚴(yán)格的地方,arduino團(tuán)隊(duì)提供了arduino Nano,此板體積做的非常小。如下圖:arduino板子上基本端口如圖描述,對(duì)幾個(gè)比較特殊的端口下面詳細(xì)說(shuō)明下:VIN端口:VIN是input voltage的縮寫(xiě),表示有外

9、部電源時(shí)的輸入端口。AREF:Reference voltage for the analog inputs(模擬輸入的基準(zhǔn)電壓)。使用analogReference()命令調(diào)用。ICSP:也有稱為ISP(In System Programmer),就是一種線上即時(shí)燒錄,目前比較新的芯片都支持這種燒錄模式,包括大家常聽(tīng)說(shuō)的8051系列的芯片,也都慢慢采用這種簡(jiǎn)便的燒錄方式。我們都知道傳統(tǒng)的燒錄方式,都是將被燒錄的芯片,從線路板上拔起,有的焊死在線路板上的芯片,還得先把芯片焊接下來(lái)才能燒錄。為了解決這種問(wèn)題,發(fā)明了ICSP線上即時(shí)燒錄方式。只需要準(zhǔn)備一條R232線(連接燒錄器),以及一條連接燒錄

10、器與燒錄芯片針腳的連接線就可以。電源的+5V,GND,兩條負(fù)責(zé)傳輸燒錄信息的針腳,再加上一個(gè)燒錄電壓針腳,這樣就可以燒錄了。arduino學(xué)習(xí)筆記2通過(guò)Arduino編譯器查看串口數(shù)據(jù)最簡(jiǎn)單的例子:void setup()Serial.begin(9600); / 打開(kāi)串口,設(shè)置波特率為9600 bpsvoid loop() int val; val=analogRead(5);/傳感器接到模擬口5,數(shù)值根據(jù)自己的需要可變 Serial.println(val,DEC);/從串口發(fā)送字符串并換行 delay(100);如果電路安裝正確,按照示例代碼運(yùn)行、上傳,然后點(diǎn)擊編譯器的Serial Mo

11、nitor按鈕,就可以看到從代碼定義的輸入口(這兒是模擬口5)獲取的數(shù)據(jù)了。arduino學(xué)習(xí)筆記3 arduino語(yǔ)言 Arduino語(yǔ)言是建立在C/C+基礎(chǔ)上的,其實(shí)也就是基礎(chǔ)的C語(yǔ)言,Arduino語(yǔ)言只不過(guò)把AVR單片機(jī)(微控制器)相關(guān)的一些參數(shù)設(shè)置都函數(shù)化,不用我們?nèi)チ私馑牡讓?,讓我們不了解AVR單片機(jī)(微控制器)的朋友也能輕松上手。 在與Arduino DIYER接觸的這段時(shí)間里,發(fā)現(xiàn)有些朋友對(duì)Arduino語(yǔ)言還是比較難入手,那么這里我就簡(jiǎn)單的注釋一下Arduino語(yǔ)言(本人也是半罐子水,有錯(cuò)的地方還請(qǐng)各位指正)。/*基礎(chǔ)C語(yǔ)言*/關(guān)鍵字: if if.else for swi

12、tch case while do. while break continue return goto 語(yǔ)法符號(hào): ; / /* */ 運(yùn)算符: = + - * / % = != = & | ! + - += -= *= /= 數(shù)據(jù)類型: boolean布爾類型 char byte字節(jié)類型 int unsigned int long unsigned long float double string array void 數(shù)據(jù)類型轉(zhuǎn)換: char() byte() int() long() float() 常量: HIGH|LOW 表示數(shù)字IO口的電平,HIGH表示高電平(1),LOW表示低電

13、平(0)。 INPUT|OUTPUT表示數(shù)字IO口的方向,INPUT表示輸入(高阻態(tài)),OUTPUT 表示輸出(AVR能提供5V電壓 40mA電流)。 true|falsetrue表示真(1),false表示假(0)。 /*/ 以上為基礎(chǔ)c語(yǔ)言的關(guān)鍵字和符號(hào),有c語(yǔ)言基礎(chǔ)的都應(yīng)該了解其含義,這里也不作過(guò)多的解釋。/*Arduino 語(yǔ)言*/結(jié)構(gòu) voidsetup()初始化變量,管腳模式,調(diào)用庫(kù)函數(shù)等 voidloop() 連續(xù)執(zhí)行函數(shù)內(nèi)的語(yǔ)句 功能數(shù)字 I/O pinMode(pin, mode) 數(shù)字IO口輸入輸出模式定義函數(shù),pin表示為013, mode表示為INPUT或OUTPUT。

14、 digitalWrite(pin, value) 數(shù)字IO口輸出電平定義函數(shù),pin表示為013,value表示為HIGH或LOW。比如定義HIGH可以驅(qū)動(dòng)LED。 intdigitalRead(pin) 數(shù)字IO口讀輸入電平函數(shù),pin表示為013,value表示為HIGH或LOW。比如可以讀數(shù)字傳感器。 模擬 I/O intanalogRead(pin) 模擬IO口讀函數(shù),pin表示為05(Arduino Diecimila為05,Arduino nano為07)。比如可以讀模擬傳感器(10位AD,05V表示為01023)。 analogWrite(pin, value) -PWM 數(shù)字

15、IO口PWM輸出函數(shù),Arduino數(shù)字IO口標(biāo)注了PWM的IO口可使用該函數(shù),pin表示3, 5, 6, 9, 10, 11,value表示為0255。比如可用于電機(jī)PWM調(diào)速或音樂(lè)播放。 擴(kuò)展 I/O shiftOut(dataPin, clockPin, bitOrder, value) SPI外部IO擴(kuò)展函數(shù),通常使用帶SPI接口的74HC595做8個(gè)IO擴(kuò)展,dataPin為數(shù)據(jù)口,clockPin為時(shí)鐘口,bitOrder為數(shù)據(jù)傳輸方向(MSBFIRST高位在前,LSBFIRST低位在前),value表示所要傳送的數(shù)據(jù)(0255),另外還需要一個(gè)IO口做74HC595的使能控制。

16、unsigned longpulseIn(pin, value) 脈沖長(zhǎng)度記錄函數(shù),返回時(shí)間參數(shù)(us),pin表示為013,value為HIGH或LOW。比如value為HIGH,那么當(dāng)pin輸入為高電平時(shí),開(kāi)始計(jì)時(shí),當(dāng)pin輸入為低電平時(shí),停止計(jì)時(shí),然后返回該時(shí)間。 時(shí)間函數(shù) unsigned longmillis() 返回時(shí)間函數(shù)(單位ms),該函數(shù)是指,當(dāng)程序運(yùn)行就開(kāi)始計(jì)時(shí)并返回記錄的參數(shù),該參數(shù)溢出大概需要50天時(shí)間。 delay(ms) 延時(shí)函數(shù)(單位ms)。 delayMicroseconds(us) 延時(shí)函數(shù)(單位us)。 數(shù)學(xué)函數(shù) min(x, y) 求最小值 max(x,

17、y) 求最大值 abs(x) 計(jì)算絕對(duì)值 constrain(x, a, b) 約束函數(shù),下限a,上限b,x必須在ab之間才能返回。 map(value, fromLow, fromHigh, toLow, toHigh) 約束函數(shù),value必須在fromLow與toLow之間和fromHigh與toHigh之間。 pow(base, exponent) 開(kāi)方函數(shù),base的exponent次方。 sq(x) 平方 sqrt(x) 開(kāi)根號(hào) 三角函數(shù) sin(rad) cos(rad) tan(rad) 隨機(jī)數(shù)函數(shù) randomSeed(seed) 隨機(jī)數(shù)端口定義函數(shù),seed表示讀模擬口an

18、alogRead(pin)函數(shù) 。 longrandom(max) 隨機(jī)數(shù)函數(shù),返回?cái)?shù)據(jù)大于等于0,小于max。 longrandom(min, max) 隨機(jī)數(shù)函數(shù),返回?cái)?shù)據(jù)大于等于min,小于max。 外部中斷函數(shù) attachInterrupt(interrupt, , mode) 外部中斷只能用到數(shù)字IO口2和3,interrupt表示中斷口初始0或1,表示一個(gè)功能函數(shù),mode:LOW低電平中斷,CHANGE有變化就中斷,RISING上升沿中斷,F(xiàn)ALLING下降沿中斷。 detachInterrupt(interrupt) 中斷開(kāi)關(guān),interrupt=1 開(kāi),interrupt=

19、0 關(guān)。 中斷使能函數(shù) interrupts() 使能中斷 noInterrupts() 禁止中斷 串口收發(fā)函數(shù) Serial.begin(speed) 串口定義波特率函數(shù),speed表示波特率,如9600,19200等。 intSerial.available() 判斷緩沖器狀態(tài)。 intSerial.read() 讀串口并返回收到參數(shù)。 Serial.flush() 清空緩沖器。 Serial.print(data) 串口輸出數(shù)據(jù)。 Serial.println(data) 串口輸出數(shù)據(jù)并帶回車符。 /*/*Arduino語(yǔ)言庫(kù)文件*/官方庫(kù)文件 EEPROM- EEPROM讀寫(xiě)程序庫(kù) E

20、thernet- 以太網(wǎng)控制器程序庫(kù) LiquidCrystal-LCD控制程序庫(kù) Servo- 舵機(jī)控制程序庫(kù) SoftwareSerial- 任何數(shù)字IO口模擬串口程序庫(kù) Stepper- 步進(jìn)電機(jī)控制程序庫(kù) Wire-TWI/I2C總線程序庫(kù) Matrix- LED矩陣控制程序庫(kù) Sprite- LED矩陣圖象處理控制程序庫(kù) 非官方庫(kù)文件 DateTime- a library for keeping track of the current date and time in software. Debounce- for reading noisy digital inputs (e.

21、g. from buttons) Firmata- for communicating with applications on the computer using a standard serial protocol. GLCD- graphics routines for LCD based on theKS0108or equivalent chipset. LCD- controlLCDs(using 8 data lines) LCD 4 Bit- controlLCDs(using 4 data lines) LedControl- for controlling LED mat

22、rices or seven-segment displays with aMAX7221orMAX7219. LedControl- an alternative to the Matrix library for driving multipleLEDswith Maxim chips. Messenger- for processing text-based messages from the computer Metro- help you time actions at regular intervals MsTimer2- uses the timer 2 interrupt to

23、 trigger an action every N milliseconds. OneWire- control devices (from Dallas Semiconductor) that use the One Wire protocol. PS2Keyboard- read characters from aPS2keyboard. Servo- provides software support for Servo motors on any pins. Servotimer1- provides hardware support for Servo motors on pins

24、 9 and 10 Simple Message System- send messages between Arduino and the computer SSerial2Mobile- send text messages or emails using a cell phone (via AT commands over software serial) TextString- handle strings TLC5940- 16 channel 12 bit PWM controller. X10- Sending X10 signals over AC power lines /*

25、/arduino學(xué)習(xí)筆記4 數(shù)據(jù)類型有多種類型的變量,如下所述boolean 布爾char 字符byte 字節(jié)int 整數(shù)unsigned int 無(wú)符號(hào)整數(shù)long 長(zhǎng)整數(shù)unsigned long 無(wú)符號(hào)長(zhǎng)整數(shù)float 浮點(diǎn)double 雙字節(jié)浮點(diǎn)string 字符串a(chǎn)rray 數(shù)組arduino學(xué)習(xí)筆記5 Arduuino復(fù)合運(yùn)算符+= , -= , *= , /=Description描述Perform a mathematical operation on a variable with another constant or variable. The += (et al) op

26、erators are just a convenient shorthand for the expanded syntax, listed below.對(duì)一個(gè)變量和另一個(gè)參數(shù)或變量完成一個(gè)數(shù)學(xué)運(yùn)算。+=(以及其他)可以縮短語(yǔ)法長(zhǎng)度。Syntax語(yǔ)法x += y; / equivalent to the expression x = x + y; / 等價(jià)于 x = x + y;x -= y; / equivalent to the expression x = x - y; / 等價(jià)于 x = x - y;x *= y; / equivalent to the expression x =

27、 x * y; / 等價(jià)于 x = x * y;x /= y; / equivalent to the expression x = x / y; / 等價(jià)于 x = x / y;Parameters參數(shù)x: any variable typex:任何變量類型y: any variable type or constanty:任何變量類型或常數(shù)Examples范例x = 2;x += 4; / x now contains 6 / x現(xiàn)在為6x -= 3; / x now contains 3 / x現(xiàn)在為3x *= 10; / x now contains 30 / x現(xiàn)在為30x /= 2

28、; / x now contains 15 / x現(xiàn)在為15Syntax語(yǔ)法x+; / increment x by one and returns the old value of x / 將x的值加1并返回原來(lái)的x的值。 +x; / increment x by one and returns the new value of x / 將x的值加1并返回現(xiàn)在的x的值。x- ; / decrement x by one and returns the old value of x / 將x的值減1并返回原來(lái)的x的值。-x ; / decrement x by one and returns

29、the new value of x / 將x的值減1并返回現(xiàn)在的x的值。Parameters參數(shù)x: an integer or long (possibly unsigned)x:一個(gè)整數(shù)或長(zhǎng)整數(shù)(可以無(wú)符號(hào))Returns返回The original or newly incremented / decremented value of the variable.返回變量原始值或增加/消耗后的新值。Examples范例x = 2;y = +x; / x now contains 3, y contains 3 / x現(xiàn)在為3,y為3y = x-; / x contains 2 again

30、, y still contains 3 / x現(xiàn)在仍然為2,y將為3arduino學(xué)習(xí)筆記6 Arduino基礎(chǔ)在學(xué)語(yǔ)言之間,還要做的一個(gè)功課就是要明白程序的構(gòu)架,這個(gè)也同樣簡(jiǎn)單,大體可分為幾個(gè)部分。1、聲明變量及接口名稱(int val;int ledPin=13;)。2、setup()函數(shù)在程序開(kāi)始時(shí)使用,可以初始化變量、接口模式、啟用庫(kù)等(例如:pinMode(ledPin,OUTUPT);)。3、loop()在setup()函數(shù)之后,即初始化之后,loop() 讓你的程序循環(huán)地被執(zhí)行。使用它來(lái)運(yùn)轉(zhuǎn)Arduino。接下來(lái)就開(kāi)始學(xué)習(xí)一下幾個(gè)基本函數(shù)。1、pinMode(接口名稱,OUTP

31、UT或INPUT)將接口定義為輸入或輸出接口,用在setup()函數(shù)里。2、digitalWrite(接口名稱, HIGH或LOW)將數(shù)字接口值至高或低。3、digitalRead(接口名稱)讀出數(shù)字接口的值。4、analogWrite(接口名稱, 數(shù)值)給一個(gè)接口寫(xiě)入模擬值(PWM波)。對(duì)于 ATmega168芯片的Arduino(包括Mini或BT),該函數(shù)可以工作于 3, 5, 6, 9, 10和 11號(hào)接口。老的 ATmega8芯片的USB和 serial Arduino僅僅支持 9, 10和11號(hào)接口。5、analogRead(接口名稱)從指定的模擬接口讀取值,Arduino對(duì)該模擬

32、值進(jìn)行10-bit的數(shù)字轉(zhuǎn)換,這個(gè)方法將輸入的0-5電壓值轉(zhuǎn)換為 0到1023間的整數(shù)值。6、delay()延時(shí)一段時(shí)間,delay(1000)為一秒。7、Serial.begin(波特率)設(shè)置串行每秒傳輸數(shù)據(jù)的速率(波特率)。在同計(jì)算機(jī)通訊時(shí),使用下面這些值:300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600或 115200。你也可以在任何時(shí)候使用其它的值,比如,與0號(hào)或1號(hào)插口通信就要求特殊的波特率。用在setup()函數(shù)里8、Serial.read()讀取持續(xù)輸入的數(shù)據(jù)。9、Serial.print(數(shù)據(jù),數(shù)據(jù)的進(jìn)

33、制)從串行端口輸出數(shù)據(jù)。Serial.print(數(shù)據(jù))默認(rèn)為十進(jìn)制等于Serial.print(數(shù)據(jù),DEC)。10、Serial.println(數(shù)據(jù),數(shù)據(jù)的進(jìn)制)從串行端口輸出數(shù)據(jù),跟隨一個(gè)回車和一個(gè)換行符。這個(gè)函數(shù)所取得的值與 Serial.print()一樣。以上幾個(gè)函數(shù)是常用基本函數(shù),還有很多以后會(huì)慢慢學(xué)習(xí)arduino學(xué)習(xí)筆記7函數(shù)輸入輸出函數(shù)Arduino 內(nèi)含了一些處理輸出與輸入的切換功能,相信已經(jīng)從書(shū)中程式范例略知一二。pinMode(pin, mode)將數(shù)位腳位(digital pin)指定為輸入或輸出。范例 :pinMode(7,INPUT); / 將腳位 7 設(shè)定為

34、輸入模式digitalWrite(pin, value)將數(shù)位腳位指定為開(kāi)或關(guān)。腳位必須先透過(guò)pinMode明示為輸入或輸出模式digitalWrite才能生效。范例 :digitalWrite(8,HIGH); /將腳位 8設(shè)定輸出高電位int digitalRead(pin)將輸入腳位的值讀出,當(dāng)感測(cè)到腳位處于高電位時(shí)時(shí)回傳HIGH,否則回傳LOW。范例 :val = digitalRead(7); / 讀出腳位 7 的值并指定給 valint analogRead(pin)讀出類比腳位的電壓并回傳一個(gè) 0到1023 的數(shù)值表示相對(duì)應(yīng)的0到5的電壓值。范例 :val = analogRea

35、d(0); /讀出類比腳位 0 的值并指定給 val變數(shù)analogWrite(pin, value)改變PWM腳位的輸出電壓值,腳位通常會(huì)在3、5、6、9、10與11。Value變數(shù)范圍0-255,例如:輸出電壓2.5伏特(V),該值大約是128。范例 :analogWrite(9,128); / 輸出電壓約2.5伏特(V)unsigned long pulseIn(pin, value)設(shè)定讀取腳位狀態(tài)的持續(xù)時(shí)間,例如使用紅外線、加速度感測(cè)器測(cè)得某一項(xiàng)數(shù)值時(shí),在時(shí)間單位內(nèi)不會(huì)改變狀態(tài)。范例 :time = pulsein(7,HIGH); / 設(shè)定腳位7的狀態(tài)在時(shí)間單位內(nèi)保持為HIGHsh

36、iftOut(dataPin, clockPin, bitOrder, value)把資料傳給用來(lái)延伸數(shù)位輸出的暫存器,函式使用一個(gè)腳位表示資料、一個(gè)腳位表示時(shí)脈。bitOrder用來(lái)表示位元間移動(dòng)的方式(LSBFIRST最低有效位元或是MSBFIRST最高有效位元),最后value會(huì)以byte形式輸出。此函式通常使用在延伸數(shù)位的輸出。范例 :shiftOut(dataPin, clockPin, LSBFIRST, 255);時(shí)間函數(shù)控制與計(jì)算晶片執(zhí)行期間的時(shí)間unsigned long millis()回傳晶片開(kāi)始執(zhí)行到目前的毫秒范例:duration = millis()-lastTim

37、e; / 表示自lastTime至當(dāng)下的時(shí)間delay(ms)暫停晶片執(zhí)行多少毫秒范例:delay(500); /暫停半秒(500毫秒)delay Microseconds(us)暫停晶片執(zhí)行多少微秒范例:delayMicroseconds(1000); /暫停1豪秒數(shù)學(xué)函式三角函數(shù)以及基本的數(shù)學(xué)運(yùn)算min(x, y)回傳兩數(shù)之間較小者范例:val = min(10,20); / 回傳10max(x, y)回傳兩數(shù)之間較大者范例:val = max(10,20); / 回傳20abs(x)回傳該數(shù)的絕對(duì)值,可以將負(fù)數(shù)轉(zhuǎn)正數(shù)。范例:val = abs(-5); / 回傳5constrain(x,

38、 a, b)判斷x變數(shù)位于a與b之間的狀態(tài)。x若小于a回傳a;介于a與b之間回傳x本身;大于b回傳b范例:val = constrain(analogRead(0), 0, 255); / 忽略大于255的數(shù)map(value, fromLow, fromHigh, toLow, toHigh)將value變數(shù)依照f(shuō)romLow與fromHigh范圍,對(duì)等轉(zhuǎn)換至toLow與toHigh范圍。時(shí)常使用于讀取類比訊號(hào),轉(zhuǎn)換至程式所需要的范圍值。例如:val = map(analogRead(0),0,1023,100, 200); / 將analog0 所讀取到的訊號(hào)對(duì)等轉(zhuǎn)換至100 200之間的

39、數(shù)值。double pow(base, exponent)回傳一個(gè)數(shù)(base)的指數(shù)(exponent)值。范例:double x = pow(y, 32); / 設(shè)定x為y的32次方double sqrt(x)回傳double型態(tài)的取平方根值。范例:double a = sqrt(1138); / 回傳1138平方根的近似值 33.73425674438double sin(rad)回傳角度(radians)的三角函數(shù)sine值。范例:double sine = sin(2); / 近似值 0.90929737091double cos(rad)回傳角度(radians)的三角函數(shù)cosi

40、ne值。范例:double cosine = cos(2); /近似值-0.41614685058double tan(rad)回傳角度(radians)的三角函數(shù)tangent值。范例:double tangent = tan(2); /近似值-2數(shù)函式產(chǎn)生亂數(shù)randomSeed(seed)事實(shí)上在Arduino里的亂數(shù)是可以被預(yù)知的。所以如果需要一個(gè)真正的亂數(shù),可以呼叫此函式重新設(shè)定產(chǎn)生亂數(shù)種子。你可以使用亂數(shù)當(dāng)作亂數(shù)的種子,以確保數(shù)字以隨機(jī)的方式出現(xiàn),通常會(huì)使用類比輸入當(dāng)作亂數(shù)種子,藉此可以產(chǎn)生與環(huán)境有關(guān)的亂數(shù)(例如:無(wú)線電波、宇宙雷射線、電話和螢光燈發(fā)出的電

41、磁波等)。范例:randomSeed(analogRead(5); / 使用類比輸入當(dāng)作亂數(shù)種子long random(max)long random(min, max)回傳指定區(qū)間的亂數(shù),型態(tài)為long。如果沒(méi)有指定最小值,預(yù)設(shè)為0。范例:long randnum = random(0, 100); / 回傳0 99 之間的數(shù)字long randnum = random(11); / 回傳 0 -10之間的數(shù)字序列通訊你可以在第五章看見(jiàn)一些使用序列埠與電腦交換訊息的范例,以下是函式解釋。Serial.begin(speed)你可以指定Arduino從電腦交換訊息的速率,通常我們使用9600

42、bps。當(dāng)然也可以使用其他的速度,但是通常不會(huì)超過(guò)115,200 bps(每秒位元組)。范例:Serial.begin(9600);Serial.print(data)Serial.print(data, encoding)經(jīng)序列埠傳送資料,提供編碼方式的選項(xiàng)。如果沒(méi)有指定,預(yù)設(shè)以一般文字傳送。范例:Serial.print(75); / 列印出 75Serial.print(75, DEC); /列印出 75Serial.print(75, HEX); / 4B (75 的十六進(jìn)位)Serial.print(75, OCT); / 113 (75 in的八進(jìn)位)Serial.print(75

43、, BIN); / 1001011 (75的二進(jìn)位)Serial.print(75, BYTE); / K (以byte進(jìn)行傳送,顯示以ASCII編碼方式)Serial.println(data)Serial.println(data, encoding)與Serial.print()相同,但會(huì)在資料尾端加上換行字元( )。意思如同你在鍵盤(pán)上打了一些資料后按下Enter。范例:Serial.println(75); /列印出75 Serial.println(75, DEC); /列印出75 Serial.println(75, HEX); / 4B Serial.println(75, OC

44、T); / 113 Serial.println(75, BIN); / 1001011 Serial.println(75, BYTE); / K int Serial.available()回傳有多少位元組(bytes)的資料尚未被read()函式讀取,如果回傳值是0代表所有序列埠上資料都已經(jīng)被read()函式讀取。范例:int count = Serial.available();int Serial.read()讀取1byte的序列資料范例:int data = Serial.read();Serial.flush()有時(shí)候因?yàn)橘Y料速度太快,超過(guò)程式處理資料的速度,你可以使用此函式清除

45、緩沖區(qū)內(nèi)的資料。經(jīng)過(guò)此函式可以確保緩沖區(qū)(buffer)內(nèi)的資料都是最新的。范例:Serial.flush();arduino學(xué)習(xí)筆記8數(shù)字輸入在數(shù)字電路中開(kāi)關(guān)(switch)是一種基本的輸入形式,它的作用是保持電路的連接或者斷開(kāi)。Arduino從數(shù)字I/O管腳上只能讀出高電平(5V)或者低電平(0V),因此我們首先面臨到的一個(gè)問(wèn)題就是如何將開(kāi)關(guān)的開(kāi)/斷狀態(tài)轉(zhuǎn)變成Arduino能夠讀取的高/低電平。解決的辦法是通過(guò)上 /下拉電阻,按照電路的不同通常又可以分為正邏輯(Positive Logic)和負(fù)邏輯(Inverted Logic)兩種。在正邏輯電路中,開(kāi)關(guān)一端接電源,另一端則通過(guò)一個(gè)10K

46、的下拉電阻接地,輸入信號(hào)從開(kāi)關(guān)和電阻間引出。當(dāng)開(kāi)關(guān)斷開(kāi)的時(shí)候,輸入信號(hào)被電阻“拉”向地,形成低電平(0V);當(dāng)開(kāi)關(guān)接通的時(shí)候,輸入信號(hào)直接與電源相連,形成高電平。對(duì)于經(jīng)常用到的按壓式開(kāi)關(guān)來(lái)講,就是按下為高,抬起為低。在負(fù)邏輯電路中,開(kāi)關(guān)一端接地,另一端則通過(guò)一個(gè)10K的上拉電阻接電源,輸入信號(hào)同樣也是從開(kāi)關(guān)和電阻間引出。當(dāng)開(kāi)關(guān)斷開(kāi)時(shí),輸入信號(hào)被電阻“拉”向電源,形成高電平(5V);當(dāng)開(kāi)關(guān)接通的時(shí)候,輸入信號(hào)直接與地相連,形成低電平。對(duì)于經(jīng)常用到的按壓式開(kāi)關(guān)來(lái)講,就是按下為低,抬起為高。為了驗(yàn)證Arduino數(shù)字I/O的輸入功能,我們可以將開(kāi)關(guān)接在Arduino的任意一個(gè)數(shù)字I/O管腳上(13除

47、外),并通過(guò)讀取它的接通或者斷開(kāi)狀態(tài),來(lái)控制其它數(shù)字I/O管腳的高低。本實(shí)驗(yàn)采用的原理圖如下所示,其中開(kāi)關(guān)接在數(shù)字I/O的7號(hào)管腳上,被控的發(fā)光二極管接在數(shù)字I/O的13號(hào) 管腳上:相應(yīng)的代碼為:int ledPin = 13;int switchPin = 7;int value = 0;void setup() pinMode(ledPin, OUTPUT);pinMode(switchPin, INPUT);void loop() value = digitalRead(switchPin);if (HIGH = value) / turn LED off digitalWrite(le

48、dPin, LOW); else / turn LED on digitalWrite(ledPin, HIGH);由于采用的是負(fù)邏輯電路,開(kāi)關(guān)按下時(shí)用digitalRead()函數(shù)讀取到的值為L(zhǎng)OW,此時(shí)再用digitalWrite()函數(shù)將發(fā)光二極管所在的管腳置為高,點(diǎn)亮發(fā)光二極管。同理,當(dāng)開(kāi)關(guān)抬起時(shí),發(fā)光二極管將被熄滅,這樣我們就實(shí)現(xiàn)了用開(kāi)關(guān)來(lái)控制發(fā)光二極管的功能。arduino學(xué)習(xí)筆記9 Arduino的數(shù)字輸出Arduino的數(shù)字I/O被分成兩個(gè)部分,其中每個(gè)部分都包含有6個(gè)可用的I/O管腳,即管腳2 到管腳7和管腳8到管腳13。除了管腳13上接了一個(gè)1K的電阻之外,其他各個(gè)管腳都直

49、接連接到ATmega上。我們可以利用一個(gè)6位的數(shù)字跑馬燈,來(lái)對(duì) Arduino數(shù)字I/O的輸出功能進(jìn)行驗(yàn)證,以下是相應(yīng)的原理圖:電路中在每個(gè)I/O管腳上加的那個(gè)1K電阻被稱為限流電阻,由于發(fā)光二極管在電路中沒(méi)有等效電阻值,使用限流電阻可以使元件上通過(guò)的電流不至于過(guò)大,能夠起到保護(hù)的作用。該工程對(duì)應(yīng)的代碼為:int BASE = 2;int NUM = 6;int index = 0;void setup()for (int i = BASE; i BASE + NUM; i +) pinMode(i, OUTPUT);void loop()for (int i = BASE; i BASE +

50、 NUM; i +) digitalWrite(i, LOW);digitalWrite(BASE + index, HIGH);index = (index + 1) % NUM;delay(100);下載并運(yùn)行該工程,連接在Arduino數(shù)字I/O管腳2到管腳7上的發(fā)光二極管會(huì)依次點(diǎn)亮0.1秒,然后再熄滅:這個(gè)實(shí)驗(yàn)可以用來(lái)驗(yàn)證數(shù)字I/O輸出的正確性。Arduino上一共有十二個(gè)數(shù)字I/O管腳,我們可以用同樣的辦法驗(yàn)證其他六個(gè)管腳的正確性,而這只需要對(duì)上述工程的第一行做相應(yīng)的修改就可以了:int BASE = 8;arduino學(xué)習(xí)筆記10 Arduino的串口輸入串行通信是在實(shí)現(xiàn)在PC機(jī)與

51、微控制器進(jìn)行交互的最簡(jiǎn)單的辦法。之前的PC機(jī)上一般都配有標(biāo)準(zhǔn)的 RS-232或者RS-422接口來(lái)實(shí)現(xiàn)串行通信,但現(xiàn)在這種情況已經(jīng)發(fā)生了一些改變,大家更傾向于使用USB這樣一種更快速但同時(shí)也更加復(fù)雜的方式來(lái)實(shí)現(xiàn)串行通信。盡管在有些計(jì)算機(jī)上現(xiàn)在已經(jīng)找不到RS-232或者RS-422接口了,但我們?nèi)钥梢酝ㄟ^(guò)USB/串口或者PCMCIA/串口這樣的轉(zhuǎn)換器, 在這些設(shè)備上得到傳統(tǒng)的串口。通過(guò)串口連接的Arduino在交互式設(shè)計(jì)中能夠?yàn)镻C機(jī)提供一種全新的交互方式,比如用PC機(jī)控制一些之前看來(lái)非常復(fù)雜的事情,像聲音和視頻等。很多場(chǎng)合中都要求Arduino能夠通過(guò)串口接收來(lái)自于PC機(jī)的命令,并完成相應(yīng)的功

52、能,這可以通過(guò)Arduino語(yǔ)言中提供的 Serial.read()函數(shù)來(lái)實(shí)現(xiàn)。在這一實(shí)驗(yàn)中我們同樣不需要任何額外的電路,而只需要用串口線將Arduino和PC機(jī)連起來(lái)就可以了,相應(yīng)的Arduino工程代碼為:int ledPin = 13;int val;void setup() pinMode(ledPin, OUTPUT);Serial.begin(9600);void loop() val = Serial.read();if (-1 != val) if (H = val) digitalWrite(ledPin, HIGH); delay(500); digitalWrite(led

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論