版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
緒
論半導(dǎo)體器件的應(yīng)用分析1243什么是機(jī)器人機(jī)器人的發(fā)展歷史如何設(shè)計(jì)制作機(jī)器人模塊化機(jī)器人的特點(diǎn)目
錄CONTENT1.什么是機(jī)器人思考:2.機(jī)器人的基本構(gòu)成3.模塊化機(jī)器的特點(diǎn)0.1什么是機(jī)器人1.機(jī)器人的由來機(jī)器人的概念誕生于3000多年前。西周時(shí)期——能歌善舞的伶人;春秋時(shí)期的魯班制造木鳥“飛行三日不下”;三國時(shí)期蜀國丞相諸葛亮成功發(fā)明了“木牛流馬”等。Robot一詞最早出現(xiàn)于1920年,是捷克作家KaralCapek在他的科幻小說《羅薩姆的萬能機(jī)器人》中首先提出。書中構(gòu)思的機(jī)器人-Robot:能夠代替人類、不知疲勞地艱苦工作后來人們對機(jī)器人共識:外觀像人,富有知識,甚至還有個(gè)性0.1什么是機(jī)器人《大英百科全書》定義:任何能夠代替人類勞動的自動操控機(jī)器,雖然這種機(jī)器并不一定具有人的外形,或者不按照人類的方式來實(shí)現(xiàn)某些功能。MedredinthThring教授認(rèn)為:機(jī)器人至少有一只手臂,能自行推動和自行轉(zhuǎn)向;有配套的動力系統(tǒng)和控制系統(tǒng),有能容納一定數(shù)量指令的存儲器,有能識別環(huán)境和對象的傳感器。日本加藤一郎教授提出:機(jī)器人應(yīng)該具有腦、手、腳,有接收外界信息的各種接觸或非接觸傳感器等要素。1942年,美國作家IsaacAsimov在科幻小說《我,機(jī)器人》中提出機(jī)器人三定律,后來成為機(jī)器人研發(fā)原則:①機(jī)器人不得傷害人類,也不許見人類受傷害而袖手旁觀;②應(yīng)服從人類的一切命令,但不得違背第①條定律;③應(yīng)能保護(hù)自身安全,但不得違反①、②條定律。1988年國際標(biāo)準(zhǔn)化組織采納美國機(jī)器人協(xié)會的定義:一種可編程、多功能、多自由度的操作機(jī);或是為了執(zhí)行不同的任務(wù)而具有可用計(jì)算機(jī)改變和可編程動作的專門系統(tǒng)。
2.現(xiàn)代機(jī)器人的科學(xué)定義0.2機(jī)器人的發(fā)展歷史1.機(jī)器人的發(fā)展第一代機(jī)器人第二代機(jī)器人第三代機(jī)器人1954年美國戴沃爾提出了工業(yè)機(jī)器人1962年,PUMA機(jī)器人(通用示教再現(xiàn)型)20世紀(jì)70年,機(jī)器人應(yīng)用于汽車工業(yè),正式走向應(yīng)用。具有感知功能的機(jī)器人,具有類似人的某種感覺,如力覺、觸覺、滑覺、視覺、聽覺等應(yīng)用范圍從工業(yè)擴(kuò)展到服務(wù)行業(yè)。智能機(jī)器人,具有各種感知,還具有邏輯思維、學(xué)習(xí)、判斷、決策等功能,可以根據(jù)要求自主地完成所給的任務(wù)。如,AlphaGo0.2機(jī)器人的發(fā)展歷史2.機(jī)器人的主要用途
機(jī)器人目前正廣泛應(yīng)用于工農(nóng)業(yè)生產(chǎn)、軍事科研、空間探索、醫(yī)療技術(shù)、日常生活等領(lǐng)域,并且隨著技術(shù)的發(fā)展,應(yīng)用的范圍不斷擴(kuò)大,相信不遠(yuǎn)的將來我們會在更多的應(yīng)用領(lǐng)域看到機(jī)器人的身影。0.3如何設(shè)計(jì)制作機(jī)器人
1.機(jī)器人系統(tǒng)的構(gòu)成機(jī)械系統(tǒng)
相當(dāng)于人的身體,常見的有機(jī)身、臂部、手腕、末端執(zhí)行器和行走機(jī)構(gòu)等部分,每一部分都有若干個(gè)自由度,從而構(gòu)成一個(gè)多自由度的機(jī)械系統(tǒng)控制系統(tǒng)主要負(fù)責(zé)路徑規(guī)劃和電機(jī)聯(lián)動的算法運(yùn)算控制。它接收輸入的指令信號或感知系統(tǒng)的檢測信號,根據(jù)機(jī)器人的作業(yè)任務(wù),發(fā)送控制指令,驅(qū)動控制機(jī)器人的執(zhí)行機(jī)構(gòu)執(zhí)行規(guī)定運(yùn)動和動作。驅(qū)動執(zhí)行系統(tǒng)主要是接收并執(zhí)行控制系統(tǒng)發(fā)送的控制命令,讓機(jī)器人的肢體完成一些實(shí)際的動作。機(jī)器人的執(zhí)行機(jī)構(gòu)主要是由電力驅(qū)動、也有液壓驅(qū)動和氣壓驅(qū)動。常用電力驅(qū)動,如伺服電機(jī)、步進(jìn)電機(jī)、直流電機(jī)、真空吸盤、蜂鳴器、指示燈等。電源系統(tǒng)是機(jī)器人系統(tǒng)的重要組成部分,也是機(jī)器人能夠穩(wěn)定工作的基本保障,分為直流電源和交流電源(如無特殊說明,本書以7~12V直流電源供電為主)。
0.3如何設(shè)計(jì)制作機(jī)器人感知系統(tǒng)主要是獲取機(jī)器人內(nèi)部和外部環(huán)境信息,并將之反饋給控制系統(tǒng),它由內(nèi)部傳感器和外部傳感器組成。內(nèi)部傳感器用于檢測各關(guān)節(jié)的位置、速度等變量。外部傳感器用于檢測機(jī)器人與周圍環(huán)境之間的一些狀態(tài)變量,如距離、接近程度和接觸情況等,作用相當(dāng)于人的五官,可以使機(jī)器人以靈活快速的方式對其所處的環(huán)境做出反應(yīng),賦予機(jī)器人一定的智能。交互系統(tǒng)交互系統(tǒng)主要包括人機(jī)交互系統(tǒng)、機(jī)器人與環(huán)境交互系統(tǒng)。人機(jī)交互系統(tǒng)是人與機(jī)器人進(jìn)行聯(lián)系和參與機(jī)器人控制的裝置;機(jī)器人與環(huán)境交互系統(tǒng)是實(shí)現(xiàn)機(jī)器人與外部環(huán)境中的設(shè)備相互聯(lián)系和協(xié)調(diào)的系統(tǒng)。
2.常見的機(jī)器人設(shè)計(jì)組件0.4模塊化機(jī)器人實(shí)踐平臺的特點(diǎn)
早在10多年前,模塊創(chuàng)新實(shí)踐教學(xué)已經(jīng)占據(jù)了教育界半壁江山,如各類模塊化的電子技術(shù)創(chuàng)新實(shí)驗(yàn)箱,單片機(jī)模塊實(shí)驗(yàn)平臺、PLC、電力電子技術(shù)等電氣控制類、模塊化機(jī)器人實(shí)驗(yàn)平臺等等積木式的機(jī)械構(gòu)件、電子模塊;設(shè)計(jì)理念開放靈活、可自由組裝;機(jī)構(gòu)搭建、拆卸方便,控制電路接線簡單,適用于不同學(xué)生的需求。構(gòu)件相對標(biāo)準(zhǔn),可更替性強(qiáng),也比較符合現(xiàn)代工業(yè)化生產(chǎn)的要求。
1.模塊化實(shí)踐平臺與模塊化機(jī)器人
2.模塊化化機(jī)器人的特點(diǎn)謝謝大家初識機(jī)器人組件半導(dǎo)體器件的應(yīng)用分析目
錄CONTENT1機(jī)器人零件的特點(diǎn)2基本零件及其連接3設(shè)計(jì)與裝配4控制裝置及其功能簡介5配置編程環(huán)境6設(shè)計(jì)之體驗(yàn):Blink1.1機(jī)器人零件的特點(diǎn)
探索者零件的特點(diǎn)探索者零件的特點(diǎn)由高度綜合與抽象的幾何元素構(gòu)成。借鑒“積木”拼裝組合的設(shè)計(jì)思路。具有構(gòu)建“點(diǎn)、線、面、體”的基本元素。能設(shè)計(jì)出豐富多彩的機(jī)械結(jié)構(gòu)。與標(biāo)準(zhǔn)零件、自主設(shè)計(jì)加工零件的可結(jié)合性強(qiáng)。從創(chuàng)意到設(shè)計(jì)實(shí)現(xiàn)學(xué)習(xí)階段主要熟悉探索者的各種零件及其連接方式,學(xué)習(xí)如何使用各種零件、控制元件以及編程基礎(chǔ),學(xué)習(xí)經(jīng)典機(jī)構(gòu)的設(shè)計(jì)思路與搭建方法模仿階段仿,是為了做;做,是為了創(chuàng)造。鍛煉動手實(shí)踐能力,激發(fā)興趣和創(chuàng)造力改進(jìn)階段嘗試改進(jìn)原作品的機(jī)構(gòu)或功能,優(yōu)化并制作新的機(jī)器人,培養(yǎng)對知識的靈活運(yùn)用能力和創(chuàng)造力。創(chuàng)新階段擺脫范例的框架約束,靈活運(yùn)用已學(xué)知識或待學(xué)知識,自主構(gòu)思設(shè)計(jì)具有獨(dú)特的新機(jī)構(gòu)、新功能的創(chuàng)意作品總結(jié)階段從感性認(rèn)知上升到理論認(rèn)識。總結(jié)經(jīng)驗(yàn),優(yōu)化設(shè)計(jì)方案,活躍思維,提高工程設(shè)計(jì)能力和邏輯思維能力,也是培養(yǎng)分析、歸納、總結(jié),撰寫科技寫作能力的重要步驟。2.創(chuàng)意到實(shí)現(xiàn)的主要階段1.2基本零件及其連接基本零件零件是主要用來設(shè)計(jì)探索者創(chuàng)意機(jī)器人的機(jī)械結(jié)構(gòu)
基本零件零件孔孔提供了“點(diǎn)”單位。探索者基礎(chǔ)零件設(shè)計(jì)了大小形狀各異的槽孔,如圖所示。常用的零件孔是3mm和4mm兩種尺寸連桿類連桿提供了“線”單位。連桿類零件可用于組成平面連桿機(jī)構(gòu)或空間連桿機(jī)構(gòu)?;玖慵桨孱惼桨鍢?gòu)成“面”單位。矩形平板主要用于搭建底板、立板、背板、基座、臺面、立體結(jié)構(gòu)等;圓形平板常用于盤面,或者輪、滾筒、半球或球狀結(jié)構(gòu)的支撐圓面??蚣茴惪蚣艹S糜谵D(zhuǎn)接,是將“線”和“面”連接成“體”的主要元素,也是具有一定的立體特征獨(dú)立“體”
輔助零件傳動件是傳遞動力和運(yùn)動的重要零件。根據(jù)傳遞方式分為機(jī)械傳動件、液壓傳動件、電力傳動件和磁力傳動件。這里只介紹機(jī)械傳動件,如齒輪、偏心輪、傳動軸支架主要起固定電機(jī)的作用,也是電機(jī)與其他機(jī)械結(jié)構(gòu)連接的主要零件之一輸出頭輸出頭是電機(jī)軸伸與其它動作機(jī)構(gòu)建立連接關(guān)系的零件聯(lián)軸器主要用于連接輪(胎)與輸出頭或電機(jī)軸伸(步進(jìn)電機(jī))。不同的輪或電機(jī)需要配不同的聯(lián)軸器,如圖1-9所示。輪&標(biāo)準(zhǔn)件
構(gòu)件的基本連接固定連接鉸鏈連接零件的空間關(guān)系1.3設(shè)計(jì)與裝配常規(guī)設(shè)計(jì)與裝配
常規(guī)設(shè)計(jì)與裝配——以智能道閘為示例介紹簡單機(jī)構(gòu)的裝配方法與步驟選配所需要的零件組裝構(gòu)件組裝舵機(jī)組裝橫桿整體裝配自主設(shè)計(jì)與裝配了解基本零件的特點(diǎn)、常用的基本零件及組合裝配方法,然后根據(jù)設(shè)計(jì)需要將不同基本零件進(jìn)行自由組合裝配創(chuàng)作出不同的機(jī)構(gòu)分析被控對象(機(jī)器人或機(jī)械機(jī)構(gòu))基本功能及工作環(huán)境、預(yù)期動作或工作姿態(tài)、運(yùn)動軌跡、運(yùn)動算法等,依此設(shè)計(jì)主體機(jī)構(gòu)的雛形。借助計(jì)算機(jī)輔助設(shè)計(jì)軟件構(gòu)建機(jī)構(gòu)主體或模擬裝配步驟。設(shè)計(jì)方案可行性評估。非標(biāo)準(zhǔn)件的設(shè)計(jì)加工。優(yōu)化整體結(jié)構(gòu)設(shè)計(jì)。
自主設(shè)計(jì)與裝配1.4控制裝置及其功能簡介初識Arduino/Barsh主控板通用數(shù)字I/O端口
0~13、14~19復(fù)用功能:ADC輸入A0~A5PWM口(3、5、6、9-11)串口通訊RX/TX(0、1)、SPI總線通訊、I2C通訊電源輸入:USB、VIN、DC電源輸出:5V、3.3V接地:GND與電源負(fù)極相連BigFish擴(kuò)展板探索者為Basra主控板提供了功能強(qiáng)大的擴(kuò)展板-BigFish,如圖1-25。BigFish擴(kuò)展板為核心板提供可靠穩(wěn)定的外圍電路(如8*8點(diǎn)陣)及接口,可連接傳感器、電機(jī)、輸出模塊、通信模塊等。電路連接方法Bigfish擴(kuò)展板與Basra主控板堆疊連接外電源連接鋰電池連接在1處的Basra的電池接口,并通過旁邊2處的電源開關(guān)控制電池接入或斷開,長時(shí)間不用時(shí)記得將電源關(guān)閉與計(jì)算機(jī)USB連接。通過microUSB口與計(jì)算機(jī)連接傳感器連接多數(shù)傳感器可通過4芯輸入線與Bigfish擴(kuò)展板的紅色4針接口相連電機(jī)連接
擴(kuò)展板自帶驅(qū)動,能同時(shí)驅(qū)動6路舵機(jī)和2路直流電機(jī)1.5配置編程環(huán)境配置配置編程
配置編程環(huán)境下載安裝ArduinoIDE登陸官方網(wǎng)站https://www.arduino.cc/en/software找到與自己電腦操作系統(tǒng)匹配的軟件版本,點(diǎn)擊下載安裝IDE開發(fā)環(huán)境顯示安裝協(xié)議,如圖1-30所示,點(diǎn)擊IAgree。選擇安裝內(nèi)容,如圖1-31所示,可按照默認(rèn)的勾選,點(diǎn)擊Next。選擇安裝路徑,點(diǎn)擊Install開始安裝,并顯示安裝進(jìn)度。安裝結(jié)束,點(diǎn)擊Close按鈕。此時(shí),桌面上應(yīng)該創(chuàng)建了快捷圖標(biāo)配置編程環(huán)境下載安裝USB驅(qū)動
在“我的電腦”圖標(biāo)上,單擊右鍵,找到并打開“設(shè)備管理器”。在左邊的端口列表中,找到“其他設(shè)備”中的USBSerialPort選中并單擊右鍵,再選擇圖所示的“更新驅(qū)動程序”。如圖所示,在互聯(lián)網(wǎng)環(huán)境下,可選擇“自動搜索更新的驅(qū)動程序軟件”。否則,選擇第二項(xiàng),手動查找并安裝驅(qū)動程序軟件,繼續(xù)按照步驟3)和4)進(jìn)行操作。配置編程環(huán)境在圖1-34所示的安裝路徑下,選擇“Arduino\drivers”,選中“FTDIUSBDrivers””文件夾,單擊“確定”按鈕。單擊“下一步”按鈕,系統(tǒng)便開始更新或安裝USB驅(qū)動程序。安裝結(jié)束,打開“設(shè)備管理器”,在“端口(COM和LPT)”列表中出現(xiàn)“USBSerialPort(COMxx)”(xx是數(shù)字,用來表示端口號)表示驅(qū)動安裝成功。記錄下該端口COMxx,如圖中的端口為COM10。編程環(huán)境簡介初識IDE界面編程環(huán)境簡介設(shè)置選項(xiàng)參數(shù)1.6設(shè)計(jì)之體驗(yàn):Blink設(shè)計(jì)之體驗(yàn)——Blink硬件電路連接用USB線,將PC
連接到BASRA或UNOR3主控板。打開示例Blink打開菜單“文件—示例—01Basic”,選擇Blink,點(diǎn)擊打開例程,或者創(chuàng)建一個(gè)Scatch.ino文件,手動輸入程序代碼。選擇通信端口和開發(fā)板型號按照前一節(jié)內(nèi)容,開發(fā)板型號ArduinoUNOR3和串口端口號COMx驗(yàn)證程序代碼單擊工具欄
圖標(biāo)校驗(yàn)程序語法錯誤。除錯/修改程序重復(fù)4、5直至無錯下載運(yùn)行程序單擊
將編譯程序無誤后并傳送到控制板并運(yùn)行。這時(shí)圖(a)中箭頭所示板載LED燈開始不停閃爍。圖(a)圖(b)
動手體驗(yàn)設(shè)計(jì)的魅力——Blink文件——首選項(xiàng),可以修改編輯器字體大小DEMO程序——Blink解讀delay函數(shù)運(yùn)行時(shí),計(jì)算、讀寫引腳等操作均無法同時(shí)執(zhí)行。實(shí)驗(yàn)現(xiàn)象:LED每隔1s交替閃爍一次void
setup(){
//配置I/O端口pinMode(LED_BUILTIN,OUTPUT);}void
loop(){
//給指定端口寫一個(gè)信號
digitalWrite(LED_BUILTIN,HIGH);
delay(1000);digitalWrite(LED_BUILTIN,LOW);
delay(1000);};語句結(jié)束{}程序段//行注釋/**/段注釋謝謝大家編程基礎(chǔ)半導(dǎo)體器件的應(yīng)用分析目
錄CONTENT1常量、變量與表達(dá)式2常用運(yùn)算符3流程控制的基本結(jié)構(gòu)4函數(shù)及其調(diào)用規(guī)則5復(fù)合數(shù)據(jù)類型6庫函數(shù)2.1變量、常量與表達(dá)式常量1.常量程序運(yùn)行過程中,其值不能被修改的量稱為常量。一般分為整型常量(如3、A0)、實(shí)型常量(如3.14、12e3)、字符型常量(如‘a’、‘d’)等,通常從其字面形式即可判別,也可以用一個(gè)指定的標(biāo)識符代表一個(gè)常量,一般形式:#define標(biāo)識符字符串。如:#define
PI
3.14在程序中,用#define命令行定義PI代表常量或字符串3.14,此后該工程文件出現(xiàn)PI代表3.14。這種用一個(gè)標(biāo)識符代表一個(gè)常量的,稱為符號常量,即標(biāo)識符常量。該定義稱為宏定義,標(biāo)識符PI稱為“宏名”,在編譯預(yù)處理時(shí),程序中所有宏名被替換成字符串,這個(gè)替換過程稱為“宏展開”。習(xí)慣上,符號常量名用具有一定含義的大寫字母。變量
變量的定義:程序運(yùn)行過程中,其值可以被修改的量稱為變量。它分為局部變量和全局變量。C++/C語言提倡使用具有一定含義的小寫字母表示變量名。變量的命名規(guī)則:在名稱中只能使用字母字符、數(shù)字和下畫線(-)三種字符。名稱中第一個(gè)字符不能是數(shù)字。區(qū)分大寫字母和小寫字母。不能將C++/C語言的關(guān)鍵字作為變量。C++/C語言對名稱長度(字符個(gè)數(shù))無統(tǒng)一規(guī)定,隨系統(tǒng)而不同。以兩個(gè)下畫線或下畫線和大寫字母打頭的名稱被保留給實(shí)現(xiàn)(編譯器及其使用的資源)使用。以一個(gè)下畫線開頭的名稱被保留給實(shí)現(xiàn),用作全局標(biāo)識符。例如,像_time_stop或_Count這樣的名稱不會導(dǎo)致編譯器錯誤,會留給實(shí)現(xiàn)使用,但會導(dǎo)致結(jié)果的不確定性。在C語言中,變量須遵循“先定義,后使用”的原則。
未被事先定義的,不能作為變量名。每個(gè)變量名被指定為一個(gè)確定類型,在編譯時(shí)為其分配相應(yīng)的存儲單元。在編譯時(shí),確保變量所進(jìn)行的運(yùn)算合法,每一個(gè)變量有一個(gè)所屬類型。2.變量變量局部變量局部變量又稱內(nèi)部變量,函數(shù)內(nèi)定義的變量。作用域:僅限本函數(shù)內(nèi)部。全局變量
例如voidsetup()
//初始化
{
intpin;//定義變量pinfor(pin=2;pin<10;pin++)
{pinMode(pin,OUTPUT);digitalWirite(pin,LOW);}}全局變量又稱外部變量,函數(shù)外部定義的變量。作用域:整個(gè)工程文件中所有函數(shù)。例如:intledRed=10;voidsetup(){
pinMode(ledRed,OUTPUT);
}voidloop()
{digitalWrite(ledPin,HIGH);}變量根據(jù)變量定義與命名規(guī)則,變量定義的通用格式如下:通用格式:類型說明符變量名(賦值符號)(初始值);例如:unsignedlonglast_time(=)(0);//括號內(nèi)容根據(jù)需要定變量定義的通用格式變量賦初值程序中常常需要對一些變量預(yù)先設(shè)置初值。C/C++規(guī)定,可以在定義變量時(shí)同時(shí)初始化變量,也可以使被定義的部分變量賦初值;如果多個(gè)變量初值相同,則需要分別賦初值。例如:inti,sensorVal=0;//定義i,sensorVal為整型變量,sensorVal初值為0doubledata=0.00;//定義data為雙精度型變量,初值為0.00charstate=’a’;//定義state為字符型變量,初值為a變量變量的數(shù)據(jù)類型整型變量實(shí)型變量字符型變量
。。。等等變量變量的限定符數(shù)據(jù)類型轉(zhuǎn)換自動轉(zhuǎn)換強(qiáng)制轉(zhuǎn)換(typeName)value將value值轉(zhuǎn)換成所需要typeName類型typeName(value)將value值轉(zhuǎn)換成所需要typeName類型例如:int值類型轉(zhuǎn)換成double類型(double)sensorVal將int型的變量sensorVal值轉(zhuǎn)換成double類型double(sensorVal)表達(dá)式用運(yùn)算符和括號將運(yùn)算對象(也稱操作數(shù))按照一定運(yùn)算法則結(jié)合起來的式子。運(yùn)算對象包括常量、變量、函數(shù)等。例如:(1)
x+1.5*2(2)
(vall>100&&valr<100)表達(dá)式運(yùn)算符運(yùn)算對象運(yùn)算法則表達(dá)式2.2常用運(yùn)算符2.2.1基本運(yùn)算符算術(shù)運(yùn)算符基本運(yùn)算符關(guān)系運(yùn)算符邏輯運(yùn)算符基本:+,-,*,/
特殊:%(求余),/(取整),++(自加),--(自減)例如:i=0;i++;結(jié)果1i=3%2;
結(jié)果1i=3/2;
結(jié)果0==(等于)!=(不等于)<
(小于)>
(大于)<=(小于等于)>=(大于等于)&&
邏輯與(同時(shí)滿足)||邏輯或(滿足其中之一)!邏輯非(取反)例如:x!=y;;變量x不等于y
例如:x=!y;y取反后
賦值x
if(a>2&&b<5)if(a>2||b<5)位操作運(yùn)算符位操作運(yùn)算符inta=92;
//inbinary:0000000001011100intb=101;//inbinary:0000000001100101intc=a&b;//result:0000000001000100,or68indecimal.舉例說明0000
0000
0101
11000000
0000
0110
01010000
0000
0100
0100其它運(yùn)算符其它運(yùn)算符賦值運(yùn)算符:“=”,
如:inti=0;下標(biāo)運(yùn)算符:“[]”,如:a[5]={0,1,2,3,4};字節(jié)運(yùn)算符:“.”,
如:Serial.begin()逗號運(yùn)算符:“,”,
如:pinMode(9,OUTPUT);分號運(yùn)算符:“;”,
如:語句;“()”、“{}”、……條件運(yùn)算符:“?:”如:x<0?y=10:z=20
53if(x<0)y=10;elsez=20;運(yùn)算符的優(yōu)先級和結(jié)合性2.3流程控制的基本結(jié)構(gòu)2.2流程控制的基本結(jié)構(gòu)循環(huán)結(jié)構(gòu)選擇結(jié)構(gòu)順序結(jié)構(gòu)自上而下按順序執(zhí)行。使程序具有決策能力。語句:if,switchcase程序需要執(zhí)行重復(fù)操作。語句:for,whiledo,dowhile三種基本結(jié)構(gòu)1.流程控制的三種基本結(jié)構(gòu)選擇結(jié)構(gòu)選擇語句1.條件選擇語句——if語句if(表達(dá)式)語句if(表達(dá)式)語句if(表達(dá)式)語句例如,
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選擇結(jié)構(gòu)2.多分支選擇語句——switch語句switch語句是多分支選擇語句,其執(zhí)行過程如圖所示。一般形式如下:switch(表達(dá)式){case常量1:語句1;case常量2:語句2;?case常量n:語句n;default:語句n+1;}使用注意事項(xiàng)在執(zhí)行switch語句時(shí),根據(jù)()表達(dá)式值與某一個(gè)case后面的常量表達(dá)式值相等時(shí),就執(zhí)行該case后內(nèi)嵌語句,不再進(jìn)行判斷;否則執(zhí)行default后面的語句。每一個(gè)case的值必須互不相同。各個(gè)case出現(xiàn)順序不影響執(zhí)行結(jié)果。執(zhí)行一個(gè)case分支后,由break語句終止switch語句執(zhí)行。循環(huán)結(jié)構(gòu)while循環(huán)語句1.while循環(huán)2.
dowhile循環(huán)循環(huán)dowhile用來實(shí)現(xiàn)“直到型”循環(huán)結(jié)構(gòu),一般形式:do{語句;}while(表達(dá)式);while語句用來實(shí)現(xiàn)當(dāng)型循環(huán)結(jié)構(gòu)。一般形式:while(表達(dá)式)
{
語句;}循環(huán)結(jié)構(gòu)for循環(huán)語句C語言中的for語句使用多個(gè)表達(dá)式,組合靈活,既可以實(shí)現(xiàn)有限次循環(huán),也能實(shí)現(xiàn)無限次循環(huán)。for語句的一般形式如下:for(表達(dá)式1;表達(dá)式2;表達(dá)式3){…;//執(zhí)行語句}執(zhí)行過程如右圖所示:第1步,先求解表達(dá)式1。第2步,求解表達(dá)式2,若其值為真(非0),則執(zhí)行for循環(huán)中內(nèi)嵌的語句,然后再執(zhí)行第3步;若為假(0),則結(jié)束循環(huán),跳到第5步。第3步,求解表達(dá)式3。第4步,返回第2步繼續(xù)執(zhí)行。第5步,執(zhí)行for循環(huán)語句下面的一個(gè)語句。2.4函數(shù)及其調(diào)用規(guī)則函數(shù)函數(shù)的定義根據(jù)函數(shù)是否有返回值可分為無返回值的函數(shù)和有返回值的函數(shù)。無返回值的函數(shù)稱為void函數(shù)。2.有返回值函數(shù)一般形式類型說明符函數(shù)名(參數(shù)列表){語句;returnvalue;}1.無返回值函數(shù)
一般形式:void函數(shù)名(參數(shù)列表){
語句;return;//可省略}例如,延時(shí)函數(shù)voiddelay(intms){for(inti=0;i<ms;i++)}說明:return只能返回一個(gè)值,而不能返回多個(gè)值;return帶回的返回值的類型應(yīng)與定義函數(shù)時(shí)函數(shù)的類型一致。如果函數(shù)中沒有return語句,返回值是一不確定數(shù)。函數(shù)根據(jù)函數(shù)是否帶有參數(shù),函數(shù)可分為有參函數(shù)和無參函數(shù)。一般形式:
類型標(biāo)識符
函數(shù)名(){
語句;}
用類型標(biāo)識符指定函數(shù)值的類型,即函數(shù)帶回來的值的類型。
例如,在ArduinoIDE開發(fā)環(huán)境中內(nèi)嵌的voidsetup()和voidloop()兩個(gè)函數(shù)都是無參函數(shù)。1.無參函數(shù)一般形式:
類型標(biāo)識符函數(shù)名(形式參數(shù)列表)
{
語句;
}函數(shù)調(diào)用,形式參數(shù)將被實(shí)際參數(shù)所取代2.有參函數(shù)voidblinkLED(intcycles,intdel)/*形式參數(shù)類型int*/{
for(intz=0;z<cycles;z++)/*函數(shù)體*/
{
digitalWrite(LED,HIGH);
delay(del);
digitalWrite(LED,LOW);
delay(del);
}
}例如,voidloop(){blinkLED(6,200);/*調(diào)用函數(shù),實(shí)際參數(shù)*/delay(1000);}函數(shù)的調(diào)用函數(shù)的調(diào)用格式(1)函數(shù)語句:函數(shù)調(diào)用作為一個(gè)語句。
例如,delay(10(2)函數(shù)表達(dá)式:函數(shù)作為表達(dá)式的一部分參與表達(dá)式運(yùn)算。
例如,intsensorValue=analogRead(A0);(3)函數(shù)參數(shù):函數(shù)調(diào)用作為一個(gè)函數(shù)的實(shí)參。
例如,Serial.println(random(300));函數(shù)的調(diào)用規(guī)則(1)被調(diào)函數(shù)必須是已經(jīng)存在的函數(shù)(庫函數(shù)或用戶已定義過的函數(shù))。
(2)調(diào)用庫函數(shù)時(shí),應(yīng)在程序開頭用#include命令將包含被調(diào)函數(shù)的有關(guān)庫函數(shù)包含到本文件來。
例如,#include<Servo.h>,其中Servo.h是一個(gè)有關(guān)伺服舵機(jī)的頭文件。(3)調(diào)用用戶自定義函數(shù)時(shí),如果該函數(shù)與主調(diào)函數(shù)同處一個(gè)文件中,C語言規(guī)定一般應(yīng)在主調(diào)函數(shù)中對該被調(diào)用函數(shù)的返回值類型加以說明。一般形式:類型說明符
被調(diào)用函數(shù)的函數(shù)名();被調(diào)用函數(shù)返回值為整型或字符型時(shí),可不進(jìn)行說明。被調(diào)用函數(shù)定義在主調(diào)函數(shù)之前,也可不對其進(jìn)行說明。函數(shù)的調(diào)用函數(shù)的嵌套調(diào)用在函數(shù)的調(diào)用過程中,直接或間接調(diào)用它自身稱為遞歸調(diào)用。這種函數(shù)稱為遞歸函數(shù)。在遞歸調(diào)用中,主調(diào)函數(shù)又是被調(diào)函數(shù)。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身。每調(diào)用一次就進(jìn)入新的一層。函數(shù)的遞歸調(diào)用例如,intf(intx)
{inty;z=f(y);returnz;}2.5復(fù)合數(shù)據(jù)類型數(shù)組一維數(shù)組的定義和引用
數(shù)組(array)是一種數(shù)據(jù)格式,是多個(gè)相同類型的有序數(shù)據(jù)的組合。用一個(gè)統(tǒng)一的數(shù)組名和下標(biāo)來唯一地確定數(shù)組中的元素。一維數(shù)組的定義一般格式:類型說明符
數(shù)組名[數(shù)組中的元素?cái)?shù)];
例如,shortmonths[12];一維數(shù)組的引用數(shù)組必須先定義,后使用。數(shù)組元素逐個(gè)地引用而不能一次引用數(shù)組中的全部元素。數(shù)組元素的表現(xiàn)形式:數(shù)組名[下標(biāo)],下標(biāo)值最大值為數(shù)組元素?cái)?shù)目-1一維數(shù)組的初始化在定義數(shù)組時(shí)對數(shù)組元素進(jìn)行初始化。如,static類型說明符數(shù)組名[N]={值0,值1,…值N-1};部分元素賦初值。如,staticinta[10]={0,1,2,3,4};
表示給前5個(gè)元素賦初值如果數(shù)組中的全部元素值為0,可以寫成,longtotals[200]={0};定義不指定數(shù)組大小,由初始化的數(shù)組元素來確定大小,例如,staticinta[]={0,1,2,3,4};數(shù)組二維數(shù)組的定義和引用二維數(shù)據(jù)的定義一般格式:類型說明符數(shù)組名[數(shù)組元素行數(shù)目M][數(shù)組元素列數(shù)目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]}};二維數(shù)據(jù)的引用使用數(shù)組元素時(shí),應(yīng)該注意下標(biāo)值應(yīng)在已定義的數(shù)組大小的范圍內(nèi)。二維數(shù)組的元素表示形式為:數(shù)組名[下標(biāo)][下標(biāo)]與一維數(shù)組類似,行下標(biāo)值最大值為數(shù)組元素行數(shù)目M-1,列下標(biāo)最大值為數(shù)組元素列數(shù)目N-1。二維數(shù)組的初始化按行給二維數(shù)組賦初值。例staticinta[3][4]={{0,1,2,3},{4,5,6,7},{3,5,9,0}}將所有數(shù)據(jù)寫在一個(gè)花括號內(nèi),按數(shù)組排列順序?qū)υ刭x初值。
例如,staticinta[3][4]={0,1,2,3,4,5,6,7,3,5,9,0};對部分元素賦初值。例如,staticinta[3][4]={{0},{0,5,6}};如果對全部元素賦初值,但定義數(shù)組時(shí)對第一維的長度可以不指定,第二維的長度不能省略。2.7庫函數(shù)庫函數(shù)的調(diào)用方法常用的庫函數(shù)基礎(chǔ)庫函數(shù)外設(shè)庫函數(shù)自定義庫函數(shù)基于開源平臺Arduino庫函數(shù)的調(diào)用基礎(chǔ)庫函數(shù)調(diào)用Arduino基礎(chǔ)函數(shù)庫包括處理輸入/輸出功能的相關(guān)函數(shù)、數(shù)學(xué)函數(shù)、三角函數(shù)、定時(shí)函數(shù)、通訊函數(shù)、外部中斷函數(shù)與中斷函數(shù),位操作與字節(jié)操作函數(shù)、特征函數(shù)、USB函數(shù)等。調(diào)用前只需進(jìn)行參數(shù)配置。如,pinMode(pin,mode)
→pin(2,INPUT);外設(shè)函數(shù)庫調(diào)用調(diào)用前,需要先將該庫函數(shù)所在的函數(shù)庫頭文件*.h以#include<*.h>方式添加工程文件中。調(diào)用加載庫中已存在的函數(shù)庫。例如,項(xiàng)目-加載庫-Servo,即可添加#include<Servo.h>;也可在代碼區(qū)手動輸入。被調(diào)用庫函數(shù)不包含在加載庫中的函數(shù)庫。需要先在線安裝函數(shù)庫項(xiàng)目——加載庫——管理庫…,在庫管理器中搜索需要的庫函數(shù)名,并選擇相應(yīng)的版本安裝。貢獻(xiàn)庫的使用方法打開庫管理找到要安裝的庫點(diǎn)擊安裝打開“項(xiàng)目”菜單打開“包含庫”菜單命令找到要安裝的函數(shù)庫基于ArduinoIDE2.0以上版本的外設(shè)函數(shù)庫的調(diào)用自定義庫函數(shù)自定義庫函數(shù)的編寫與調(diào)用建立新的標(biāo)簽第1步
打開ArduinoIDE開發(fā)環(huán)境,點(diǎn)擊新建按鈕,創(chuàng)建一個(gè)新的sketch工程文件。第2步
按照同樣的方法步驟再創(chuàng)建一個(gè)后綴為.h頭文件,例如LED.h。注意:用戶自定義庫函數(shù)至少需要創(chuàng)建一對文件“*.c和*.h”或者“*.cpp和*.h”。當(dāng)然也可以根據(jù)需要創(chuàng)建其它輔助的文件。創(chuàng)建新的文件第3步
空白新文件創(chuàng)建完成,就可以按照文件后綴指定語言格式分別編寫庫函數(shù)的頭文件LED.h和源代碼文件LED.cpp。自定義庫函數(shù)示例參考代碼自定義庫函數(shù)
庫函數(shù)的封裝所謂庫函數(shù)封裝就是把一個(gè)或者多個(gè)功能通過函數(shù)、類的方式組合起來,對外只提供一個(gè)簡單的函數(shù)接口。如參考代碼中,通過定義類led及其成員函數(shù)setMode()、setValue()把引腳的功能設(shè)置封裝成一個(gè)庫。將文件保存或另存在安裝路徑下的Arduino\libraries里,這里命名為LED。打開libraries文件夾,在此可以看到剛剛創(chuàng)建的文件夾LED,文件夾里是已保存的庫函數(shù)文件。該文件夾名為用戶自定義,通常使用一些能說明庫函數(shù)含義的字母命名。自定義庫函數(shù)識別新庫的關(guān)鍵字在庫文件夾還應(yīng)定義一個(gè)keywords.txt文件,用來描述新自定義庫函數(shù)給Arduino貢獻(xiàn)的新關(guān)鍵字通用格式如下:關(guān)鍵字(〈Tab〉鍵)類型自定義庫函數(shù)庫函數(shù)的引用第1步,打開項(xiàng)目——加載庫——添加.ZIP庫…,在文件資源管理器找到庫文件LED,選擇打開,如圖所示,該庫即被加載到加載庫的下拉菜單選項(xiàng)中。添加.ZIP庫選擇含有庫的文件/文件夾第2步,再次打開項(xiàng)目——加載庫,在彈出的下拉菜單里找到剛加載的庫LED并選中,庫函數(shù)頭文件LED.h就被引用到sketch文件的首行:#include<LED.h>第3步,參考LED庫文件夾的keywords.txt文件中的關(guān)鍵詞,在編輯窗口編寫LED燈的閃爍程序。注意這里需要在voidsetup()函數(shù)前面先定義一個(gè)led的全局對象,如ledled1;然后編寫代碼時(shí)才能直接調(diào)用自定義庫函數(shù)的功能函數(shù)(如led類的成員函數(shù))。自定義庫函數(shù)程序參考代碼自定義庫函數(shù)
自定義函數(shù)庫封裝后,如果想對外發(fā)布,還需要提供若干個(gè)示例程序。例如前面編寫的閃爍程序LED_test,來演示新庫的使用方法。
在庫文件夾中新建examples文件夾,將所有的例程保存在這里,如圖所示。這樣加載新庫時(shí),這些示例程序就可以一起加載到ArduinoIDE開發(fā)環(huán)境的菜單命令文件(File)——示例(Examples)菜單里。提供自定義函數(shù)庫的示例程序謝謝大家機(jī)器人控制系統(tǒng)的構(gòu)建基礎(chǔ)半導(dǎo)體器件的應(yīng)用分析但目
錄CONTENT1控制系統(tǒng)的基本構(gòu)成2輸入-輸出(I/O)端口及其應(yīng)用3中斷4鍵盤模塊及其應(yīng)用5常用顯示模塊及應(yīng)用6常用執(zhí)行機(jī)構(gòu)及應(yīng)用3.1控制系統(tǒng)的基本構(gòu)成控制系統(tǒng)的基本構(gòu)成簡單的開環(huán)控制系統(tǒng)通常由輸入設(shè)備、控制器、輸出設(shè)備三部分組成。輸入設(shè)備主要用來接收外部信息,控制器對信息進(jìn)行處理并根據(jù)處理結(jié)果發(fā)出控制指令,輸出設(shè)備即執(zhí)行機(jī)構(gòu)執(zhí)行控制的指令閉環(huán)控制系統(tǒng)閉環(huán)控制系統(tǒng)是將輸入量與反饋量比較后產(chǎn)生的偏差量送給控制器,再通過控制器產(chǎn)生指令控制輸出設(shè)備,從而調(diào)節(jié)輸出量。系統(tǒng)輸出量返回到輸入端,對控制過程產(chǎn)生影響。與開環(huán)控制相比,閉環(huán)控制系統(tǒng)精度高、動態(tài)性能好、抗干擾能力強(qiáng),但結(jié)構(gòu)比較復(fù)雜控制系統(tǒng)的基本構(gòu)成控制系統(tǒng)各部分功能控制器,
作為控制系統(tǒng)的核心單元,主要將輸入端口讀取的外部指令信息進(jìn)行分析運(yùn)算、處理、存儲或通過輸出端口向執(zhí)行機(jī)構(gòu)發(fā)送控制指令。輸入設(shè)備
,一類特殊功能的物理元件或化學(xué)元件,能感受或探測到外部環(huán)境信息或操作指令,將之轉(zhuǎn)化為電信號或其它可以表示的信息。各種傳感器、鍵盤、鼠標(biāo)等輸出設(shè)備,各種執(zhí)行機(jī)構(gòu)及驅(qū)動控制電路的總和,主要接收來自控制器輸出端口的控制息命令,轉(zhuǎn)化并執(zhí)行相應(yīng)的命令信息,產(chǎn)生能改變或調(diào)節(jié)系統(tǒng)工作狀態(tài)的行為動作或操作。包括各類執(zhí)行電機(jī)、電磁閥、繼電器、蜂鳴器、指示燈、顯示模塊以及各種驅(qū)動電路等。檢測裝置,檢測裝置主要有傳感器、數(shù)據(jù)采集以及反饋環(huán)構(gòu)成。作用主要是檢測輸出量信息或環(huán)境信息等,并將測量值以特定形式的信號傳送到輸入端或控制器,以便對系統(tǒng)進(jìn)行調(diào)節(jié)。電源系統(tǒng),
電源是機(jī)器人正常工作的動力保障,也是控制系統(tǒng)穩(wěn)定可靠運(yùn)行的關(guān)鍵。3.2輸入-輸出(I/O)端口及其應(yīng)用輸入-輸出(I/O)端口及其應(yīng)用即輸入/輸出端口。它是控制器與外設(shè)之間進(jìn)行信息交換的通道。作為輸入時(shí),從外界接收檢測信號、鍵盤信號等信息;作為輸出時(shí),向外界輸送單片機(jī)內(nèi)部電路的運(yùn)算結(jié)果、顯示信息、控制命令和驅(qū)動信號等。以ATmega328為內(nèi)核的開源主控板ArduinoUNO、Basra等都具有獨(dú)立位操作功能的雙向通用I/O端口(D0~D19),當(dāng)作為通用數(shù)字I/O端口使用時(shí),每個(gè)引腳都具有真正的讀取-修改-寫入功能,并且可以通過程序單獨(dú)定義成輸入或輸出口。使用時(shí),用戶可通過Arduino基礎(chǔ)函數(shù)庫提供的數(shù)字I/O的配置函數(shù)來進(jìn)行設(shè)定。I/0(英文Input/Output的縮寫)端口數(shù)字I/O端口及其應(yīng)用數(shù)字I/O端口及其應(yīng)用【實(shí)踐項(xiàng)目】按鍵控制LED閃爍?!緦?shí)踐材料】Arduino主控板1塊,紅黃綠LED各1、220?限流電阻3個(gè)、10k?電阻1個(gè)、按鍵1個(gè)、面包板
1塊,以及面包板導(dǎo)線若干;【實(shí)踐要求】按住按鍵,LED閃爍;松開按鍵,LED熄滅。LED及其電路連接方法LED的工作原理LED一般指發(fā)光二極管,是一種可以將電能轉(zhuǎn)化為可見光的半導(dǎo)體器件,常用于信號指示燈、顯示等具有單向?qū)щ娦浴.?dāng)LED加上正向電壓(陽極接電源正極),且正向電壓大于二極管的通態(tài)管壓降時(shí),電流將從LED陽極流入,陰極流出,LED導(dǎo)通點(diǎn)亮;否則,二極管熄滅。LED的長管腳為陽極A,短管腳為陰極K。LED的亮度與流過二極管的正向電流有關(guān)。電流太小,二極管不亮,電流太大,將導(dǎo)致二極管因過流燒壞。使用時(shí):通常串聯(lián)一個(gè)限流電阻R以控制流過二極管的電流大小數(shù)字I/O端口及其應(yīng)用LED與Arduino電路連接
在控制系統(tǒng)中,LED通常是作為輸出元件連接在數(shù)字腳上,根據(jù)I/O端口上電流的流向不同,LED有拉電流和灌電流兩種接線方式。電流從電源流出,然后經(jīng)LED陽極、限流電阻、流入到I/O端口,這種接線方式稱為灌電流接線方法,也稱成為控共陰極接法。電流從I/O端口流出,經(jīng)限流電阻、LED,再流回到控制板上的電源負(fù)極GND,這種接線方式稱為拉電流接線方法,也稱為控陽極接法拉電流接線方法灌電流接線方法數(shù)字I/O端口及其應(yīng)用
電阻電阻通常分為貼片式和直插式色環(huán)電阻讀數(shù)四環(huán)電阻-前2環(huán)有效數(shù)字,第3環(huán)冪次方,第4環(huán)誤差。五環(huán)電阻-前3環(huán)有效數(shù)字,第4環(huán)冪次方,第5環(huán)誤差。六環(huán)電阻,第6環(huán)是溫度環(huán)數(shù)字I/O端口及其應(yīng)用
電路連接與面包板元件區(qū)豎連橫不連,電源區(qū)橫連豎不連分立元件需整型后再插入面包板,連接時(shí)注意不要短路、斷路數(shù)字I/O端口及其應(yīng)用
按鍵及其電路連接方法按鍵開關(guān)及其工作原理輕觸式按鍵開關(guān)是一種電子開關(guān),屬于電子器件類,依靠內(nèi)部金屬彈片受力變化來實(shí)現(xiàn)通斷。自然狀態(tài)開關(guān)是斷開的,此時(shí)同側(cè)兩個(gè)引腳相通。當(dāng)按鈕按下時(shí),開關(guān)閉合四個(gè)引腳全部接通;松開按鈕,開關(guān)立即斷開,恢復(fù)到自然狀態(tài)數(shù)字I/O端口及其應(yīng)用按鍵常用接線方式u上拉電阻接法u下拉電阻接法u內(nèi)置上拉電阻接法
開關(guān)斷開時(shí),I/O端口通過電阻R1接地,輸入引腳電平為LOW(低);開關(guān)閉合時(shí),I/O端口經(jīng)按鍵直接與+5V相連,輸入引腳電平為HIGH(高)。開關(guān)斷開時(shí),I/O端口通過電阻R1連接+5V,輸入引腳電平為HIGH(高);開關(guān)閉合時(shí),I/O端口經(jīng)按鍵直接接地,輸入引腳電平為LOW(低)。數(shù)字I/O端口及其應(yīng)用
電路設(shè)計(jì)主控板選擇ArduinoUNO,按鍵采用下拉電阻,LED采用拉電流接法。數(shù)字腳3連接按鍵,數(shù)字腳9連接LED。下拉電阻R1選擇10kΩ,限流電阻R2選擇220Ω。數(shù)字I/O端口及其應(yīng)用數(shù)字腳3連接的按鍵使用下拉電阻,執(zhí)行讀操作函數(shù)digitalRead(3)的結(jié)果:按鍵按下,返回值HIGH;按鈕松開,返回值LOW。根據(jù)設(shè)計(jì)要求和讀取的按鍵結(jié)果,通過digitalWrite()函數(shù)向連接LED的輸出端口寫入HIGH或LOW,控制其亮滅。
數(shù)字I/O端口的讀/寫操作1.
程序設(shè)計(jì)#defineKey3//數(shù)字腳3連按鍵Key,數(shù)字腳8連接LED#defineLED8voidsetup(){//在Arduino上電或復(fù)位(按RESET)時(shí),只運(yùn)行1次
pinMode(Key,INPUT);//初始化Key配置為輸入,LED配置為輸出pinMode(LED,OUTPUT);}
voidloop(){intkeyval=digitalRead(Key);//讀鍵值,結(jié)果存入變量keyvalif(keyval==HIGH){//若鍵值為HIGH,執(zhí)行下面{}中的內(nèi)嵌語句
digitalWrite(LED,HIGH);//向數(shù)字腳LED寫一個(gè)HIGH,LED導(dǎo)通點(diǎn)亮delay(500);//延遲等待500msdigitalWrite(LED,LOW);//向數(shù)字腳LED寫一個(gè)LOW,LED截止熄滅delay(500);}//延時(shí)等待500ms}數(shù)字I/O端口及其應(yīng)用
按鍵消抖抖動產(chǎn)生原因按鍵是一種機(jī)械彈性開關(guān),所以在閉合和斷開的瞬間會伴隨一連串的抖動,這種抖動反映到電路上即產(chǎn)生電平變化,如圖3-21所示。按鍵抖動影響按鍵抖動會導(dǎo)致一次按鍵被誤讀多次,為導(dǎo)致CPU產(chǎn)生誤操作,需要在信號切換時(shí)等待電路穩(wěn)定后再讀取按鈕狀態(tài),即按鍵消抖。抖動消除方法硬件消抖。如用RS觸發(fā)器電路;軟件消抖。即延時(shí)消抖,第1次檢測到按鍵閉合后,先執(zhí)行10~20ms的延時(shí)程序,再次檢測鍵狀態(tài),若兩次相同則按鍵有效。數(shù)字I/O端口及其應(yīng)用
動手做基本要求:在上述例程基礎(chǔ)上增加2個(gè)LED,實(shí)現(xiàn)按住按鍵多個(gè)LED輪流亮滅進(jìn)階要求:在基本要求基礎(chǔ),實(shí)現(xiàn)按下按鍵,LED閃爍;再次按下按鍵,LED熄滅。提示:按下按鍵按下再松開,LED依然閃爍,直到再次按下按鍵,LED熄滅。根據(jù)右下方的電路原理圖,編程實(shí)現(xiàn)十字路口的交通燈控制模擬輸入端口及其應(yīng)用
在Arduino控制系統(tǒng)中,模擬輸入A0~A5是與數(shù)字腳14~19復(fù)用的。與數(shù)字I/O不同的是,模擬輸入端口的信號是單向傳輸,使用時(shí)不需要在setup()函數(shù)中設(shè)置端口的工作模式。模擬信號,如聲音、溫度、光線、速度等等可以用連續(xù)變化的物理量表示的信息,信號的幅值、頻率或相位會隨時(shí)間變化而作連續(xù)變化。模擬信號能夠精確、真實(shí)地反映事物客觀現(xiàn)象。但是,計(jì)算機(jī)無法直接處理模擬信號。計(jì)算機(jī)要處理模擬信號,必須要先將其轉(zhuǎn)換成數(shù)字量。模擬信號轉(zhuǎn)換為數(shù)字信號需要經(jīng)過信號采集、信號調(diào)理、模數(shù)轉(zhuǎn)換等過程。
模擬信號傳感器就是一種信號采集裝置,圖3-26是一些常見的模擬量傳感器。它可以把被測的模擬信號按照一定規(guī)律轉(zhuǎn)換成易于處理、傳輸、存儲的電信號或其它形式的信息。A/D轉(zhuǎn)換器接收的模擬信號為0~5V或0~3.3V電壓信號,ATmega328默認(rèn)接收的模擬信號為0~5V的電壓信號
傳感器模擬輸入端口及其應(yīng)用
模擬輸入端口與模擬讀操作ArduinoUNO內(nèi)置一個(gè)10位A/D轉(zhuǎn)換器,帶有6路相互獨(dú)立的模擬輸入通道A0~A5,可以同時(shí)連接6路模擬輸入信號。編程時(shí),通過執(zhí)行analogRead()函數(shù),將0~5V模擬信號轉(zhuǎn)換成0~1023的數(shù)值。
模擬輸入端口的應(yīng)用【實(shí)踐項(xiàng)目】用光敏電阻設(shè)計(jì)一個(gè)自動感應(yīng)燈【實(shí)踐材料】光敏電阻、10kΩ分壓電阻、220Ω限流電阻、LED、Arduino控制板、面包板及導(dǎo)線?!緦?shí)踐要求】每0.5s測量一次光線,并將測量數(shù)據(jù)送到串口顯示,能根據(jù)光線的數(shù)據(jù)控制燈的亮滅?!驹O(shè)計(jì)思路】光敏電阻是一種對光線非常敏感的元件。它的阻值隨著光強(qiáng)增大而減小。當(dāng)光線很暗時(shí),RL阻值很大(一般可達(dá)1.5MΩ),當(dāng)光線強(qiáng)時(shí),RL阻值很小,甚至可低至1kΩ以下。由于光敏電阻的特殊性能,經(jīng)常被用于環(huán)境光檢測,典型采樣電路如圖3-27所示。其中,RL為光敏電阻,分壓電阻R1選取10kΩ,工作電壓Vin為5v。根據(jù)串聯(lián)分壓原理,可計(jì)算出光敏電阻的電壓Vout模擬輸入端口及其應(yīng)用
電路設(shè)計(jì)
當(dāng)CPU對模擬腳端口A0執(zhí)行讀操作時(shí),會讀取到一個(gè)0~5V電壓信號,經(jīng)過內(nèi)置AD轉(zhuǎn)換器,該模擬信號被轉(zhuǎn)換成0~1023的數(shù)值。環(huán)境光線變化時(shí),光敏電阻RL的阻值會變化,Vout電壓也會隨之改變,analogRead()的返回值也會發(fā)生相應(yīng)的變化。配置I/O端口模擬輸入端口的信號是單向傳輸,模擬腳A0無需設(shè)置,只需將數(shù)字腳9配置為輸出即可模擬輸入端口及其應(yīng)用程序設(shè)計(jì)思路
首先,設(shè)定一個(gè)閾值x,如果analogRead()返回值>x,說明光線比參考基準(zhǔn)暗;如果analogRead()返回值<x,則光線比設(shè)定基準(zhǔn)強(qiáng)。然后以此為條件控制數(shù)字腳上的LED電路,光線暗時(shí)LED點(diǎn)亮,光線強(qiáng)時(shí)LED熄滅,從而實(shí)現(xiàn)對環(huán)境光線自動感應(yīng)和調(diào)節(jié)。#defineLED9//數(shù)字腳9連接LED#defineRLA0//光敏電阻連接模擬腳A0voidsetup(){pinMode(LED,OUTPUT);//配置數(shù)字腳9為輸出模式Serial.begin(9600);//啟動串口監(jiān)視}voidloop(){intserval=analogRead(RL);//模擬轉(zhuǎn)換結(jié)果送給變量servalSerial.println(serval); //測量結(jié)果輸出到串口if(serval>600){digitalWrite(LED,HIGH);//analogWrite(LED,serval/4);}elsedigitalWrite(LED,LOW);}delay(500)//每過0.5s測量一次模擬輸出端口及其應(yīng)用
在ArduinoUNO控制板上,模擬輸出端口(PWM輸出)與數(shù)字腳3、5、6、9、10、11復(fù)用,為便于與其它數(shù)字腳區(qū)別,其數(shù)字前增加了“~”符號。模擬輸出與PWM信號模擬輸出主要指PWM輸出。PWM(PulseWidthModulation)是脈沖寬度調(diào)制的簡稱。它是Arduino的定時(shí)器/計(jì)數(shù)器在PWM(快速PWM和相位修正PWM)工作模式下,在指定輸出端口產(chǎn)生的一種脈沖寬度可調(diào)的方波信號,如圖3-32所示。其中,圖中虛線表示不同占空比的輸出電壓平均值。調(diào)節(jié)脈沖信號的寬度可以調(diào)節(jié)PWM信號占空比,從而控制在該模擬端口輸出一個(gè)平均電壓在0~5V之間的電壓信號模擬寫操作與PWM信號的調(diào)節(jié)通過調(diào)用模擬寫操作函數(shù)analogWrite()向指定模擬引腳寫一個(gè)PWM信號。執(zhí)行analogWrite()后,該引腳將生成一個(gè)指定占空比的方波,直到下次再執(zhí)行寫操作時(shí),才能調(diào)整占空比在UNO板上,5和6輸出的PWM信號頻率為980Hz,其它引腳輸出的PWM信號頻率為490Hz。模擬寫作函數(shù)digigtalWrite()
模擬輸出端口的應(yīng)用R-BGRGBLED由紅(Red)、綠(Green)和藍(lán)(Blue)三色LED組成,相當(dāng)于把三個(gè)LED的陰極或陽極連在一起,引出公共端將三個(gè)陰極連起來引出公共陰極,稱為共陰極RGBLED;反之就是共陽極RGBLED示例——每過1秒鐘隨機(jī)變化一種顏色voidsetup(){}voidloop(){for(intpin=9;pin<12;pin++)
//隨機(jī)數(shù)依次送給9,10,11analogWrite(pin,random(0,255));delay(1000);}
動手做【設(shè)計(jì)要求】用電位器和LED設(shè)計(jì)一個(gè)調(diào)光燈,讓LED的亮度隨著電位器旋轉(zhuǎn)的角度而變化。提示:電位器是一種可變電阻器,使用時(shí)將電位器的固定端分別接到5V和GND,在轉(zhuǎn)動電位器旋鈕時(shí),輸出端就可以得到0~5V之間的電壓。電位器模擬輸入值的上下限(0~1023)與PWM輸出的上下限(0~255)正好對應(yīng),可以采用整除4的方法,也可以使用映射函數(shù)map(value,fromLow,fromHigh,toLow,toHigh)轉(zhuǎn)換。然后再通過analogWrite()函數(shù)輸出PWM信號。3.3中斷中斷的概念圖3-35中斷中斷的概念什么是中斷?正常情況下,CPU是按程序指令一條一條向下順序執(zhí)行的。但如果此時(shí)發(fā)生了某一事件B請求CPU迅速去處理,CPU暫停當(dāng)前的工作并保存斷點(diǎn)信息(壓棧保存現(xiàn)場),轉(zhuǎn)去處理事件B(響應(yīng)中斷,執(zhí)行中斷服務(wù)程序)。待CPU將事件B處理完畢后,再回到原來被中斷的地方(中斷返回)找回?cái)帱c(diǎn)信息(出?;謴?fù)現(xiàn)場),繼續(xù)執(zhí)行程序的過程稱為中斷中斷的幾個(gè)概念中斷請求中斷響應(yīng)中斷返回中斷屏蔽中斷源中斷優(yōu)先級中斷嵌套ATmega328的中斷源及其優(yōu)先級向量序號程序地址中斷源中斷定義10x0000RESET外部電平復(fù)位,上電復(fù)位,掉電檢測復(fù)位,看門狗復(fù)位20x0001INT0外部中斷請求030x0002INT1外部中斷請求140x0003PCINT0引腳電平變化請求050x0004PCINT1引腳電平變化請求160x0005PCINT2引腳電平變化請求270x0006WDT看門狗超時(shí)中斷80x0007TIMER2COMPA定時(shí)器/計(jì)數(shù)器2比較匹配A90x0008TIMER2COMPB定時(shí)器/計(jì)數(shù)器2比較匹配B100x0009TIMER2OVF定時(shí)器/計(jì)數(shù)器2溢出中斷110x000ATIMER1CAPT定時(shí)器/計(jì)數(shù)器1捕捉事件120x000BTIMER1COMPA定時(shí)器/計(jì)數(shù)器1比較匹配A130x000CTIMER1COMPB定時(shí)器/計(jì)數(shù)器1比較匹配B140x000DTIMER1OVF定時(shí)器/計(jì)數(shù)器1溢出中斷150x000ETIMER0COMPA定時(shí)器/計(jì)數(shù)器0比較匹配A160x000FTIMER0COMPB定時(shí)器/計(jì)數(shù)器0比較匹配B170x0010TIMER0OVF定時(shí)器/計(jì)數(shù)器0溢出中斷180x0011SPI,STCSPI串行傳輸完成190x0012USART,RXUSART接收完成200x0013USART,UDREUSART數(shù)據(jù)寄存器為空210x0014USART,TXUSART發(fā)射完成220x0015ADCADC轉(zhuǎn)換完成230x0016EEREADYEEPROM準(zhǔn)備240x0017ANALOGCOMP模擬比較器250x0018TWI2線串行接口260x0019SPMREADYSPM準(zhǔn)備高低定時(shí)中斷及應(yīng)用定時(shí)器與定時(shí)器函數(shù)庫ATmega328的內(nèi)部有3個(gè)定時(shí)器:Timer0、Timer1和Timer2定時(shí)器與Audino庫函數(shù)的關(guān)系定時(shí)器位數(shù)封裝函數(shù)PWM輸出引腳Timer08bit(256)delay()、millis()和micros()等5,6Timer116bit(65535)Servo.h、TimerOne庫等9,10Timer28bit(256)tone()、IRremote.h等3,11定時(shí)函數(shù)的應(yīng)用——以定時(shí)器2函數(shù)庫MsTimer2為例MsTimer2.h函數(shù)庫包含三個(gè)庫函數(shù):MsTimer2::start(),MsTimer2::stop()MsTimer2::set(unsignedlongms,void(*f)())定時(shí)中斷函數(shù)的應(yīng)用(1)定時(shí)器設(shè)置成員函數(shù):MsTimer2::set(unsignedlongms,void(*f)())參數(shù)含義:unsignedlongms表示定時(shí)時(shí)長,以ms為單位;void(*f)()表示定時(shí)時(shí)間到了CPU要執(zhí)行的中斷服務(wù)函數(shù);(2)啟動定時(shí)器成員函數(shù):MsTimer2::start();參數(shù)含義:開啟定時(shí)器2(3)關(guān)閉定時(shí)器成員函數(shù):MsTimer2::stop();參數(shù)含義:關(guān)閉定時(shí)器2MsTimer2.h函數(shù)庫三個(gè)基本庫函數(shù):定時(shí)器應(yīng)用示例【設(shè)計(jì)要求】應(yīng)用MsTimer2控制板載指示燈(D13),每0.5s亮或滅一次?!咎崾尽浚涸诰€安裝并引用MsTimer2.h函數(shù)庫#include<MsTimer2.h>//引用函數(shù)庫voidflash(){staticbooleanstate=HIGH;//設(shè)置靜態(tài)布爾變量digitalWrite(13,state);state=!state;}voidsetup(){pinMode(13,OUTPUT);//設(shè)置13引腳為輸出MsTimer2::set(500,flash);//定時(shí)時(shí)長為500msMsTimer2::start();//啟動定時(shí)器}voidloop(){}外部中斷函數(shù)及其配置啟用外部中斷啟用外部中斷,需要在setup()函數(shù)中調(diào)用配置外部中斷函數(shù)attachInterrupt(),并自定義中斷服務(wù)程序
函數(shù)原型:
attachInterrupt(digitalPinToInterrupt(pin),ISR,mode);(新版)
或
attachInterrupt(interrupt,ISR,mode);(舊版)
函數(shù)功能:啟用外部中斷,當(dāng)指定引腳(pin)上的中斷源信號滿足某種條件(mode)時(shí),
外部中斷被
觸發(fā),CPU執(zhí)行相應(yīng)的中斷服務(wù)程序(ISR)。
參數(shù)含義:digitalPinToInterrupt(pin)中斷源號。
pin表示具有外部中斷功能的數(shù)字腳號。該參數(shù)是實(shí)際數(shù)字腳轉(zhuǎn)換為特定中斷源的編號。Interrupt中斷源號(舊版參數(shù))。“0”(INT0)表示使用數(shù)字腳2;“1”(INT1),表示使用數(shù)字腳3。ISR中斷服務(wù)程序。CPU處理中斷響應(yīng)時(shí)需要調(diào)用的函數(shù),一個(gè)無參無返回值函數(shù)。ISR應(yīng)盡可能簡短。如果一個(gè)sketch文件有多個(gè)ISR函數(shù),執(zhí)行順序取決于他們的優(yōu)先級。在ISR函數(shù)中盡量不使用millis()、delay()及串行通信等依賴中斷的函數(shù),但可以使用無計(jì)數(shù)器的delayMicroseconds()函數(shù)。ISR和主程序之間傳遞數(shù)據(jù)的類型通常是全局變量。ISR中反復(fù)修改的變量聲明為volatile。外部中斷函數(shù)及其配置mode:中斷觸發(fā)條件。mode設(shè)置有四種模式:LOW,CHANGE,RISING,FALLING。外部中斷的4個(gè)觸發(fā)模式禁用外部中斷函數(shù)detachInterrupt()方法與啟用中斷相似。只需要在setup函數(shù)中配置關(guān)中斷函數(shù)detachInterrupt(digitalPinToInterrupt(pin))或detachInterrupt(Interrupt)即可注意:中斷關(guān)閉后不會自行開啟。外部中斷函數(shù)的應(yīng)用外部中斷應(yīng)用示例【應(yīng)用實(shí)例】使用外部中斷源1(數(shù)字腳3),實(shí)現(xiàn)按鍵控制LED燈的亮滅/***********************************************************/boolstate=LOW;//定義一個(gè)布爾變量state,初值為LOWvoidsetup(){pinMode(pin,OUTPUT);//定義13引腳為輸出,即使用板載LED
attachInterrupt(1,ISR_change,RISING);//外部中斷函數(shù)配置}voidISR_change(){//中斷服務(wù)程序state=!state;//每次執(zhí)行中斷將state的值取反}voidloop(){digitalWrite(pin,state);}/***********************************************************/外部中斷產(chǎn)生的條件外部中斷產(chǎn)生的條件硬件電路1.可產(chǎn)生高電平和低電平的硬件電路2.
外部信號接入數(shù)字腳2(INT0)或數(shù)字腳3(INT1)軟件處理
1.voidsetup(){//其他初始化
pinMode(2/3,INPUT);//輸入模式
attachInterrupt(0/1,ISR,FALLING/RISING/CHANGE);
}2.定義中斷響應(yīng)函數(shù)ISR,要求:無參數(shù),返回值類型void
voidISR_butt(){}INT0(2)INT1(3)lowlowhighRISINGFALLINGRISING+FALLING=CHANGE+5v非必須中斷方式與查詢方式中
斷中斷是事件觸發(fā)的。換言之,只要有事件產(chǎn)生都會引發(fā)中斷,并且取得最優(yōu)運(yùn)行,因此響應(yīng)更快、更及時(shí)。因此,在控制的過程中,合理應(yīng)用中斷,可以減少信息丟失,提高控制系統(tǒng)運(yùn)行效率。查
詢
查詢是在loop()函數(shù)里,CPU通過執(zhí)行digitalRead()函數(shù),定期查詢端口狀態(tài)信息。顯然,捕捉到端口上的信息變化,才能改變LED燈的狀態(tài)。不僅響應(yīng)速度比較慢,還占用系統(tǒng)資源,特別是在主程序處理事件多、處理流程復(fù)雜、函數(shù)嵌套執(zhí)行的情況下,甚至?xí)驗(yàn)樘幚聿贿^來而丟失輸入的信息。二者硬件電路相同,實(shí)現(xiàn)的控制效果很相似(與§3.2.1節(jié)相比)。本質(zhì)上是兩種完全不同的操作:查詢與外部中斷。3.4鍵盤模塊及其應(yīng)用行列式鍵盤的特點(diǎn)16個(gè)按鍵構(gòu)成4行4列的陣列式結(jié)構(gòu),簡稱4×4鍵盤。常見的有普通按鍵式和薄膜式兩種。4×4鍵盤共有8個(gè)接線端,Row1~Row4分別為4個(gè)行輸出線,Col1~Col4為4個(gè)列輸出線。鍵盤上每個(gè)按鍵的狀態(tài)都是由行信號和列信號共同確定的。如如按下鍵K12,就短接了第1行和第2列。4×4行列式鍵盤的特點(diǎn)鍵盤掃描的概念使用時(shí),如何準(zhǔn)確地判斷出是哪個(gè)按鍵被按下呢?先判斷哪一行有鍵按下如圖所示,如果數(shù)字腳2的輸入信號LOW,表示第1行有按鍵被按下再判斷哪個(gè)按鍵被按下從第1列開始,通過對4路列引腳的控制信號依序?qū)懙碗娖竭M(jìn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度專業(yè)翻譯個(gè)人服務(wù)協(xié)議2篇
- 急性中毒的救護(hù)PowerPointPresentation
- 音樂廳車站車庫保安執(zhí)勤心得
- 2025版跨境電商金融服務(wù)擔(dān)保協(xié)議3篇
- 二零二五年度鋼廠爐渣環(huán)保處理技術(shù)服務(wù)合同2篇
- 二零二五年度國際貿(mào)易信用證擔(dān)保服務(wù)標(biāo)準(zhǔn)范本2篇
- 二零二五版推土機(jī)租賃與土壤恢復(fù)合作協(xié)議3篇
- 二零二五年度電子元器件物流配送協(xié)議3篇
- 二零二五年度家政服務(wù)與家庭文化傳承合同3篇
- 二零二五年度汽車維修行業(yè)技師勞務(wù)派遣管理協(xié)議3篇
- 課題達(dá)成型品管圈
- 刑事判決書標(biāo)準(zhǔn)格式
- 《量化交易之門》連載27:風(fēng)險(xiǎn)的角度談收益MAR和夏普比率
- 2024年廣州市高三一模普通高中畢業(yè)班高三綜合測試一 物理試卷(含答案)
- 部編版《道德與法治》六年級下冊教材分析萬永霞
- 粘液腺肺癌病理報(bào)告
- 巡察檔案培訓(xùn)課件
- 物流營銷(第四版) 課件 第六章 物流營銷策略制定
- 上海高考英語詞匯手冊列表
- 上海石油化工股份有限公司6181乙二醇裝置爆炸事故調(diào)查報(bào)告
- 家譜人物簡介(優(yōu)選12篇)
評論
0/150
提交評論