




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章 C语言函数与机器人巡航操纵深圳市鸥鹏科技深圳市鸥鹏科技*有限公司有限公司黄曦黄曦2021.3.21摘要任务一 根基巡航动作任务二 匀加速减速运动任务三 用函数调用简化运动程序任务四 高级主题用数组创站复杂运动字符型信息数组switch语句工程素养和技能回纳科学精神的培养任务一 根基巡航动作 向前巡航,接着时候为3秒. 源程序请参照教材第37页RobotForwardThreeSeconds.c 原理: 输出相应的脉冲序列,使左侧电机逆时针旋转,右侧电机顺时针旋转.程序反复履行130次,需要3秒时候,机器人也向前运动3秒. 尝试调节间隔和速度. 尝试通过调节高电平脉宽,从而调节机器人的运
2、动方向.任务一 根基巡航动作 号令组合,让机器人向前走、左转、右转和向后走. 源程序请参照教材第39页的ForwardLeftRightBackward.c. 尝试1个轮子不动,另一个轮子全速旋转,从而以一个轮子为支点,原地旋转. 源程序请参照教材第41页.任务二 匀加速减速运动 编程意图:使机器人的运动更平稳,增加电机的寿命.编程原理:电机操纵信号高电平宽度为1500微秒,似要顺时针加速,那么delay_nus()的指标从1500追渐减小到1300,似要逆时针旋转,那么从1500追渐增大到1700.脉宽变得越快,加减速的结果便更清楚.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);任务二 匀加速减速运动 例程:电机速度追渐增加到全速接着追步减小的实现. 源代码参照教材第43页的StartAndStopWithRamping.c 尝试更换变量pulseCount的改变值,调节加速度或减速度. 尝试更换变量pulseCount的改变上限,调节加速或减速的接着时候.任务三 用函数调用简化运动程序C语言提供了强盛的函数定义功能.一个
4、C程序便是由一个主函数和如果干个其它函数构成,由主函数调用其它函数,其它函数也能够彼此调用.同一个函数能够被一个或多个函数调用随意率性多次.不管机器人要履行何种动作,都离不开前面会商的各种根基动作.为了各种应用程序方便使用这些根基动作程序,你能够将这些根基动作放在函数中,供其它函数调用来简化程序.任务三 用函数调用简化运动程序 函数的种类 从函数的定义来看: 规格函数,即库函数,由集成开发环境提供. 用户自定义函数,解决自已的特意需要. 从函数有无返回值来看: 有返回值函数. 无返回值函数. 从主调函数和被调函数来看: 无指标函数. 有指标函数.任务三 用函数调用简化运动程序 函数的形式: 其
5、中类型标识符和函数标题为函数头. 类型标识符指明了本函数的类型,函数的类型现实上是函数返回值的类型.函数名是由用户定义的标识符. 函数名后有一个括号(不可少写),如果函数无指标,那么括号内可不写内容或写“void”;如果有指标,那么形式指标列表给出各种类型的变量,各指标之间用逗号间隔. 中的内容称为函数体.函数体中的表明部分,是对函数体内部用到的变量的类型讲明. 在非常多情况下都不要求函数有返回值,此刻函数类型符能够写为void.类型标识符 函数名(形式指标列表) 表明部分 语句任务三 用函数调用简化运动程序main函数是不能被其它函数调用的,那它的返回值类型int是如何回事呢?事实上不难懂得
6、,main函数履行完之后,它的返回值是给操纵系统的.固然在main函数体内同时没有啥语句来指出返回值的大小,但系统默认的操作方式是:当main函数顺遂履行,它的返回值为1;否那么为0. 任务三 用函数调用简化运动程序下边的Forward函数能够使机器人向前运动1.5秒.该函数是无形参、无返回值的函数,没有太大的使用代价.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);任务三 用函数调用简化运动程序给前面一页的F
7、orward函数增加脉冲数和速度等两个指标,从而能够灵活的设置这些指标,让函数成为一个真正有效的模块.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); 任务三 用函数调用简化运动程序注释:在函数定义的下方,有一行注释,提示我们使用该函数
8、的时侯,速度是在0到200之间.除“”外,C语言还提供了另一种语句注释符“*”和“ *”.“*”和“*”必须成对使用,在它们之间的内容将被注释掉.它的作用范畴比“”大:“”仅仅对它所在的一行起注释作用;但“*”能够对多行注释.注释是你在学习程序设计时要养成的良好风俗.任务三 用函数调用简化运动程序 完整的使用向前、左转、右转和向后四个函数的例程. 源码参照教材第48页的MovementsWithFuncitons.c 该例程的结果与任务1的ForwardLeftRightBackward.c产生的结果是一致的. 在该程序中,除了main函数以外,其他的四个函数代表了四个方向,具有一样的形参脉冲
9、个数和速度指标.这四个函数的功能是能够集成在同一个函数中的.任务三 用函数调用简化运动程序 直截了当用一个子函数实现方向、脉冲个数和速度的操纵. 源代码参照教材第51页的MovementsWithOneFunciton.c 尝试修改程序,让机器人走正方形.任务四 高级主题用数组创站复杂运动 到目前为止你差不多试过三种差别的编程方式来使机器人向前走,左转,右转和向后走.每种方式都有它的利益,但是似果你要让机器人履行一个更长,更复杂的动作时用这些方式都非常穷苦.下面要讲解的两个例子将用子函数来实现每个简单的动作,将复杂的运动存储在数组中,接着在程序履行环节中读出同时解码.幸免了重复调用一长串子函数
10、.这个地方,你要用到C语言的一种新的信息类型数组. 前面,你只用到了C语言的根基信息类型之一的整型信息,以int做为类型讲明符.另外一种根基信息类型是字符型,以char做为类型讲明符. 任务四 高级主题用数组创站复杂运动 字符型信息 字符常量 字符常量是指用一对单引号括起来的一个字符. 字符常量中的单引号只起到定界作用同时不示意字符自已. 单引号中的字符不能是单引号()和反歪杠(),它们特有的示意法在转义字符中讲解. 在C语言中,字符是依照对应的ASCII码值来存储的. ASCII码 ASCII是美国规格信息交流码(American Standard Code for Information
11、Interchange)的缩写,用来拟定统计机中每个符号对应的代码,这也叫做统计机的内码(code). 每个ASCII码以1个字节(Byte)储存,从0到数字127代表差别的常用符号,例似大写A的ASCII码是65,小写a那么是97.这套内码加上了很多外文和表格等特别符号,成为目前常用的内码. 任务四 高级主题用数组创站复杂运动字符型信息转义字符转义字符是一种特别的字符常量,以反歪杠“”开头,后跟一个或几个字符.转义字符具有特定的含义,差别于字符原有的意义,故称“转义”字符. 往往使用转义字符示意用一样字符未便于示意的操纵代码,似用于示意字符常量的单撇号()、用于示意字符串常量的双撇号(“)和
12、反歪杠()等. 转义字符转义字符含义含义ASCIIASCII值(十进制)值(十进制)b退格(BS)008n换行(LF)010t水平制表(HF)反歪杠092单引号字符039”双引号字符0340空字符(NULL)ddd随意率性字符三位八进制xhh随意率性字符二位十六进制任务四 高级主题用数组创站复杂运动 字符型信息 字符变量 字符变量用来存放字符常量,注重只能存放一个字符. 字符变量的定义形式似下:char c1,c2; 它示意c1和c2为字符变量,各放入一字字符.所以能够用下面语句对c1、c2赋值:c1=a;c2=A;任务四 高级主题用数组创站复杂运动 数组 在程序设计中,为了操作方便,能够把具
13、有一样类型的如果干变量按有序的形式组织起来.这些按序布列的同类信息元素的集合称为数组. 一个数组能够分化为多个数组元素,依照数组元素信息类型的差别,数组能够分为多种差别类型.数组又分为一维数组、二维数组甚到三维数组. 本节只会用到一维数组.任务四 高级主题用数组创站复杂运动 一维数组 一维数组的定义方式为: 类型讲明符 数组名常量表达式; 类型讲明符是任一种根基信息类型. 数组名是用户定义的数组标识符. 方括号中的常量表达式示意信息元素的个数,也称为数组的长度. 一维数组的赋值 初始化赋值的一样方式 类型讲明符 数组名常量表达式=值,值值; 其中在 中的各信息值即为各元素的初值,各值之间用逗号
14、间隔. 例似:下面的语句定义了一个字符型数组,该数组有10个元素,同时对这10个元素履行了初始化. char Navigation10=F,L,F,F,R,B,L,B,B,Q; 任务4 高级主题用数组创站复杂运动一维数组的引用数组元素是组成数组的根基单元.数组元素也是一种变量, 其标识方式为数组名后跟一个下标,下标示意了元素在数组中的次序号(从0最先计数).数组元素的一样形式为:数组名下标其中下标只能为整型常量或整型表达式.如果为小数时,系统将自动取整. 例似:Navigation0 (第一个字符:F)Navigation5 (第六个字符:B) 任务四 高级主题用数组创站复杂运动字符串和字符串
15、结束标记字符串常量是指用一对双引号括起来的一串字符.似“China”、“OPEN”、“A”、“333212-6589”等.双引号只起定界作用.双引号括起的字符串中不能是双引号(“)和反歪杠().在语言中没有特意的字符串变量,往往用一个字符数组来存放一个字符串.字符串常量在存储时,系统自动在字符串的末尾加一个“串结束标记”,即ASCII码值为0的字符NULL,常用“0”示意.所以在程序中,长度为n字符的字符串常量在内存中占有n+1个字节的存储空间. 任务四 高级主题用数组创站复杂运动例程:采纳字符数组定义一系列复杂的运动.源代码请参照教材第55页的NavigationWithSwitch.c 将
16、程序编译同时烧写入单片机,打开电源,让程序运行.察看机器人是否走了一个矩形?似果是梯形,需要调节for循环中的循环次数,使其精准的旋转90.任务四 高级主题用数组创站复杂运动NavigationWithSwitch.c是似何任务的?在主函数中定义了一维字符数组.char Navigation10=F,L,F,F,R,B,L,B,B,Q;在那个数组中,F示意向前运动,L示意向左转,R示意向右转,B示意向后退,Q示意程序结束.在定义数组之后,定义了int型的变量address,用来做为会见数组的索引.接着是一个while循环,前提是当前会见的数组值不为Q时,才运行while循环体中的程序,同时,每
17、次履行switch语句后,都要更新address,以使下次循环时,履行新的运动.任务四 高级主题用数组创站复杂运动switch语句switch语句是一种多分支挑选语句,其一样形式似下:其语意是,统计表达式的值,追个与其后的表达式值相对比,当表达式的值与常量表达式的值相等时,即履行其后的语句.似表达式的值与全部case后的常量表达式均不一样时,那么履行default后的语句. switch(表达式) case常量表达式1: 语句1;break; case常量表达式2: 语句2;break; case常量表达式n: 语句n;break; default: 语句n+1;break; 任务四 高级主题
18、用数组创站复杂运动在本例程中:当Navigationaddress为F时,履行向前运动的函数Forward();当Navigationaddress为L时,履行向左转的函数Left_Turn();当Navigationaddress为R时,履行向右转的函数Right_Turn();当Navigationaddress为B时,履行向后运动的函数Backward().尝试一下:能够更换现有的数组和增加数组的长度来猎取新的运动路线.试着更换,增加或删除数组中的字符,再一次运行程序,记住:数组中的末了字符应该是“Q”.更换数组使机器人履行熟悉的向前,左,右和后一系列的运动 .任务四 高级主题用数组创站
19、复杂运动例程NavigationWithValues.c 源代码参照教材第58页.在本例程中,将不使用子函数,而是使用三个整型数组来存储操纵机器人运动的三个变量,即循环的次数和操纵左右电机运动的两个指标. address做为会见数组的索引值,在程序中,每次用address提取一组信息.即Pulse_Countaddress,Pulse_Leftaddress,Pulse_Rightaddress.这些信息放在下面的代码块中,做为运动一次的指标.address通过加1的运算,从而猎取到下次运动的指标.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等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025在建项目转让合同
- 2025关于房屋交易的合同范本
- 2025标准装修合同范本大全
- 2025年版写字楼租赁合同模板
- 2025借款合同书范本
- 2025合同制定规范私营建筑项目合同
- 2025文具购销合同的范文
- 2025虚构性商品房买卖合同纠纷案
- 《2025设备搬运与运输合同》
- 2025设施升级合同(模板)
- GB/T 3098.26-2021紧固件机械性能平垫圈
- 四年级安全教育珍爱生命预防溺水安全知识主题班会
- 《岩石学》课件第二章结构构造
- 实验心理学讲解(思维)课件
- 国家基本药物培训培训课件
- 水生花卉资料课件
- 流动式起重机(固定)定期检验-自检记录
- 耳鼻咽喉科-咽肿瘤
- 高中地理·第一节人类面临的主要环境问题幻灯片
- 拟经营的食品种类、存放地点
- 宿舍楼设计开题报告
评论
0/150
提交评论