




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三章 C語言函數(shù)與機(jī)器人巡航操縱深圳市鷗鵬科技深圳市鷗鵬科技*有限公司有限公司黃曦黃曦2021.3.21摘要任務(wù)一 根基巡航動(dòng)作任務(wù)二 勻加速減速運(yùn)動(dòng)任務(wù)三 用函數(shù)調(diào)用簡(jiǎn)化運(yùn)動(dòng)程序任務(wù)四 高級(jí)主題用數(shù)組創(chuàng)站復(fù)雜運(yùn)動(dòng)字符型信息數(shù)組switch語句工程素養(yǎng)和技能回納科學(xué)精神的培養(yǎng)任務(wù)一 根基巡航動(dòng)作 向前巡航,接著時(shí)候?yàn)?秒. 源程序請(qǐng)參照教材第37頁RobotForwardThreeSeconds.c 原理: 輸出相應(yīng)的脈沖序列,使左側(cè)電機(jī)逆時(shí)針旋轉(zhuǎn),右側(cè)電機(jī)順時(shí)針旋轉(zhuǎn).程序反復(fù)履行130次,需要3秒時(shí)候,機(jī)器人也向前運(yùn)動(dòng)3秒. 嘗試調(diào)節(jié)間隔和速度. 嘗試通過調(diào)節(jié)高電平脈寬,從而調(diào)節(jié)機(jī)器人的運(yùn)
2、動(dòng)方向.任務(wù)一 根基巡航動(dòng)作 號(hào)令組合,讓機(jī)器人向前走、左轉(zhuǎn)、右轉(zhuǎn)和向后走. 源程序請(qǐng)參照教材第39頁的ForwardLeftRightBackward.c. 嘗試1個(gè)輪子不動(dòng),另一個(gè)輪子全速旋轉(zhuǎn),從而以一個(gè)輪子為支點(diǎn),原地旋轉(zhuǎn). 源程序請(qǐng)參照教材第41頁.任務(wù)二 勻加速減速運(yùn)動(dòng) 編程意圖:使機(jī)器人的運(yùn)動(dòng)更平穩(wěn),增加電機(jī)的壽命.編程原理:電機(jī)操縱信號(hào)高電平寬度為1500微秒,似要順時(shí)針加速,那么delay_nus()的指標(biāo)從1500追漸減小到1300,似要逆時(shí)針旋轉(zhuǎn),那么從1500追漸增大到1700.脈寬變得越快,加減速的結(jié)果便更清楚.for(pulseCount=10;pulseCount=
3、200;pulseCount=pulseCount+1)P1_1=1;delay_nus(1500+pulseCount); P1_1=0;P1_0=1;delay_nus(1500-pulseCount);P1_0=0;delay_nms(20);任務(wù)二 勻加速減速運(yùn)動(dòng) 例程:電機(jī)速度追漸增加到全速接著追步減小的實(shí)現(xiàn). 源代碼參照教材第43頁的StartAndStopWithRamping.c 嘗試更換變量pulseCount的改變值,調(diào)節(jié)加速度或減速度. 嘗試更換變量pulseCount的改變上限,調(diào)節(jié)加速或減速的接著時(shí)候.任務(wù)三 用函數(shù)調(diào)用簡(jiǎn)化運(yùn)動(dòng)程序C語言提供了強(qiáng)盛的函數(shù)定義功能.一個(gè)
4、C程序便是由一個(gè)主函數(shù)和如果干個(gè)其它函數(shù)構(gòu)成,由主函數(shù)調(diào)用其它函數(shù),其它函數(shù)也能夠彼此調(diào)用.同一個(gè)函數(shù)能夠被一個(gè)或多個(gè)函數(shù)調(diào)用隨意率性多次.不管機(jī)器人要履行何種動(dòng)作,都離不開前面會(huì)商的各種根基動(dòng)作.為了各種應(yīng)用程序方便使用這些根基動(dòng)作程序,你能夠?qū)⑦@些根基動(dòng)作放在函數(shù)中,供其它函數(shù)調(diào)用來簡(jiǎn)化程序.任務(wù)三 用函數(shù)調(diào)用簡(jiǎn)化運(yùn)動(dòng)程序 函數(shù)的種類 從函數(shù)的定義來看: 規(guī)格函數(shù),即庫(kù)函數(shù),由集成開發(fā)環(huán)境提供. 用戶自定義函數(shù),解決自已的特意需要. 從函數(shù)有無返回值來看: 有返回值函數(shù). 無返回值函數(shù). 從主調(diào)函數(shù)和被調(diào)函數(shù)來看: 無指標(biāo)函數(shù). 有指標(biāo)函數(shù).任務(wù)三 用函數(shù)調(diào)用簡(jiǎn)化運(yùn)動(dòng)程序 函數(shù)的形式: 其
5、中類型標(biāo)識(shí)符和函數(shù)標(biāo)題為函數(shù)頭. 類型標(biāo)識(shí)符指明了本函數(shù)的類型,函數(shù)的類型現(xiàn)實(shí)上是函數(shù)返回值的類型.函數(shù)名是由用戶定義的標(biāo)識(shí)符. 函數(shù)名后有一個(gè)括號(hào)(不可少寫),如果函數(shù)無指標(biāo),那么括號(hào)內(nèi)可不寫內(nèi)容或?qū)憽皏oid”;如果有指標(biāo),那么形式指標(biāo)列表給出各種類型的變量,各指標(biāo)之間用逗號(hào)間隔. 中的內(nèi)容稱為函數(shù)體.函數(shù)體中的表明部分,是對(duì)函數(shù)體內(nèi)部用到的變量的類型講明. 在非常多情況下都不要求函數(shù)有返回值,此刻函數(shù)類型符能夠?qū)憺関oid.類型標(biāo)識(shí)符 函數(shù)名(形式指標(biāo)列表) 表明部分 語句任務(wù)三 用函數(shù)調(diào)用簡(jiǎn)化運(yùn)動(dòng)程序main函數(shù)是不能被其它函數(shù)調(diào)用的,那它的返回值類型int是如何回事呢?事實(shí)上不難懂得
6、,main函數(shù)履行完之后,它的返回值是給操縱系統(tǒng)的.固然在main函數(shù)體內(nèi)同時(shí)沒有啥語句來指出返回值的大小,但系統(tǒng)默認(rèn)的操作方式是:當(dāng)main函數(shù)順?biāo)炻男?它的返回值為1;否那么為0. 任務(wù)三 用函數(shù)調(diào)用簡(jiǎn)化運(yùn)動(dòng)程序下邊的Forward函數(shù)能夠使機(jī)器人向前運(yùn)動(dòng)1.5秒.該函數(shù)是無形參、無返回值的函數(shù),沒有太大的使用代價(jià).void Forward(void) int i; for(i=1;i=65;i+)P1_1=1;delay_nus(1700); P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);任務(wù)三 用函數(shù)調(diào)用簡(jiǎn)化運(yùn)動(dòng)程序給前面一頁的F
7、orward函數(shù)增加脈沖數(shù)和速度等兩個(gè)指標(biāo),從而能夠靈活的設(shè)置這些指標(biāo),讓函數(shù)成為一個(gè)真正有效的模塊.void Forward(int PulseCount,int Velocity)* Velocity should be between 0 and 200 * int i; for(i=1;i=PulseCount;i+)P1_1=1;delay_nus(1500+Velocity); P1_1=0;P1_0=1;delay_nus(1500-Velocity);P1_0=0;delay_nms(20); 任務(wù)三 用函數(shù)調(diào)用簡(jiǎn)化運(yùn)動(dòng)程序注釋:在函數(shù)定義的下方,有一行注釋,提示我們使用該函數(shù)
8、的時(shí)侯,速度是在0到200之間.除“”外,C語言還提供了另一種語句注釋符“*”和“ *”.“*”和“*”必須成對(duì)使用,在它們之間的內(nèi)容將被注釋掉.它的作用范疇比“”大:“”僅僅對(duì)它所在的一行起注釋作用;但“*”能夠?qū)Χ嘈凶⑨?注釋是你在學(xué)習(xí)程序設(shè)計(jì)時(shí)要養(yǎng)成的良好風(fēng)俗.任務(wù)三 用函數(shù)調(diào)用簡(jiǎn)化運(yùn)動(dòng)程序 完整的使用向前、左轉(zhuǎn)、右轉(zhuǎn)和向后四個(gè)函數(shù)的例程. 源碼參照教材第48頁的MovementsWithFuncitons.c 該例程的結(jié)果與任務(wù)1的ForwardLeftRightBackward.c產(chǎn)生的結(jié)果是一致的. 在該程序中,除了main函數(shù)以外,其他的四個(gè)函數(shù)代表了四個(gè)方向,具有一樣的形參脈沖
9、個(gè)數(shù)和速度指標(biāo).這四個(gè)函數(shù)的功能是能夠集成在同一個(gè)函數(shù)中的.任務(wù)三 用函數(shù)調(diào)用簡(jiǎn)化運(yùn)動(dòng)程序 直截了當(dāng)用一個(gè)子函數(shù)實(shí)現(xiàn)方向、脈沖個(gè)數(shù)和速度的操縱. 源代碼參照教材第51頁的MovementsWithOneFunciton.c 嘗試修改程序,讓機(jī)器人走正方形.任務(wù)四 高級(jí)主題用數(shù)組創(chuàng)站復(fù)雜運(yùn)動(dòng) 到目前為止你差不多試過三種差別的編程方式來使機(jī)器人向前走,左轉(zhuǎn),右轉(zhuǎn)和向后走.每種方式都有它的利益,但是似果你要讓機(jī)器人履行一個(gè)更長(zhǎng),更復(fù)雜的動(dòng)作時(shí)用這些方式都非常窮苦.下面要講解的兩個(gè)例子將用子函數(shù)來實(shí)現(xiàn)每個(gè)簡(jiǎn)單的動(dòng)作,將復(fù)雜的運(yùn)動(dòng)存儲(chǔ)在數(shù)組中,接著在程序履行環(huán)節(jié)中讀出同時(shí)解碼.幸免了重復(fù)調(diào)用一長(zhǎng)串子函數(shù)
10、.這個(gè)地方,你要用到C語言的一種新的信息類型數(shù)組. 前面,你只用到了C語言的根基信息類型之一的整型信息,以int做為類型講明符.另外一種根基信息類型是字符型,以char做為類型講明符. 任務(wù)四 高級(jí)主題用數(shù)組創(chuàng)站復(fù)雜運(yùn)動(dòng) 字符型信息 字符常量 字符常量是指用一對(duì)單引號(hào)括起來的一個(gè)字符. 字符常量中的單引號(hào)只起到定界作用同時(shí)不示意字符自已. 單引號(hào)中的字符不能是單引號(hào)()和反歪杠(),它們特有的示意法在轉(zhuǎn)義字符中講解. 在C語言中,字符是依照對(duì)應(yīng)的ASCII碼值來存儲(chǔ)的. ASCII碼 ASCII是美國(guó)規(guī)格信息交流碼(American Standard Code for Information
11、Interchange)的縮寫,用來擬定統(tǒng)計(jì)機(jī)中每個(gè)符號(hào)對(duì)應(yīng)的代碼,這也叫做統(tǒng)計(jì)機(jī)的內(nèi)碼(code). 每個(gè)ASCII碼以1個(gè)字節(jié)(Byte)儲(chǔ)存,從0到數(shù)字127代表差別的常用符號(hào),例似大寫A的ASCII碼是65,小寫a那么是97.這套內(nèi)碼加上了很多外文和表格等特別符號(hào),成為目前常用的內(nèi)碼. 任務(wù)四 高級(jí)主題用數(shù)組創(chuàng)站復(fù)雜運(yùn)動(dòng)字符型信息轉(zhuǎn)義字符轉(zhuǎn)義字符是一種特別的字符常量,以反歪杠“”開頭,后跟一個(gè)或幾個(gè)字符.轉(zhuǎn)義字符具有特定的含義,差別于字符原有的意義,故稱“轉(zhuǎn)義”字符. 往往使用轉(zhuǎn)義字符示意用一樣字符未便于示意的操縱代碼,似用于示意字符常量的單撇號(hào)()、用于示意字符串常量的雙撇號(hào)(“)和
12、反歪杠()等. 轉(zhuǎn)義字符轉(zhuǎn)義字符含義含義ASCIIASCII值(十進(jìn)制)值(十進(jìn)制)b退格(BS)008n換行(LF)010t水平制表(HF)反歪杠092單引號(hào)字符039”雙引號(hào)字符0340空字符(NULL)ddd隨意率性字符三位八進(jìn)制xhh隨意率性字符二位十六進(jìn)制任務(wù)四 高級(jí)主題用數(shù)組創(chuàng)站復(fù)雜運(yùn)動(dòng) 字符型信息 字符變量 字符變量用來存放字符常量,注重只能存放一個(gè)字符. 字符變量的定義形式似下:char c1,c2; 它示意c1和c2為字符變量,各放入一字字符.所以能夠用下面語句對(duì)c1、c2賦值:c1=a;c2=A;任務(wù)四 高級(jí)主題用數(shù)組創(chuàng)站復(fù)雜運(yùn)動(dòng) 數(shù)組 在程序設(shè)計(jì)中,為了操作方便,能夠把具
13、有一樣類型的如果干變量按有序的形式組織起來.這些按序布列的同類信息元素的集合稱為數(shù)組. 一個(gè)數(shù)組能夠分化為多個(gè)數(shù)組元素,依照數(shù)組元素信息類型的差別,數(shù)組能夠分為多種差別類型.數(shù)組又分為一維數(shù)組、二維數(shù)組甚到三維數(shù)組. 本節(jié)只會(huì)用到一維數(shù)組.任務(wù)四 高級(jí)主題用數(shù)組創(chuàng)站復(fù)雜運(yùn)動(dòng) 一維數(shù)組 一維數(shù)組的定義方式為: 類型講明符 數(shù)組名常量表達(dá)式; 類型講明符是任一種根基信息類型. 數(shù)組名是用戶定義的數(shù)組標(biāo)識(shí)符. 方括號(hào)中的常量表達(dá)式示意信息元素的個(gè)數(shù),也稱為數(shù)組的長(zhǎng)度. 一維數(shù)組的賦值 初始化賦值的一樣方式 類型講明符 數(shù)組名常量表達(dá)式=值,值值; 其中在 中的各信息值即為各元素的初值,各值之間用逗號(hào)
14、間隔. 例似:下面的語句定義了一個(gè)字符型數(shù)組,該數(shù)組有10個(gè)元素,同時(shí)對(duì)這10個(gè)元素履行了初始化. char Navigation10=F,L,F,F,R,B,L,B,B,Q; 任務(wù)4 高級(jí)主題用數(shù)組創(chuàng)站復(fù)雜運(yùn)動(dòng)一維數(shù)組的引用數(shù)組元素是組成數(shù)組的根基單元.數(shù)組元素也是一種變量, 其標(biāo)識(shí)方式為數(shù)組名后跟一個(gè)下標(biāo),下標(biāo)示意了元素在數(shù)組中的次序號(hào)(從0最先計(jì)數(shù)).數(shù)組元素的一樣形式為:數(shù)組名下標(biāo)其中下標(biāo)只能為整型常量或整型表達(dá)式.如果為小數(shù)時(shí),系統(tǒng)將自動(dòng)取整. 例似:Navigation0 (第一個(gè)字符:F)Navigation5 (第六個(gè)字符:B) 任務(wù)四 高級(jí)主題用數(shù)組創(chuàng)站復(fù)雜運(yùn)動(dòng)字符串和字符串
15、結(jié)束標(biāo)記字符串常量是指用一對(duì)雙引號(hào)括起來的一串字符.似“China”、“OPEN”、“A”、“333212-6589”等.雙引號(hào)只起定界作用.雙引號(hào)括起的字符串中不能是雙引號(hào)(“)和反歪杠().在語言中沒有特意的字符串變量,往往用一個(gè)字符數(shù)組來存放一個(gè)字符串.字符串常量在存儲(chǔ)時(shí),系統(tǒng)自動(dòng)在字符串的末尾加一個(gè)“串結(jié)束標(biāo)記”,即ASCII碼值為0的字符NULL,常用“0”示意.所以在程序中,長(zhǎng)度為n字符的字符串常量在內(nèi)存中占有n+1個(gè)字節(jié)的存儲(chǔ)空間. 任務(wù)四 高級(jí)主題用數(shù)組創(chuàng)站復(fù)雜運(yùn)動(dòng)例程:采納字符數(shù)組定義一系列復(fù)雜的運(yùn)動(dòng).源代碼請(qǐng)參照教材第55頁的NavigationWithSwitch.c 將
16、程序編譯同時(shí)燒寫入單片機(jī),打開電源,讓程序運(yùn)行.察看機(jī)器人是否走了一個(gè)矩形?似果是梯形,需要調(diào)節(jié)for循環(huán)中的循環(huán)次數(shù),使其精準(zhǔn)的旋轉(zhuǎn)90.任務(wù)四 高級(jí)主題用數(shù)組創(chuàng)站復(fù)雜運(yùn)動(dòng)NavigationWithSwitch.c是似何任務(wù)的?在主函數(shù)中定義了一維字符數(shù)組.char Navigation10=F,L,F,F,R,B,L,B,B,Q;在那個(gè)數(shù)組中,F示意向前運(yùn)動(dòng),L示意向左轉(zhuǎn),R示意向右轉(zhuǎn),B示意向后退,Q示意程序結(jié)束.在定義數(shù)組之后,定義了int型的變量address,用來做為會(huì)見數(shù)組的索引.接著是一個(gè)while循環(huán),前提是當(dāng)前會(huì)見的數(shù)組值不為Q時(shí),才運(yùn)行while循環(huán)體中的程序,同時(shí),每
17、次履行switch語句后,都要更新address,以使下次循環(huán)時(shí),履行新的運(yùn)動(dòng).任務(wù)四 高級(jí)主題用數(shù)組創(chuàng)站復(fù)雜運(yùn)動(dòng)switch語句switch語句是一種多分支挑選語句,其一樣形式似下:其語意是,統(tǒng)計(jì)表達(dá)式的值,追個(gè)與其后的表達(dá)式值相對(duì)比,當(dāng)表達(dá)式的值與常量表達(dá)式的值相等時(shí),即履行其后的語句.似表達(dá)式的值與全部case后的常量表達(dá)式均不一樣時(shí),那么履行default后的語句. switch(表達(dá)式) case常量表達(dá)式1: 語句1;break; case常量表達(dá)式2: 語句2;break; case常量表達(dá)式n: 語句n;break; default: 語句n+1;break; 任務(wù)四 高級(jí)主題
18、用數(shù)組創(chuàng)站復(fù)雜運(yùn)動(dòng)在本例程中:當(dāng)Navigationaddress為F時(shí),履行向前運(yùn)動(dòng)的函數(shù)Forward();當(dāng)Navigationaddress為L(zhǎng)時(shí),履行向左轉(zhuǎn)的函數(shù)Left_Turn();當(dāng)Navigationaddress為R時(shí),履行向右轉(zhuǎn)的函數(shù)Right_Turn();當(dāng)Navigationaddress為B時(shí),履行向后運(yùn)動(dòng)的函數(shù)Backward().嘗試一下:能夠更換現(xiàn)有的數(shù)組和增加數(shù)組的長(zhǎng)度來獵取新的運(yùn)動(dòng)路線.試著更換,增加或刪除數(shù)組中的字符,再一次運(yùn)行程序,記住:數(shù)組中的末了字符應(yīng)該是“Q”.更換數(shù)組使機(jī)器人履行熟悉的向前,左,右和后一系列的運(yùn)動(dòng) .任務(wù)四 高級(jí)主題用數(shù)組創(chuàng)站
19、復(fù)雜運(yùn)動(dòng)例程N(yùn)avigationWithValues.c 源代碼參照教材第58頁.在本例程中,將不使用子函數(shù),而是使用三個(gè)整型數(shù)組來存儲(chǔ)操縱機(jī)器人運(yùn)動(dòng)的三個(gè)變量,即循環(huán)的次數(shù)和操縱左右電機(jī)運(yùn)動(dòng)的兩個(gè)指標(biāo). address做為會(huì)見數(shù)組的索引值,在程序中,每次用address提取一組信息.即Pulse_Countaddress,Pulse_Leftaddress,Pulse_Rightaddress.這些信息放在下面的代碼塊中,做為運(yùn)動(dòng)一次的指標(biāo).address通過加1的運(yùn)算,從而獵取到下次運(yùn)動(dòng)的指標(biāo).int Pulses_Count5 = 65,26,26,65,0;int Pulses_Left4 = 1700,1300,1700,1300;int Pulses_Right4 = 1300,1300,1700,1700; for(int counter=1;counter=Pulses_Countaddress;counter+) P1_1=1; delay_nus(Pulses_Leftaddress); P1_1=0; P1_0=1;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)字化技術(shù)在就業(yè)與創(chuàng)業(yè)教育中的應(yīng)用與發(fā)展趨勢(shì)
- 實(shí)驗(yàn)數(shù)據(jù)管理與質(zhì)量控制的精細(xì)化實(shí)踐
- 小學(xué)階段的科技創(chuàng)新教育
- 2024年重慶市長(zhǎng)壽區(qū)事業(yè)單位遴選真題
- 2024年天水市秦州區(qū)招聘城鎮(zhèn)公益性崗位真題
- 宜賓學(xué)院招聘筆試真題2024
- 2024年青島城運(yùn)控股集團(tuán)招聘真題
- 2024年成都大學(xué)專職輔導(dǎo)員校內(nèi)選聘真題
- 高校智能化教學(xué)評(píng)價(jià)的技術(shù)創(chuàng)新路徑
- 能源價(jià)格波動(dòng)對(duì)低收入家庭的影響
- 研究開發(fā)費(fèi)加計(jì)扣除核查報(bào)告模板
- 數(shù)據(jù)鏈系統(tǒng)與技術(shù)(第2版) 課件 第10、11章 典型數(shù)據(jù)鏈系統(tǒng)的作戰(zhàn)運(yùn)用、數(shù)據(jù)鏈的新發(fā)展
- 印度尼西亞勞動(dòng)法
- 工業(yè)機(jī)器人的發(fā)展現(xiàn)狀和未來趨勢(shì)
- 安寧療護(hù)疼痛管理指南的系統(tǒng)評(píng)價(jià)
- 2 系統(tǒng)/子系統(tǒng)規(guī)格說明
- 《一次性物品巧“變身”》第二課時(shí)說課稿-四年級(jí)勞動(dòng)北師大版
- 保安形象禮儀培訓(xùn)-
- 審計(jì)學(xué)-中央財(cái)經(jīng)大學(xué)中國(guó)大學(xué)mooc課后章節(jié)答案期末考試題庫(kù)2023年
- 財(cái)務(wù)系統(tǒng)業(yè)務(wù)技能競(jìng)賽題庫(kù)
- 《建筑裝飾構(gòu)造與施工技術(shù)》課程標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論