機器人技術基礎與應用實踐-基于模塊化的機器人創(chuàng)意設計與實現 課件全套 第0-6章 緒論- 初識復雜系統(tǒng)_第1頁
機器人技術基礎與應用實踐-基于模塊化的機器人創(chuàng)意設計與實現 課件全套 第0-6章 緒論- 初識復雜系統(tǒng)_第2頁
機器人技術基礎與應用實踐-基于模塊化的機器人創(chuàng)意設計與實現 課件全套 第0-6章 緒論- 初識復雜系統(tǒng)_第3頁
機器人技術基礎與應用實踐-基于模塊化的機器人創(chuàng)意設計與實現 課件全套 第0-6章 緒論- 初識復雜系統(tǒng)_第4頁
機器人技術基礎與應用實踐-基于模塊化的機器人創(chuàng)意設計與實現 課件全套 第0-6章 緒論- 初識復雜系統(tǒng)_第5頁
已閱讀5頁,還剩177頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

論半導體器件的應用分析1243什么是機器人機器人的發(fā)展歷史如何設計制作機器人模塊化機器人的特點目

錄CONTENT1.什么是機器人思考:2.機器人的基本構成3.模塊化機器的特點0.1什么是機器人1.機器人的由來機器人的概念誕生于3000多年前。西周時期——能歌善舞的伶人;春秋時期的魯班制造木鳥“飛行三日不下”;三國時期蜀國丞相諸葛亮成功發(fā)明了“木牛流馬”等。Robot一詞最早出現于1920年,是捷克作家KaralCapek在他的科幻小說《羅薩姆的萬能機器人》中首先提出。書中構思的機器人-Robot:能夠代替人類、不知疲勞地艱苦工作后來人們對機器人共識:外觀像人,富有知識,甚至還有個性0.1什么是機器人《大英百科全書》定義:任何能夠代替人類勞動的自動操控機器,雖然這種機器并不一定具有人的外形,或者不按照人類的方式來實現某些功能。MedredinthThring教授認為:機器人至少有一只手臂,能自行推動和自行轉向;有配套的動力系統(tǒng)和控制系統(tǒng),有能容納一定數量指令的存儲器,有能識別環(huán)境和對象的傳感器。日本加藤一郎教授提出:機器人應該具有腦、手、腳,有接收外界信息的各種接觸或非接觸傳感器等要素。1942年,美國作家IsaacAsimov在科幻小說《我,機器人》中提出機器人三定律,后來成為機器人研發(fā)原則:①機器人不得傷害人類,也不許見人類受傷害而袖手旁觀;②應服從人類的一切命令,但不得違背第①條定律;③應能保護自身安全,但不得違反①、②條定律。1988年國際標準化組織采納美國機器人協(xié)會的定義:一種可編程、多功能、多自由度的操作機;或是為了執(zhí)行不同的任務而具有可用計算機改變和可編程動作的專門系統(tǒng)。

2.現代機器人的科學定義0.2機器人的發(fā)展歷史1.機器人的發(fā)展第一代機器人第二代機器人第三代機器人1954年美國戴沃爾提出了工業(yè)機器人1962年,PUMA機器人(通用示教再現型)20世紀70年,機器人應用于汽車工業(yè),正式走向應用。具有感知功能的機器人,具有類似人的某種感覺,如力覺、觸覺、滑覺、視覺、聽覺等應用范圍從工業(yè)擴展到服務行業(yè)。智能機器人,具有各種感知,還具有邏輯思維、學習、判斷、決策等功能,可以根據要求自主地完成所給的任務。如,AlphaGo0.2機器人的發(fā)展歷史2.機器人的主要用途

機器人目前正廣泛應用于工農業(yè)生產、軍事科研、空間探索、醫(yī)療技術、日常生活等領域,并且隨著技術的發(fā)展,應用的范圍不斷擴大,相信不遠的將來我們會在更多的應用領域看到機器人的身影。0.3如何設計制作機器人

1.機器人系統(tǒng)的構成機械系統(tǒng)

相當于人的身體,常見的有機身、臂部、手腕、末端執(zhí)行器和行走機構等部分,每一部分都有若干個自由度,從而構成一個多自由度的機械系統(tǒng)控制系統(tǒng)主要負責路徑規(guī)劃和電機聯動的算法運算控制。它接收輸入的指令信號或感知系統(tǒng)的檢測信號,根據機器人的作業(yè)任務,發(fā)送控制指令,驅動控制機器人的執(zhí)行機構執(zhí)行規(guī)定運動和動作。驅動執(zhí)行系統(tǒng)主要是接收并執(zhí)行控制系統(tǒng)發(fā)送的控制命令,讓機器人的肢體完成一些實際的動作。機器人的執(zhí)行機構主要是由電力驅動、也有液壓驅動和氣壓驅動。常用電力驅動,如伺服電機、步進電機、直流電機、真空吸盤、蜂鳴器、指示燈等。電源系統(tǒng)是機器人系統(tǒng)的重要組成部分,也是機器人能夠穩(wěn)定工作的基本保障,分為直流電源和交流電源(如無特殊說明,本書以7~12V直流電源供電為主)。

0.3如何設計制作機器人感知系統(tǒng)主要是獲取機器人內部和外部環(huán)境信息,并將之反饋給控制系統(tǒng),它由內部傳感器和外部傳感器組成。內部傳感器用于檢測各關節(jié)的位置、速度等變量。外部傳感器用于檢測機器人與周圍環(huán)境之間的一些狀態(tài)變量,如距離、接近程度和接觸情況等,作用相當于人的五官,可以使機器人以靈活快速的方式對其所處的環(huán)境做出反應,賦予機器人一定的智能。交互系統(tǒng)交互系統(tǒng)主要包括人機交互系統(tǒng)、機器人與環(huán)境交互系統(tǒng)。人機交互系統(tǒng)是人與機器人進行聯系和參與機器人控制的裝置;機器人與環(huán)境交互系統(tǒng)是實現機器人與外部環(huán)境中的設備相互聯系和協(xié)調的系統(tǒng)。

2.常見的機器人設計組件0.4模塊化機器人實踐平臺的特點

早在10多年前,模塊創(chuàng)新實踐教學已經占據了教育界半壁江山,如各類模塊化的電子技術創(chuàng)新實驗箱,單片機模塊實驗平臺、PLC、電力電子技術等電氣控制類、模塊化機器人實驗平臺等等積木式的機械構件、電子模塊;設計理念開放靈活、可自由組裝;機構搭建、拆卸方便,控制電路接線簡單,適用于不同學生的需求。構件相對標準,可更替性強,也比較符合現代工業(yè)化生產的要求。

1.模塊化實踐平臺與模塊化機器人

2.模塊化化機器人的特點謝謝大家初識機器人組件半導體器件的應用分析目

錄CONTENT1機器人零件的特點2基本零件及其連接3設計與裝配4控制裝置及其功能簡介5配置編程環(huán)境6設計之體驗:Blink1.1機器人零件的特點

探索者零件的特點探索者零件的特點由高度綜合與抽象的幾何元素構成。借鑒“積木”拼裝組合的設計思路。具有構建“點、線、面、體”的基本元素。能設計出豐富多彩的機械結構。與標準零件、自主設計加工零件的可結合性強。從創(chuàng)意到設計實現學習階段主要熟悉探索者的各種零件及其連接方式,學習如何使用各種零件、控制元件以及編程基礎,學習經典機構的設計思路與搭建方法模仿階段仿,是為了做;做,是為了創(chuàng)造。鍛煉動手實踐能力,激發(fā)興趣和創(chuàng)造力改進階段嘗試改進原作品的機構或功能,優(yōu)化并制作新的機器人,培養(yǎng)對知識的靈活運用能力和創(chuàng)造力。創(chuàng)新階段擺脫范例的框架約束,靈活運用已學知識或待學知識,自主構思設計具有獨特的新機構、新功能的創(chuàng)意作品總結階段從感性認知上升到理論認識??偨Y經驗,優(yōu)化設計方案,活躍思維,提高工程設計能力和邏輯思維能力,也是培養(yǎng)分析、歸納、總結,撰寫科技寫作能力的重要步驟。2.創(chuàng)意到實現的主要階段1.2基本零件及其連接基本零件零件是主要用來設計探索者創(chuàng)意機器人的機械結構

基本零件零件孔孔提供了“點”單位。探索者基礎零件設計了大小形狀各異的槽孔,如圖所示。常用的零件孔是3mm和4mm兩種尺寸連桿類連桿提供了“線”單位。連桿類零件可用于組成平面連桿機構或空間連桿機構?;玖慵桨孱惼桨鍢嫵伞懊妗眴挝?。矩形平板主要用于搭建底板、立板、背板、基座、臺面、立體結構等;圓形平板常用于盤面,或者輪、滾筒、半球或球狀結構的支撐圓面??蚣茴惪蚣艹S糜谵D接,是將“線”和“面”連接成“體”的主要元素,也是具有一定的立體特征獨立“體”

輔助零件傳動件是傳遞動力和運動的重要零件。根據傳遞方式分為機械傳動件、液壓傳動件、電力傳動件和磁力傳動件。這里只介紹機械傳動件,如齒輪、偏心輪、傳動軸支架主要起固定電機的作用,也是電機與其他機械結構連接的主要零件之一輸出頭輸出頭是電機軸伸與其它動作機構建立連接關系的零件聯軸器主要用于連接輪(胎)與輸出頭或電機軸伸(步進電機)。不同的輪或電機需要配不同的聯軸器,如圖1-9所示。輪&標準件

構件的基本連接固定連接鉸鏈連接零件的空間關系1.3設計與裝配常規(guī)設計與裝配

常規(guī)設計與裝配——以智能道閘為示例介紹簡單機構的裝配方法與步驟選配所需要的零件組裝構件組裝舵機組裝橫桿整體裝配自主設計與裝配了解基本零件的特點、常用的基本零件及組合裝配方法,然后根據設計需要將不同基本零件進行自由組合裝配創(chuàng)作出不同的機構分析被控對象(機器人或機械機構)基本功能及工作環(huán)境、預期動作或工作姿態(tài)、運動軌跡、運動算法等,依此設計主體機構的雛形。借助計算機輔助設計軟件構建機構主體或模擬裝配步驟。設計方案可行性評估。非標準件的設計加工。優(yōu)化整體結構設計。

自主設計與裝配1.4控制裝置及其功能簡介初識Arduino/Barsh主控板通用數字I/O端口

0~13、14~19復用功能:ADC輸入A0~A5PWM口(3、5、6、9-11)串口通訊RX/TX(0、1)、SPI總線通訊、I2C通訊電源輸入:USB、VIN、DC電源輸出:5V、3.3V接地:GND與電源負極相連BigFish擴展板探索者為Basra主控板提供了功能強大的擴展板-BigFish,如圖1-25。BigFish擴展板為核心板提供可靠穩(wěn)定的外圍電路(如8*8點陣)及接口,可連接傳感器、電機、輸出模塊、通信模塊等。電路連接方法Bigfish擴展板與Basra主控板堆疊連接外電源連接鋰電池連接在1處的Basra的電池接口,并通過旁邊2處的電源開關控制電池接入或斷開,長時間不用時記得將電源關閉與計算機USB連接。通過microUSB口與計算機連接傳感器連接多數傳感器可通過4芯輸入線與Bigfish擴展板的紅色4針接口相連電機連接

擴展板自帶驅動,能同時驅動6路舵機和2路直流電機1.5配置編程環(huán)境配置配置編程

配置編程環(huán)境下載安裝ArduinoIDE登陸官方網站https://www.arduino.cc/en/software找到與自己電腦操作系統(tǒng)匹配的軟件版本,點擊下載安裝IDE開發(fā)環(huán)境顯示安裝協(xié)議,如圖1-30所示,點擊IAgree。選擇安裝內容,如圖1-31所示,可按照默認的勾選,點擊Next。選擇安裝路徑,點擊Install開始安裝,并顯示安裝進度。安裝結束,點擊Close按鈕。此時,桌面上應該創(chuàng)建了快捷圖標配置編程環(huán)境下載安裝USB驅動

在“我的電腦”圖標上,單擊右鍵,找到并打開“設備管理器”。在左邊的端口列表中,找到“其他設備”中的USBSerialPort選中并單擊右鍵,再選擇圖所示的“更新驅動程序”。如圖所示,在互聯網環(huán)境下,可選擇“自動搜索更新的驅動程序軟件”。否則,選擇第二項,手動查找并安裝驅動程序軟件,繼續(xù)按照步驟3)和4)進行操作。配置編程環(huán)境在圖1-34所示的安裝路徑下,選擇“Arduino\drivers”,選中“FTDIUSBDrivers””文件夾,單擊“確定”按鈕。單擊“下一步”按鈕,系統(tǒng)便開始更新或安裝USB驅動程序。安裝結束,打開“設備管理器”,在“端口(COM和LPT)”列表中出現“USBSerialPort(COMxx)”(xx是數字,用來表示端口號)表示驅動安裝成功。記錄下該端口COMxx,如圖中的端口為COM10。編程環(huán)境簡介初識IDE界面編程環(huán)境簡介設置選項參數1.6設計之體驗:Blink設計之體驗——Blink硬件電路連接用USB線,將PC

連接到BASRA或UNOR3主控板。打開示例Blink打開菜單“文件—示例—01Basic”,選擇Blink,點擊打開例程,或者創(chuàng)建一個Scatch.ino文件,手動輸入程序代碼。選擇通信端口和開發(fā)板型號按照前一節(jié)內容,開發(fā)板型號ArduinoUNOR3和串口端口號COMx驗證程序代碼單擊工具欄

圖標校驗程序語法錯誤。除錯/修改程序重復4、5直至無錯下載運行程序單擊

將編譯程序無誤后并傳送到控制板并運行。這時圖(a)中箭頭所示板載LED燈開始不停閃爍。圖(a)圖(b)

動手體驗設計的魅力——Blink文件——首選項,可以修改編輯器字體大小DEMO程序——Blink解讀delay函數運行時,計算、讀寫引腳等操作均無法同時執(zhí)行。實驗現象:LED每隔1s交替閃爍一次void

setup(){

//配置I/O端口pinMode(LED_BUILTIN,OUTPUT);}void

loop(){

//給指定端口寫一個信號

digitalWrite(LED_BUILTIN,HIGH);

delay(1000);digitalWrite(LED_BUILTIN,LOW);

delay(1000);};語句結束{}程序段//行注釋/**/段注釋謝謝大家編程基礎半導體器件的應用分析目

錄CONTENT1常量、變量與表達式2常用運算符3流程控制的基本結構4函數及其調用規(guī)則5復合數據類型6庫函數2.1變量、常量與表達式常量1.常量程序運行過程中,其值不能被修改的量稱為常量。一般分為整型常量(如3、A0)、實型常量(如3.14、12e3)、字符型常量(如‘a’、‘d’)等,通常從其字面形式即可判別,也可以用一個指定的標識符代表一個常量,一般形式:#define標識符字符串。如:#define

PI

3.14在程序中,用#define命令行定義PI代表常量或字符串3.14,此后該工程文件出現PI代表3.14。這種用一個標識符代表一個常量的,稱為符號常量,即標識符常量。該定義稱為宏定義,標識符PI稱為“宏名”,在編譯預處理時,程序中所有宏名被替換成字符串,這個替換過程稱為“宏展開”。習慣上,符號常量名用具有一定含義的大寫字母。變量

變量的定義:程序運行過程中,其值可以被修改的量稱為變量。它分為局部變量和全局變量。C++/C語言提倡使用具有一定含義的小寫字母表示變量名。變量的命名規(guī)則:在名稱中只能使用字母字符、數字和下畫線(-)三種字符。名稱中第一個字符不能是數字。區(qū)分大寫字母和小寫字母。不能將C++/C語言的關鍵字作為變量。C++/C語言對名稱長度(字符個數)無統(tǒng)一規(guī)定,隨系統(tǒng)而不同。以兩個下畫線或下畫線和大寫字母打頭的名稱被保留給實現(編譯器及其使用的資源)使用。以一個下畫線開頭的名稱被保留給實現,用作全局標識符。例如,像_time_stop或_Count這樣的名稱不會導致編譯器錯誤,會留給實現使用,但會導致結果的不確定性。在C語言中,變量須遵循“先定義,后使用”的原則。

未被事先定義的,不能作為變量名。每個變量名被指定為一個確定類型,在編譯時為其分配相應的存儲單元。在編譯時,確保變量所進行的運算合法,每一個變量有一個所屬類型。2.變量變量局部變量局部變量又稱內部變量,函數內定義的變量。作用域:僅限本函數內部。全局變量

例如voidsetup()

//初始化

{

intpin;//定義變量pinfor(pin=2;pin<10;pin++)

{pinMode(pin,OUTPUT);digitalWirite(pin,LOW);}}全局變量又稱外部變量,函數外部定義的變量。作用域:整個工程文件中所有函數。例如:intledRed=10;voidsetup(){

pinMode(ledRed,OUTPUT);

}voidloop()

{digitalWrite(ledPin,HIGH);}變量根據變量定義與命名規(guī)則,變量定義的通用格式如下:通用格式:類型說明符變量名(賦值符號)(初始值);例如:unsignedlonglast_time(=)(0);//括號內容根據需要定變量定義的通用格式變量賦初值程序中常常需要對一些變量預先設置初值。C/C++規(guī)定,可以在定義變量時同時初始化變量,也可以使被定義的部分變量賦初值;如果多個變量初值相同,則需要分別賦初值。例如:inti,sensorVal=0;//定義i,sensorVal為整型變量,sensorVal初值為0doubledata=0.00;//定義data為雙精度型變量,初值為0.00charstate=’a’;//定義state為字符型變量,初值為a變量變量的數據類型整型變量實型變量字符型變量

。。。等等變量變量的限定符數據類型轉換自動轉換強制轉換(typeName)value將value值轉換成所需要typeName類型typeName(value)將value值轉換成所需要typeName類型例如:int值類型轉換成double類型(double)sensorVal將int型的變量sensorVal值轉換成double類型double(sensorVal)表達式用運算符和括號將運算對象(也稱操作數)按照一定運算法則結合起來的式子。運算對象包括常量、變量、函數等。例如:(1)

x+1.5*2(2)

(vall>100&&valr<100)表達式運算符運算對象運算法則表達式2.2常用運算符2.2.1基本運算符算術運算符基本運算符關系運算符邏輯運算符基本:+,-,*,/

特殊:%(求余),/(取整),++(自加),--(自減)例如:i=0;i++;結果1i=3%2;

結果1i=3/2;

結果0==(等于)!=(不等于)<

(小于)>

(大于)<=(小于等于)>=(大于等于)&&

邏輯與(同時滿足)||邏輯或(滿足其中之一)!邏輯非(取反)例如:x!=y;;變量x不等于y

例如:x=!y;y取反后

賦值x

if(a>2&&b<5)if(a>2||b<5)位操作運算符位操作運算符inta=92;

//inbinary:0000000001011100intb=101;//inbinary:0000000001100101intc=a&b;//result:0000000001000100,or68indecimal.舉例說明0000

0000

0101

11000000

0000

0110

01010000

0000

0100

0100其它運算符其它運算符賦值運算符:“=”,

如:inti=0;下標運算符:“[]”,如:a[5]={0,1,2,3,4};字節(jié)運算符:“.”,

如:Serial.begin()逗號運算符:“,”,

如:pinMode(9,OUTPUT);分號運算符:“;”,

如:語句;“()”、“{}”、……條件運算符:“?:”如:x<0?y=10:z=20

53if(x<0)y=10;elsez=20;運算符的優(yōu)先級和結合性2.3流程控制的基本結構2.2流程控制的基本結構循環(huán)結構選擇結構順序結構自上而下按順序執(zhí)行。使程序具有決策能力。語句:if,switchcase程序需要執(zhí)行重復操作。語句:for,whiledo,dowhile三種基本結構1.流程控制的三種基本結構選擇結構選擇語句1.條件選擇語句——if語句if(表達式)語句if(表達式)語句if(表達式)語句例如,

if(pinFiveInput>500)digitalWrite(3,HIGH);//動作AelsedigitalWrite(3,LOW);//動作B例如,

if(button==HIGH){

digitalWirte(10,LOW);

delay(500)}例如,if(pinA0<500)

Back();//語句塊1

elseif(pinA0>=100)

Left();//語句塊2

else

Stop();//語句塊3選擇結構2.多分支選擇語句——switch語句switch語句是多分支選擇語句,其執(zhí)行過程如圖所示。一般形式如下:switch(表達式){case常量1:語句1;case常量2:語句2;?case常量n:語句n;default:語句n+1;}使用注意事項在執(zhí)行switch語句時,根據()表達式值與某一個case后面的常量表達式值相等時,就執(zhí)行該case后內嵌語句,不再進行判斷;否則執(zhí)行default后面的語句。每一個case的值必須互不相同。各個case出現順序不影響執(zhí)行結果。執(zhí)行一個case分支后,由break語句終止switch語句執(zhí)行。循環(huán)結構while循環(huán)語句1.while循環(huán)2.

dowhile循環(huán)循環(huán)dowhile用來實現“直到型”循環(huán)結構,一般形式:do{語句;}while(表達式);while語句用來實現當型循環(huán)結構。一般形式:while(表達式)

{

語句;}循環(huán)結構for循環(huán)語句C語言中的for語句使用多個表達式,組合靈活,既可以實現有限次循環(huán),也能實現無限次循環(huán)。for語句的一般形式如下:for(表達式1;表達式2;表達式3){…;//執(zhí)行語句}執(zhí)行過程如右圖所示:第1步,先求解表達式1。第2步,求解表達式2,若其值為真(非0),則執(zhí)行for循環(huán)中內嵌的語句,然后再執(zhí)行第3步;若為假(0),則結束循環(huán),跳到第5步。第3步,求解表達式3。第4步,返回第2步繼續(xù)執(zhí)行。第5步,執(zhí)行for循環(huán)語句下面的一個語句。2.4函數及其調用規(guī)則函數函數的定義根據函數是否有返回值可分為無返回值的函數和有返回值的函數。無返回值的函數稱為void函數。2.有返回值函數一般形式類型說明符函數名(參數列表){語句;returnvalue;}1.無返回值函數

一般形式:void函數名(參數列表){

語句;return;//可省略}例如,延時函數voiddelay(intms){for(inti=0;i<ms;i++)}說明:return只能返回一個值,而不能返回多個值;return帶回的返回值的類型應與定義函數時函數的類型一致。如果函數中沒有return語句,返回值是一不確定數。函數根據函數是否帶有參數,函數可分為有參函數和無參函數。一般形式:

類型標識符

函數名(){

語句;}

用類型標識符指定函數值的類型,即函數帶回來的值的類型。

例如,在ArduinoIDE開發(fā)環(huán)境中內嵌的voidsetup()和voidloop()兩個函數都是無參函數。1.無參函數一般形式:

類型標識符函數名(形式參數列表)

{

語句;

}函數調用,形式參數將被實際參數所取代2.有參函數voidblinkLED(intcycles,intdel)/*形式參數類型int*/{

for(intz=0;z<cycles;z++)/*函數體*/

{

digitalWrite(LED,HIGH);

delay(del);

digitalWrite(LED,LOW);

delay(del);

}

}例如,voidloop(){blinkLED(6,200);/*調用函數,實際參數*/delay(1000);}函數的調用函數的調用格式(1)函數語句:函數調用作為一個語句。

例如,delay(10(2)函數表達式:函數作為表達式的一部分參與表達式運算。

例如,intsensorValue=analogRead(A0);(3)函數參數:函數調用作為一個函數的實參。

例如,Serial.println(random(300));函數的調用規(guī)則(1)被調函數必須是已經存在的函數(庫函數或用戶已定義過的函數)。

(2)調用庫函數時,應在程序開頭用#include命令將包含被調函數的有關庫函數包含到本文件來。

例如,#include<Servo.h>,其中Servo.h是一個有關伺服舵機的頭文件。(3)調用用戶自定義函數時,如果該函數與主調函數同處一個文件中,C語言規(guī)定一般應在主調函數中對該被調用函數的返回值類型加以說明。一般形式:類型說明符

被調用函數的函數名();被調用函數返回值為整型或字符型時,可不進行說明。被調用函數定義在主調函數之前,也可不對其進行說明。函數的調用函數的嵌套調用在函數的調用過程中,直接或間接調用它自身稱為遞歸調用。這種函數稱為遞歸函數。在遞歸調用中,主調函數又是被調函數。執(zhí)行遞歸函數將反復調用其自身。每調用一次就進入新的一層。函數的遞歸調用例如,intf(intx)

{inty;z=f(y);returnz;}2.5復合數據類型數組一維數組的定義和引用

數組(array)是一種數據格式,是多個相同類型的有序數據的組合。用一個統(tǒng)一的數組名和下標來唯一地確定數組中的元素。一維數組的定義一般格式:類型說明符

數組名[數組中的元素數];

例如,shortmonths[12];一維數組的引用數組必須先定義,后使用。數組元素逐個地引用而不能一次引用數組中的全部元素。數組元素的表現形式:數組名[下標],下標值最大值為數組元素數目-1一維數組的初始化在定義數組時對數組元素進行初始化。如,static類型說明符數組名[N]={值0,值1,…值N-1};部分元素賦初值。如,staticinta[10]={0,1,2,3,4};

表示給前5個元素賦初值如果數組中的全部元素值為0,可以寫成,longtotals[200]={0};定義不指定數組大小,由初始化的數組元素來確定大小,例如,staticinta[]={0,1,2,3,4};數組二維數組的定義和引用二維數據的定義一般格式:類型說明符數組名[數組元素行數目M][數組元素列數目N]例如,floata[2][4];

floata[2][4]={{a[0][0],a[0][1],a[0][2],a[0][3]},{a[1][0],a[1][1],a[1][2],a[1][3]}};二維數據的引用使用數組元素時,應該注意下標值應在已定義的數組大小的范圍內。二維數組的元素表示形式為:數組名[下標][下標]與一維數組類似,行下標值最大值為數組元素行數目M-1,列下標最大值為數組元素列數目N-1。二維數組的初始化按行給二維數組賦初值。例staticinta[3][4]={{0,1,2,3},{4,5,6,7},{3,5,9,0}}將所有數據寫在一個花括號內,按數組排列順序對元素賦初值。

例如,staticinta[3][4]={0,1,2,3,4,5,6,7,3,5,9,0};對部分元素賦初值。例如,staticinta[3][4]={{0},{0,5,6}};如果對全部元素賦初值,但定義數組時對第一維的長度可以不指定,第二維的長度不能省略。2.7庫函數庫函數的調用方法常用的庫函數基礎庫函數外設庫函數自定義庫函數基于開源平臺Arduino庫函數的調用基礎庫函數調用Arduino基礎函數庫包括處理輸入/輸出功能的相關函數、數學函數、三角函數、定時函數、通訊函數、外部中斷函數與中斷函數,位操作與字節(jié)操作函數、特征函數、USB函數等。調用前只需進行參數配置。如,pinMode(pin,mode)

→pin(2,INPUT);外設函數庫調用調用前,需要先將該庫函數所在的函數庫頭文件*.h以#include<*.h>方式添加工程文件中。調用加載庫中已存在的函數庫。例如,項目-加載庫-Servo,即可添加#include<Servo.h>;也可在代碼區(qū)手動輸入。被調用庫函數不包含在加載庫中的函數庫。需要先在線安裝函數庫項目——加載庫——管理庫…,在庫管理器中搜索需要的庫函數名,并選擇相應的版本安裝。貢獻庫的使用方法打開庫管理找到要安裝的庫點擊安裝打開“項目”菜單打開“包含庫”菜單命令找到要安裝的函數庫基于ArduinoIDE2.0以上版本的外設函數庫的調用自定義庫函數自定義庫函數的編寫與調用建立新的標簽第1步

打開ArduinoIDE開發(fā)環(huán)境,點擊新建按鈕,創(chuàng)建一個新的sketch工程文件。第2步

按照同樣的方法步驟再創(chuàng)建一個后綴為.h頭文件,例如LED.h。注意:用戶自定義庫函數至少需要創(chuàng)建一對文件“*.c和*.h”或者“*.cpp和*.h”。當然也可以根據需要創(chuàng)建其它輔助的文件。創(chuàng)建新的文件第3步

空白新文件創(chuàng)建完成,就可以按照文件后綴指定語言格式分別編寫庫函數的頭文件LED.h和源代碼文件LED.cpp。自定義庫函數示例參考代碼自定義庫函數

庫函數的封裝所謂庫函數封裝就是把一個或者多個功能通過函數、類的方式組合起來,對外只提供一個簡單的函數接口。如參考代碼中,通過定義類led及其成員函數setMode()、setValue()把引腳的功能設置封裝成一個庫。將文件保存或另存在安裝路徑下的Arduino\libraries里,這里命名為LED。打開libraries文件夾,在此可以看到剛剛創(chuàng)建的文件夾LED,文件夾里是已保存的庫函數文件。該文件夾名為用戶自定義,通常使用一些能說明庫函數含義的字母命名。自定義庫函數識別新庫的關鍵字在庫文件夾還應定義一個keywords.txt文件,用來描述新自定義庫函數給Arduino貢獻的新關鍵字通用格式如下:關鍵字(〈Tab〉鍵)類型自定義庫函數庫函數的引用第1步,打開項目——加載庫——添加.ZIP庫…,在文件資源管理器找到庫文件LED,選擇打開,如圖所示,該庫即被加載到加載庫的下拉菜單選項中。添加.ZIP庫選擇含有庫的文件/文件夾第2步,再次打開項目——加載庫,在彈出的下拉菜單里找到剛加載的庫LED并選中,庫函數頭文件LED.h就被引用到sketch文件的首行:#include<LED.h>第3步,參考LED庫文件夾的keywords.txt文件中的關鍵詞,在編輯窗口編寫LED燈的閃爍程序。注意這里需要在voidsetup()函數前面先定義一個led的全局對象,如ledled1;然后編寫代碼時才能直接調用自定義庫函數的功能函數(如led類的成員函數)。自定義庫函數程序參考代碼自定義庫函數

自定義函數庫封裝后,如果想對外發(fā)布,還需要提供若干個示例程序。例如前面編寫的閃爍程序LED_test,來演示新庫的使用方法。

在庫文件夾中新建examples文件夾,將所有的例程保存在這里,如圖所示。這樣加載新庫時,這些示例程序就可以一起加載到ArduinoIDE開發(fā)環(huán)境的菜單命令文件(File)——示例(Examples)菜單里。提供自定義函數庫的示例程序謝謝大家機器人控制系統(tǒng)的構建基礎半導體器件的應用分析但目

錄CONTENT1控制系統(tǒng)的基本構成2輸入-輸出(I/O)端口及其應用3中斷4鍵盤模塊及其應用5常用顯示模塊及應用6常用執(zhí)行機構及應用3.1控制系統(tǒng)的基本構成控制系統(tǒng)的基本構成簡單的開環(huán)控制系統(tǒng)通常由輸入設備、控制器、輸出設備三部分組成。輸入設備主要用來接收外部信息,控制器對信息進行處理并根據處理結果發(fā)出控制指令,輸出設備即執(zhí)行機構執(zhí)行控制的指令閉環(huán)控制系統(tǒng)閉環(huán)控制系統(tǒng)是將輸入量與反饋量比較后產生的偏差量送給控制器,再通過控制器產生指令控制輸出設備,從而調節(jié)輸出量。系統(tǒng)輸出量返回到輸入端,對控制過程產生影響。與開環(huán)控制相比,閉環(huán)控制系統(tǒng)精度高、動態(tài)性能好、抗干擾能力強,但結構比較復雜控制系統(tǒng)的基本構成控制系統(tǒng)各部分功能控制器,

作為控制系統(tǒng)的核心單元,主要將輸入端口讀取的外部指令信息進行分析運算、處理、存儲或通過輸出端口向執(zhí)行機構發(fā)送控制指令。輸入設備

,一類特殊功能的物理元件或化學元件,能感受或探測到外部環(huán)境信息或操作指令,將之轉化為電信號或其它可以表示的信息。各種傳感器、鍵盤、鼠標等輸出設備,各種執(zhí)行機構及驅動控制電路的總和,主要接收來自控制器輸出端口的控制息命令,轉化并執(zhí)行相應的命令信息,產生能改變或調節(jié)系統(tǒng)工作狀態(tài)的行為動作或操作。包括各類執(zhí)行電機、電磁閥、繼電器、蜂鳴器、指示燈、顯示模塊以及各種驅動電路等。檢測裝置,檢測裝置主要有傳感器、數據采集以及反饋環(huán)構成。作用主要是檢測輸出量信息或環(huán)境信息等,并將測量值以特定形式的信號傳送到輸入端或控制器,以便對系統(tǒng)進行調節(jié)。電源系統(tǒng),

電源是機器人正常工作的動力保障,也是控制系統(tǒng)穩(wěn)定可靠運行的關鍵。3.2輸入-輸出(I/O)端口及其應用輸入-輸出(I/O)端口及其應用即輸入/輸出端口。它是控制器與外設之間進行信息交換的通道。作為輸入時,從外界接收檢測信號、鍵盤信號等信息;作為輸出時,向外界輸送單片機內部電路的運算結果、顯示信息、控制命令和驅動信號等。以ATmega328為內核的開源主控板ArduinoUNO、Basra等都具有獨立位操作功能的雙向通用I/O端口(D0~D19),當作為通用數字I/O端口使用時,每個引腳都具有真正的讀取-修改-寫入功能,并且可以通過程序單獨定義成輸入或輸出口。使用時,用戶可通過Arduino基礎函數庫提供的數字I/O的配置函數來進行設定。I/0(英文Input/Output的縮寫)端口數字I/O端口及其應用數字I/O端口及其應用【實踐項目】按鍵控制LED閃爍。【實踐材料】Arduino主控板1塊,紅黃綠LED各1、220?限流電阻3個、10k?電阻1個、按鍵1個、面包板

1塊,以及面包板導線若干;【實踐要求】按住按鍵,LED閃爍;松開按鍵,LED熄滅。LED及其電路連接方法LED的工作原理LED一般指發(fā)光二極管,是一種可以將電能轉化為可見光的半導體器件,常用于信號指示燈、顯示等具有單向導電性。當LED加上正向電壓(陽極接電源正極),且正向電壓大于二極管的通態(tài)管壓降時,電流將從LED陽極流入,陰極流出,LED導通點亮;否則,二極管熄滅。LED的長管腳為陽極A,短管腳為陰極K。LED的亮度與流過二極管的正向電流有關。電流太小,二極管不亮,電流太大,將導致二極管因過流燒壞。使用時:通常串聯一個限流電阻R以控制流過二極管的電流大小數字I/O端口及其應用LED與Arduino電路連接

在控制系統(tǒng)中,LED通常是作為輸出元件連接在數字腳上,根據I/O端口上電流的流向不同,LED有拉電流和灌電流兩種接線方式。電流從電源流出,然后經LED陽極、限流電阻、流入到I/O端口,這種接線方式稱為灌電流接線方法,也稱成為控共陰極接法。電流從I/O端口流出,經限流電阻、LED,再流回到控制板上的電源負極GND,這種接線方式稱為拉電流接線方法,也稱為控陽極接法拉電流接線方法灌電流接線方法數字I/O端口及其應用

電阻電阻通常分為貼片式和直插式色環(huán)電阻讀數四環(huán)電阻-前2環(huán)有效數字,第3環(huán)冪次方,第4環(huán)誤差。五環(huán)電阻-前3環(huán)有效數字,第4環(huán)冪次方,第5環(huán)誤差。六環(huán)電阻,第6環(huán)是溫度環(huán)數字I/O端口及其應用

電路連接與面包板元件區(qū)豎連橫不連,電源區(qū)橫連豎不連分立元件需整型后再插入面包板,連接時注意不要短路、斷路數字I/O端口及其應用

按鍵及其電路連接方法按鍵開關及其工作原理輕觸式按鍵開關是一種電子開關,屬于電子器件類,依靠內部金屬彈片受力變化來實現通斷。自然狀態(tài)開關是斷開的,此時同側兩個引腳相通。當按鈕按下時,開關閉合四個引腳全部接通;松開按鈕,開關立即斷開,恢復到自然狀態(tài)數字I/O端口及其應用按鍵常用接線方式u上拉電阻接法u下拉電阻接法u內置上拉電阻接法

開關斷開時,I/O端口通過電阻R1接地,輸入引腳電平為LOW(低);開關閉合時,I/O端口經按鍵直接與+5V相連,輸入引腳電平為HIGH(高)。開關斷開時,I/O端口通過電阻R1連接+5V,輸入引腳電平為HIGH(高);開關閉合時,I/O端口經按鍵直接接地,輸入引腳電平為LOW(低)。數字I/O端口及其應用

電路設計主控板選擇ArduinoUNO,按鍵采用下拉電阻,LED采用拉電流接法。數字腳3連接按鍵,數字腳9連接LED。下拉電阻R1選擇10kΩ,限流電阻R2選擇220Ω。數字I/O端口及其應用數字腳3連接的按鍵使用下拉電阻,執(zhí)行讀操作函數digitalRead(3)的結果:按鍵按下,返回值HIGH;按鈕松開,返回值LOW。根據設計要求和讀取的按鍵結果,通過digitalWrite()函數向連接LED的輸出端口寫入HIGH或LOW,控制其亮滅。

數字I/O端口的讀/寫操作1.

程序設計#defineKey3//數字腳3連按鍵Key,數字腳8連接LED#defineLED8voidsetup(){//在Arduino上電或復位(按RESET)時,只運行1次

pinMode(Key,INPUT);//初始化Key配置為輸入,LED配置為輸出pinMode(LED,OUTPUT);}

voidloop(){intkeyval=digitalRead(Key);//讀鍵值,結果存入變量keyvalif(keyval==HIGH){//若鍵值為HIGH,執(zhí)行下面{}中的內嵌語句

digitalWrite(LED,HIGH);//向數字腳LED寫一個HIGH,LED導通點亮delay(500);//延遲等待500msdigitalWrite(LED,LOW);//向數字腳LED寫一個LOW,LED截止熄滅delay(500);}//延時等待500ms}數字I/O端口及其應用

按鍵消抖抖動產生原因按鍵是一種機械彈性開關,所以在閉合和斷開的瞬間會伴隨一連串的抖動,這種抖動反映到電路上即產生電平變化,如圖3-21所示。按鍵抖動影響按鍵抖動會導致一次按鍵被誤讀多次,為導致CPU產生誤操作,需要在信號切換時等待電路穩(wěn)定后再讀取按鈕狀態(tài),即按鍵消抖。抖動消除方法硬件消抖。如用RS觸發(fā)器電路;軟件消抖。即延時消抖,第1次檢測到按鍵閉合后,先執(zhí)行10~20ms的延時程序,再次檢測鍵狀態(tài),若兩次相同則按鍵有效。數字I/O端口及其應用

動手做基本要求:在上述例程基礎上增加2個LED,實現按住按鍵多個LED輪流亮滅進階要求:在基本要求基礎,實現按下按鍵,LED閃爍;再次按下按鍵,LED熄滅。提示:按下按鍵按下再松開,LED依然閃爍,直到再次按下按鍵,LED熄滅。根據右下方的電路原理圖,編程實現十字路口的交通燈控制模擬輸入端口及其應用

在Arduino控制系統(tǒng)中,模擬輸入A0~A5是與數字腳14~19復用的。與數字I/O不同的是,模擬輸入端口的信號是單向傳輸,使用時不需要在setup()函數中設置端口的工作模式。模擬信號,如聲音、溫度、光線、速度等等可以用連續(xù)變化的物理量表示的信息,信號的幅值、頻率或相位會隨時間變化而作連續(xù)變化。模擬信號能夠精確、真實地反映事物客觀現象。但是,計算機無法直接處理模擬信號。計算機要處理模擬信號,必須要先將其轉換成數字量。模擬信號轉換為數字信號需要經過信號采集、信號調理、模數轉換等過程。

模擬信號傳感器就是一種信號采集裝置,圖3-26是一些常見的模擬量傳感器。它可以把被測的模擬信號按照一定規(guī)律轉換成易于處理、傳輸、存儲的電信號或其它形式的信息。A/D轉換器接收的模擬信號為0~5V或0~3.3V電壓信號,ATmega328默認接收的模擬信號為0~5V的電壓信號

傳感器模擬輸入端口及其應用

模擬輸入端口與模擬讀操作ArduinoUNO內置一個10位A/D轉換器,帶有6路相互獨立的模擬輸入通道A0~A5,可以同時連接6路模擬輸入信號。編程時,通過執(zhí)行analogRead()函數,將0~5V模擬信號轉換成0~1023的數值。

模擬輸入端口的應用【實踐項目】用光敏電阻設計一個自動感應燈【實踐材料】光敏電阻、10kΩ分壓電阻、220Ω限流電阻、LED、Arduino控制板、面包板及導線?!緦嵺`要求】每0.5s測量一次光線,并將測量數據送到串口顯示,能根據光線的數據控制燈的亮滅?!驹O計思路】光敏電阻是一種對光線非常敏感的元件。它的阻值隨著光強增大而減小。當光線很暗時,RL阻值很大(一般可達1.5MΩ),當光線強時,RL阻值很小,甚至可低至1kΩ以下。由于光敏電阻的特殊性能,經常被用于環(huán)境光檢測,典型采樣電路如圖3-27所示。其中,RL為光敏電阻,分壓電阻R1選取10kΩ,工作電壓Vin為5v。根據串聯分壓原理,可計算出光敏電阻的電壓Vout模擬輸入端口及其應用

電路設計

當CPU對模擬腳端口A0執(zhí)行讀操作時,會讀取到一個0~5V電壓信號,經過內置AD轉換器,該模擬信號被轉換成0~1023的數值。環(huán)境光線變化時,光敏電阻RL的阻值會變化,Vout電壓也會隨之改變,analogRead()的返回值也會發(fā)生相應的變化。配置I/O端口模擬輸入端口的信號是單向傳輸,模擬腳A0無需設置,只需將數字腳9配置為輸出即可模擬輸入端口及其應用程序設計思路

首先,設定一個閾值x,如果analogRead()返回值>x,說明光線比參考基準暗;如果analogRead()返回值<x,則光線比設定基準強。然后以此為條件控制數字腳上的LED電路,光線暗時LED點亮,光線強時LED熄滅,從而實現對環(huán)境光線自動感應和調節(jié)。#defineLED9//數字腳9連接LED#defineRLA0//光敏電阻連接模擬腳A0voidsetup(){pinMode(LED,OUTPUT);//配置數字腳9為輸出模式Serial.begin(9600);//啟動串口監(jiān)視}voidloop(){intserval=analogRead(RL);//模擬轉換結果送給變量servalSerial.println(serval); //測量結果輸出到串口if(serval>600){digitalWrite(LED,HIGH);//analogWrite(LED,serval/4);}elsedigitalWrite(LED,LOW);}delay(500)//每過0.5s測量一次模擬輸出端口及其應用

在ArduinoUNO控制板上,模擬輸出端口(PWM輸出)與數字腳3、5、6、9、10、11復用,為便于與其它數字腳區(qū)別,其數字前增加了“~”符號。模擬輸出與PWM信號模擬輸出主要指PWM輸出。PWM(PulseWidthModulation)是脈沖寬度調制的簡稱。它是Arduino的定時器/計數器在PWM(快速PWM和相位修正PWM)工作模式下,在指定輸出端口產生的一種脈沖寬度可調的方波信號,如圖3-32所示。其中,圖中虛線表示不同占空比的輸出電壓平均值。調節(jié)脈沖信號的寬度可以調節(jié)PWM信號占空比,從而控制在該模擬端口輸出一個平均電壓在0~5V之間的電壓信號模擬寫操作與PWM信號的調節(jié)通過調用模擬寫操作函數analogWrite()向指定模擬引腳寫一個PWM信號。執(zhí)行analogWrite()后,該引腳將生成一個指定占空比的方波,直到下次再執(zhí)行寫操作時,才能調整占空比在UNO板上,5和6輸出的PWM信號頻率為980Hz,其它引腳輸出的PWM信號頻率為490Hz。模擬寫作函數digigtalWrite()

模擬輸出端口的應用R-BGRGBLED由紅(Red)、綠(Green)和藍(Blue)三色LED組成,相當于把三個LED的陰極或陽極連在一起,引出公共端將三個陰極連起來引出公共陰極,稱為共陰極RGBLED;反之就是共陽極RGBLED示例——每過1秒鐘隨機變化一種顏色voidsetup(){}voidloop(){for(intpin=9;pin<12;pin++)

//隨機數依次送給9,10,11analogWrite(pin,random(0,255));delay(1000);}

動手做【設計要求】用電位器和LED設計一個調光燈,讓LED的亮度隨著電位器旋轉的角度而變化。提示:電位器是一種可變電阻器,使用時將電位器的固定端分別接到5V和GND,在轉動電位器旋鈕時,輸出端就可以得到0~5V之間的電壓。電位器模擬輸入值的上下限(0~1023)與PWM輸出的上下限(0~255)正好對應,可以采用整除4的方法,也可以使用映射函數map(value,fromLow,fromHigh,toLow,toHigh)轉換。然后再通過analogWrite()函數輸出PWM信號。3.3中斷中斷的概念圖3-35中斷中斷的概念什么是中斷?正常情況下,CPU是按程序指令一條一條向下順序執(zhí)行的。但如果此時發(fā)生了某一事件B請求CPU迅速去處理,CPU暫停當前的工作并保存斷點信息(壓棧保存現場),轉去處理事件B(響應中斷,執(zhí)行中斷服務程序)。待CPU將事件B處理完畢后,再回到原來被中斷的地方(中斷返回)找回斷點信息(出?;謴同F場),繼續(xù)執(zhí)行程序的過程稱為中斷中斷的幾個概念中斷請求中斷響應中斷返回中斷屏蔽中斷源中斷優(yōu)先級中斷嵌套ATmega328的中斷源及其優(yōu)先級向量序號程序地址中斷源中斷定義10x0000RESET外部電平復位,上電復位,掉電檢測復位,看門狗復位20x0001INT0外部中斷請求030x0002INT1外部中斷請求140x0003PCINT0引腳電平變化請求050x0004PCINT1引腳電平變化請求160x0005PCINT2引腳電平變化請求270x0006WDT看門狗超時中斷80x0007TIMER2COMPA定時器/計數器2比較匹配A90x0008TIMER2COMPB定時器/計數器2比較匹配B100x0009TIMER2OVF定時器/計數器2溢出中斷110x000ATIMER1CAPT定時器/計數器1捕捉事件120x000BTIMER1COMPA定時器/計數器1比較匹配A130x000CTIMER1COMPB定時器/計數器1比較匹配B140x000DTIMER1OVF定時器/計數器1溢出中斷150x000ETIMER0COMPA定時器/計數器0比較匹配A160x000FTIMER0COMPB定時器/計數器0比較匹配B170x0010TIMER0OVF定時器/計數器0溢出中斷180x0011SPI,STCSPI串行傳輸完成190x0012USART,RXUSART接收完成200x0013USART,UDREUSART數據寄存器為空210x0014USART,TXUSART發(fā)射完成220x0015ADCADC轉換完成230x0016EEREADYEEPROM準備240x0017ANALOGCOMP模擬比較器250x0018TWI2線串行接口260x0019SPMREADYSPM準備高低定時中斷及應用定時器與定時器函數庫ATmega328的內部有3個定時器:Timer0、Timer1和Timer2定時器與Audino庫函數的關系定時器位數封裝函數PWM輸出引腳Timer08bit(256)delay()、millis()和micros()等5,6Timer116bit(65535)Servo.h、TimerOne庫等9,10Timer28bit(256)tone()、IRremote.h等3,11定時函數的應用——以定時器2函數庫MsTimer2為例MsTimer2.h函數庫包含三個庫函數:MsTimer2::start(),MsTimer2::stop()MsTimer2::set(unsignedlongms,void(*f)())定時中斷函數的應用(1)定時器設置成員函數:MsTimer2::set(unsignedlongms,void(*f)())參數含義:unsignedlongms表示定時時長,以ms為單位;void(*f)()表示定時時間到了CPU要執(zhí)行的中斷服務函數;(2)啟動定時器成員函數:MsTimer2::start();參數含義:開啟定時器2(3)關閉定時器成員函數:MsTimer2::stop();參數含義:關閉定時器2MsTimer2.h函數庫三個基本庫函數:定時器應用示例【設計要求】應用MsTimer2控制板載指示燈(D13),每0.5s亮或滅一次?!咎崾尽浚涸诰€安裝并引用MsTimer2.h函數庫#include<MsTimer2.h>//引用函數庫voidflash(){staticbooleanstate=HIGH;//設置靜態(tài)布爾變量digitalWrite(13,state);state=!state;}voidsetup(){pinMode(13,OUTPUT);//設置13引腳為輸出MsTimer2::set(500,flash);//定時時長為500msMsTimer2::start();//啟動定時器}voidloop(){}外部中斷函數及其配置啟用外部中斷啟用外部中斷,需要在setup()函數中調用配置外部中斷函數attachInterrupt(),并自定義中斷服務程序

函數原型:

attachInterrupt(digitalPinToInterrupt(pin),ISR,mode);(新版)

attachInterrupt(interrupt,ISR,mode);(舊版)

函數功能:啟用外部中斷,當指定引腳(pin)上的中斷源信號滿足某種條件(mode)時,

外部中斷被

觸發(fā),CPU執(zhí)行相應的中斷服務程序(ISR)。

參數含義:digitalPinToInterrupt(pin)中斷源號。

pin表示具有外部中斷功能的數字腳號。該參數是實際數字腳轉換為特定中斷源的編號。Interrupt中斷源號(舊版參數)。“0”(INT0)表示使用數字腳2;“1”(INT1),表示使用數字腳3。ISR中斷服務程序。CPU處理中斷響應時需要調用的函數,一個無參無返回值函數。ISR應盡可能簡短。如果一個sketch文件有多個ISR函數,執(zhí)行順序取決于他們的優(yōu)先級。在ISR函數中盡量不使用millis()、delay()及串行通信等依賴中斷的函數,但可以使用無計數器的delayMicroseconds()函數。ISR和主程序之間傳遞數據的類型通常是全局變量。ISR中反復修改的變量聲明為volatile。外部中斷函數及其配置mode:中斷觸發(fā)條件。mode設置有四種模式:LOW,CHANGE,RISING,FALLING。外部中斷的4個觸發(fā)模式禁用外部中斷函數detachInterrupt()方法與啟用中斷相似。只需要在setup函數中配置關中斷函數detachInterrupt(digitalPinToInterrupt(pin))或detachInterrupt(Interrupt)即可注意:中斷關閉后不會自行開啟。外部中斷函數的應用外部中斷應用示例【應用實例】使用外部中斷源1(數字腳3),實現按鍵控制LED燈的亮滅/***********************************************************/boolstate=LOW;//定義一個布爾變量state,初值為LOWvoidsetup(){pinMode(pin,OUTPUT);//定義13引腳為輸出,即使用板載LED

attachInterrupt(1,ISR_change,RISING);//外部中斷函數配置}voidISR_change(){//中斷服務程序state=!state;//每次執(zhí)行中斷將state的值取反}voidloop(){digitalWrite(pin,state);}/***********************************************************/外部中斷產生的條件外部中斷產生的條件硬件電路1.可產生高電平和低電平的硬件電路2.

外部信號接入數字腳2(INT0)或數字腳3(INT1)軟件處理

1.voidsetup(){//其他初始化

pinMode(2/3,INPUT);//輸入模式

attachInterrupt(0/1,ISR,FALLING/RISING/CHANGE);

}2.定義中斷響應函數ISR,要求:無參數,返回值類型void

voidISR_butt(){}INT0(2)INT1(3)lowlowhighRISINGFALLINGRISING+FALLING=CHANGE+5v非必須中斷方式與查詢方式中

斷中斷是事件觸發(fā)的。換言之,只要有事件產生都會引發(fā)中斷,并且取得最優(yōu)運行,因此響應更快、更及時。因此,在控制的過程中,合理應用中斷,可以減少信息丟失,提高控制系統(tǒng)運行效率。查

查詢是在loop()函數里,CPU通過執(zhí)行digitalRead()函數,定期查詢端口狀態(tài)信息。顯然,捕捉到端口上的信息變化,才能改變LED燈的狀態(tài)。不僅響應速度比較慢,還占用系統(tǒng)資源,特別是在主程序處理事件多、處理流程復雜、函數嵌套執(zhí)行的情況下,甚至會因為處理不過來而丟失輸入的信息。二者硬件電路相同,實現的控制效果很相似(與§3.2.1節(jié)相比)。本質上是兩種完全不同的操作:查詢與外部中斷。3.4鍵盤模塊及其應用行列式鍵盤的特點16個按鍵構成4行4列的陣列式結構,簡稱4×4鍵盤。常見的有普通按鍵式和薄膜式兩種。4×4鍵盤共有8個接線端,Row1~Row4分別為4個行輸出線,Col1~Col4為4個列輸出線。鍵盤上每個按鍵的狀態(tài)都是由行信號和列信號共同確定的。如如按下鍵K12,就短接了第1行和第2列。4×4行列式鍵盤的特點鍵盤掃描的概念使用時,如何準確地判斷出是哪個按鍵被按下呢?先判斷哪一行有鍵按下如圖所示,如果數字腳2的輸入信號LOW,表示第1行有按鍵被按下再判斷哪個按鍵被按下從第1列開始,通過對4路列引腳的控制信號依序寫低電平進

溫馨提示

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

評論

0/150

提交評論