积木式机器人.docx

上传人:小飞机 文档编号:1674316 上传时间:2022-12-13 格式:DOCX 页数:55 大小:858.88KB
返回 下载 相关 举报
积木式机器人.docx_第1页
第1页 / 共55页
积木式机器人.docx_第2页
第2页 / 共55页
积木式机器人.docx_第3页
第3页 / 共55页
积木式机器人.docx_第4页
第4页 / 共55页
积木式机器人.docx_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《积木式机器人.docx》由会员分享,可在线阅读,更多相关《积木式机器人.docx(55页珍藏版)》请在三一办公上搜索。

1、密级:纳英特积木式机器人图形化编程系统用户手册杭州纳英特电脑电子工程有限公司总页数38页正文35页附录生效日期:2005年12月1日编制:陈中杰审核:刘志华批准:汪卫军更新日期:2006-2-22目 录1.概述51.1.流程图51.2.积木式编程51.3.系统特点62.系统的安装72.1.系统要求72.2.安装72.3.运行73.软件界面83.1.菜单栏83.2.工具栏83.3.模块库区83.4.子程序库93.5.资源中心103.6.流程图程序生成区103.7.C代码显示区103.8.代码编辑区114.快速入门134.1.走四边形134.1.1.编程思路134.1.2.程序编写134.2.走迷

2、宫164.2.1.编程思路164.2.2.程序编写164.3.程序的下载及运行174.4.调试程序175.模块的基本操作185.1.添加模块185.2.删除模块185.3.设置参数185.4.模块的拖放186.模块说明196.1.执行器模块库196.1.1.移动模块196.1.2.延时模块196.1.3.停止模块196.1.4.启动电机模块206.1.5.显示模块206.1.6.音乐模块216.1.7.伺服电机模块216.2.控制模块库256.2.1.多次循环模块256.2.2.条件循环模块266.2.3.中断循环模块266.2.4.条件判断模块276.3.程序模块库316.3.1.调用系统函

3、数316.3.2.表达式定义模块316.3.3.进程模块326.3.4.调用子程序356.3.5.子程序返回367.常见问题及解决办法377.1.程序启动失败377.2.流程图显示不完全377.3.无法将程序下载到机器人中378. LOGO子系统388.1.系统特点388.2.LOGO子系统语言编程规范388.3.LOGO的关键字388.4.LOGO子系统的自定义符号398.5.LOGO子系统的函数(包括自定义函数)399. IC编程基础知识409.1.基本数据类型409.2.各数据类型的取值范围429.3.数组数据类型429.4.指针439.5.结构449.6.语句与表达式469.7.运算优

4、先级和次序479.8.控制语句479.9.屏幕显示499.10.格式化命令汇总509.11.预处理509.12.库函数5210.通用库函数使用参考5510.1.DIO类5510.2.数学类5510.3.电机类5510.4.显示类5610.5.进程类5610.6.传感器类5710.7.音频类5810.8.定时类581. 概述纳英特机器人图形化系统是一个为用户提供全面的机器人教育与竞赛解决方案的综合系统。系统集入门与高级应用于一体,实时提供最新的机器人解决方案与该领域的最新信息,丰富用户的机器人知识储备,为钻研机器人技术、开展机器人教学、参加机器人竞赛提供有力的支持。1.1. 流程图流程图是用一些

5、图框表示各种操作。用图形表示算法,直观形象,易于理解。流程图能够比较清楚的显示出各个框之间的逻辑关系,因此它是表示算法的较好工具。下面就通过一个具体的例子来认识流程图。“将50名学生中成绩在80分以上者的学号和成绩打印出来”用流程图该怎样来表示呢? 图1-1 流程图从图1-1中,我们也可以看出,一个流程图包括以下几个部分:l 表示相应操作的框;l 带箭头的流程线;l 框内外必要的文字说明。“表示相应操作的框”有以下三种,流程图由以下几种图形组成,就能将编程的思想很好的体现出来。1.2. 积木式编程积木式编程与常规的计算机编程有所不同,对于编程,处于低年级的同学对先作什么,后作什么已经有了初步的

6、想法,但是他们对复杂的C代码没有很大的兴趣,纳英特机器人积木式编程平台正是为他们设计的,使用这个软件使得学生们不用关心语言实现的细节,同时也避免了编程中经常会出现的语法错误。纳英特机器人积木式编程平台采用的就是流程图模型。每一个积木模块都可以完成一定的功能,只要按程序编写的逻辑连接这些模块就可以很快的完成一个程序的编写。1.3. 系统特点-积木式编程完全的积木式编程方法,简单直观,用鼠标就可以进行绝大部分操作。机器人控制用程序流程图实现。支持丰富的操作。-积木模块-包含绝大多数实用的纳英特机器人系统模块,特别是支持伺服电机的操作。支持多重循环嵌套,多重判断嵌套,支持多条件的生成。真正支持多进程

7、处理。-C程序代码-从流程图自动生成C程序代码C程序代码符合标准C语言语法标准支持语法高亮可以直接保存C程序文件-多语言编程-支持C、LOGO、BASIC、ASM等语言编程代码编辑系统提示丰富,上手简单-集成高效编译下载系统-支持丰富的数据类型编译速度快-操作系统NST ROBOT-实时多任务机器人操作系统支持伪代码,可跨硬件平台运行高性能虚拟机设计运行错误检测2. 系统的安装2.1. 系统要求操作系统:纳英特机器人积木式编程平台可运行在中文Windows 98/2000/XP平台。硬件要求:任何一台可以运行Windows 98/2000/XP的个人电脑,有一个空余的串口,30M的硬盘空间,以

8、及配套的纳英特机器人。2.2. 安装找到相应的自安装软件Setup.exe(在纳英特机器人配套光盘或从网站下载),双击可开始安装,按安装向导可完成安装。(安装系统时需要系统管理员权限)2.3. 运行安装完成后,在桌面上将出现纳英特机器人积木式编程平台图标,双击可运行程序;也可从开始中的程序菜单中打开。(运行系统时需要系统管理员权限)3. 软件界面3.1. 菜单栏文件:新建、打开、保存等文档的基本的操作;视图:隐藏/显示工具栏、状态栏、C语言代码、消息栏,流程图放大/缩小等操作;子 程 序:子程序的建立,保存,调用;系统工具:机器人程序的仿真(正在完善中),编译下载,机器人测试; 系统维护:进行

9、系统参数的设定;帮 助:打开帮助文件,检测软件更新,关于。3.2. 工具栏新建文件:建立新的程序流程图文件,C代码文件,Logo文件等;打开文件:打开流程图文件,C代码文件,Logo文件等;保存文件:保存当前处于编辑状态的文件;代码编辑:图形编程界面与代码编辑界面的变换;放 大:放大流程图视图;缩 小:缩小流程图视图;编译下载:下载机器人操作系统,下载用户程序;关闭系统:保存并关闭积木式系统;程序选择:进行主程序及其包含的子程序间的切换;消息栏: 实时更新最新的信息。3.3. 模块库区模块区采用树形结构,双击各个模块库名称即可打开所属模块。执行器模块库:包含机器人的各类动作操作。明细如下图:控

10、制模块库:包含各种程序流程图的流程图控制模块。明细如下图:程序模块库:包含程序进程操作以及子程序的调用模块。明细如下图:3.4. 子程序库列出当前所有的厂家提供的函数库与用户自定义的函数,供用户随时调用。3.5. 资源中心实时更新本地资源数据库,保持与服务器上的信息同步。下载完毕3.6. 流程图程序生成区流程图显示、编辑界面。通过拖放方式,可以方便的将某个模块拖至流程图区。3.7. C代码显示区显示通过流程图自动生成的机器人操作C源程序,支持语法高亮显示。3.8. 代码编辑区通过工具栏的“代码/图形界面”的转换按钮,可以对当前的文档进行代码编辑。确认消息提示中的“沿用当前程序”,则代码编辑的对

11、象为该流程图的代码。否则,进行新的代码编辑。所以,通常可以用流程图建立一个框架,然后再具体编辑代码,以提高开发速度。4. 快速入门4.1. 走四边形4.1.1. 编程思路而要让机器人完成一个“前进转弯”首先就需要启动电机,使机器人能以一定的速度向前运行一段路程,然后停下,以左轮为中心旋转90再停下,这样就走完了四边形的一边。机器人走四边形就让机器人完成“前进转弯前进转弯前进转弯前进转弯”,也就是说机器人需要完成四个“前进转弯”。要让机器人走四个边,这里有一个简便的方法,这就是循环,循环重复上述步骤(“前进转弯”)4次,机器人就能够走完一个四边形了。4.1.2. 程序编写打开纳英特机器人积木式编

12、程平台,新建流程;首先添加循环模块:用鼠标双击模块库区“控制模块库”,从中选择“多次循环模块”,拖放至流程图区。详细操作如下:对准“多次循环模块”按下鼠标左键不放,拖拉至流程图中,待方向线变成红色时,即可送开鼠标。其次添加两个移动模块,(通过后面的参数设置,将两个移动模块分别设置成直行和转弯。)添加操作同添加循环模块操作。模块添加完毕,接下来进行各个模块的参数设置。首先添加循环所需要的循环变量,双击打开函数设置窗口。选择“函数变量”页,单击“增加变量”按钮,在“变量明细”中输入名称,选择数据类型即可。由于用到的循环变量是整数类型,所以选择“int”。单击“确认”保存操作,返回主界面。其次,设置

13、循环参数。双击,打开循环参数设置窗口。选择循环变量,这里选择“i”,选择或者输入循环次数,这里选择4,然后单击“确定”,保存退出。接下来,开始设置移动的动作。双击第一个,打开移动模块的设置窗口。设定以100的功率向前直行。单击“确定”保存退出。双击第二个,打开移动设置窗口。参数的设定如图:最后,设定每个动作的执行时间。在第一个移动模块下面,放置一个延时模块;在第二个移动模块下面也放置一个延时模块。如图:双击延时模块,打开设置窗口,拖动滚动条设定向前直行的动作保持5秒钟。,单击“确定”保存退出。向左转的动作保持时间同理。4.2. 走迷宫迷宫如图所示:要求机器人能顺利的完成如图迷宫的周游任务。4.

14、2.1. 编程思路目前,机器人完成走迷宫的方法有两种:“右手法则”,“左手法则”。“右手法则”:沿着右边墙壁走,如果其右手边无障碍,则向右传;如果前面有障碍就向左转,一直重复这个操作,直至返回终点。“左手法则”:沿着左边的墙壁走,如果其左手边无障碍,则向左传;如果前面有障碍就向右转,直至左手边出现障碍物,一直重复操作,直至返回终点。这里选择左手法则进行举例说明。4.2.2. 程序编写新建一个流程,拖放一个条件循环模块。双击“条件循环模块”进行设置,选中“永远循环”,确定退出。拖放一个条件判断至循环内部,位置如图:程序编写完毕,先保存该文件。4.3. 程序的下载及运行将随机配套的数据线一端接计算

15、机上的串行通讯口,一端接纳英特机器人主电路板上的通讯口。连接好后,“编译下载”按软件提示即可下载到机器人。下载完成后可脱机运行。4.4. 调试程序启动纳英特机器人,检查机器人是否按要求运行,如果与预定的情况不符,就要在原程序基础上调整对应的参数直至符合要求。比如偏转的角度不合要求,就需要对转向时的马达功率、转向时间等参数进行调整,直到符合要求为止。5. 模块的基本操作5.1. 添加模块在模块库区选择模块,按下鼠标,拖放至目的区域,待方向线变红色时,松开鼠标,完成操作。5.2. 删除模块选择删除目标,单击鼠标右键,选择删除模块,确认即完成操作。如果删除的模块是条件旁断、循环模块,则应至模块起始处

16、删除。在删除此类模块时,将删除该模块所包含的所有的模块。5.3. 设置参数选择设置对象,双击打开设置窗口,或者通过右键快捷菜单,选择模块属性。5.4. 模块的拖放选择目标模块(可按住”Ctrl”多选),拖放至目的区域即可(既可插入至流程图,也可以放置于空白区域)如果多个模块是非连续的,则无法直接插入至流程图!提示:空白区域的IF,For,While,连续的两个普通模块间可以插入模块.6. 模块说明6.1. 执行器模块库6.1.1. 移动模块该模块主要完成机器人的直行、转向动作。0、1号电机分别代表机器人的左、右电机。通过功率大小滚动条的拖拉或者功率数值输入框的输入可以设定电机的运行功率。“”表

17、示电机反转。功率绝对数值越大,电机转速越快。6.1.2. 延时模块该模块主要实现延续机器人的上一个动作状态。主要和移动模块或者扩展电机模块相搭配,实现机器人移动或者某个动作的延续性。如:让机器人以100的功率向前直行5秒钟,延时模块可如下设置:相应的程序代码为:6.1.3. 停止模块该模块主要实现停止电机运转。可实现所有电机停止运转,也可以设定停止一个或几个电机。停止所有电机,则给“停止所有电机”打上“”。停止一个或几个电机,去掉“停止所有电机”的“”,选择停止对象。6.1.4. 启动电机模块该模块主要实现扩展电机的使用。使用时,可打开任意一个电机。操作同移动模块。6.1.5. 显示模块该模块

18、主要实现信息的打印输出。支持多参数输出。使用时,在显示信息输入框中输入要显示的内容,如:“hello world!”。当需要显示端口值或者某个变量的值时,单击“引用”按钮打开“引用”窗口。如:要显示模拟端口5的数值,则在工具栏中点击“模拟输入”,选择第“5”端口,确定退出。显示多个参数,则多次点击“引用”,以增加显示参数。当需要手动编辑显示内容时,可以选择。6.1.6. 音乐模块该模块主要用于生成音乐。依据乐理,选择音符与节拍,单击“”按钮,增加至音符列表。其中,时间框显示的时间与节拍是相对应的。用户可以自行输入发音延续时间进行自定义。如果您的计算机有内置扬声器,还可以通过单击“试听”按钮视听

19、当前的音乐。6.1.7. 伺服电机模块该模块包含八个子模块,主要完成伺服电机的初始化、定位与关闭。“开始伺服”模块用于所有伺服电机的初始化。该模块不需要设定任何参数。“关闭伺服”模块用于关闭所有伺服电机。该模块同样不需要设定任何参数。“伺服电机0”至“伺服电机5”主要用于05号伺服电机的定位。在实际应用过程中,要对伺服电机进行操作,必须先初始化伺服电机。将某伺服电机进行连续的定位,可以使用For循环来控制。如:只完成伺服电机0定位到500的位置这一目的可如下操作:定位参数可以用双击相应的伺服电机模块进行设置。例2:让控制机器人左右手的伺服电机0,伺服电机1从0运动至1000的位置,多次循环的设

20、置如下:循环变量为“i”,起始值为0,循环次数1000,步进量100。如图:伺服电机0模块参数设置:打开设置窗口,点击“引用”按钮,选择“全局变量”,在下拉列表中选择刚才声明的变量“i”。伺服电机1设置同理。6.2. 控制模块库该库主要实现流程图的流程控制。主要有:多次循环模块,条件循环模块,中断循环模块,条件判断模块。6.2.1. 多次循环模块该模块将直行循环体内的操作x次,x的大小由用户自行设定,除非用户中断循环。参数设置界面如图:选中“高级设置”可以自定义一些高级选项。如下图:循环变量的设置:主函数双击;子程序双击(注:这里是“函数func”,函数名不同,则显示不同)打开函数属性管理窗口

21、。选取目标函数,切换至“函数变量”页面,单击工具栏中的“增加变量”,输入变量名称、选择数据类型即可。默认的变量名称为“unknown”,数据类型为“int”。起始值:循环开始时赋予循环变量的数值,通常为0。通过“引用”框的选择,可以将某个变量作为起始值。循环次数:循环结束值。通过“引用”框的选择,可以将某个变量作为循环次数。步进量:每次循环,循环变量的变化值,通常为1。其他步进量主要用于伺服电机的控制。6.2.2. 条件循环模块该模块主要实现永远循环,以及符合某个条件才执行循环的功能。永远循环:为条件循环的默认循环。打开设置窗口,直接确定退出即可。条件循环:不选择“永远循环”,出现条件的设置窗

22、口。同条件判断模块的条件设置。6.2.3. 中断循环模块主要用于循环的退出。如果有多重循环嵌套,则只是退出当前循环。如:6.2.4. 条件判断模块该模块完成if.else功能。既如果条件成立执行某个操作,否则(不成立)执行另一个操作。如:条件如果成立,则“移动”,否则“停止”。条件的设置:双击打开设置窗口。条件分为“旁断类条件”,“表达式条件”,“常用操作”三大类。一个条件可以包含这三类条件。分别设置条件,点击“增加条件”,可以实现多条件的判断。判断类条件:实现某个变量大小的旁断或者某个变量是什么的旁断。如:设置条件旁断“3号模拟口的模拟量是否大于127”,可如下进行:在“变量”下拉框中选择“

23、模拟输入”,在“端口”下拉框中选择端口“3”然后选择判断符“大于”,输入目标数值大小,这里是127。单击“增加条件”按钮,完成条件添加。“确定”退出。表达式条件:实现运算式的大小判断。如:设置条件判断“模拟3号口与模拟4号口的差值是否大于10”,设置如下:单击“引用”打开引用变量窗口。这里选择“模拟输入”,端口“3”。选择预算符“减去”模拟4号口操作同模拟3号口。单击“增加表达式”按钮,系统将打开引用界面,这里选择“常量”页,“比较”输入框选择“大于”,数值为“3”:最后增加条件完成条件设置。“确定”退出。常用操作主要实现“START”,“STOP”按钮的操作判断。条件间的逻辑关系如果已经设置

24、一个条件,再增加一个条件,会自动弹出条件间关系的设置窗口。依据需要,选择相应的逻辑关系既可。“和”关系:“条件1” 和 “条件2”,“和”关系表示两个条件都成立,则条件成立。“或者”关系:“条件1”或者“条件2”,表示两个条件中有一个成立,则条件成立。“非”关系:“条件1”非“条件2”,表示条件1成立条件2不成立,则条件成立。6.3. 程序模块库该库包含的模块主要完成系统函数的调用,表达式的赋值,进程开启关闭以及子程序调用等高级功能。6.3.1. 调用系统函数系统内部集成了丰富的函数,很多函数并没有定义到模块中去。通过此模块可以调用这些函数,如下图:其中:无返回值类函数起到“过程”的作用,只完

25、成任务,不返回任何值。 返回值为数值类型的函数将返回一个结果。6.3.2. 表达式定义模块主要实现变量的赋值(初始化)。一个表达式定义模块可以包含多个表达式定义。参数的设置首先需要添加变量。单击“引用”打开变量引用窗口。“增加”可以增加一个表达式定义。如:往模块里增加“iananlog(3)”,操作如下:如果还未设置变量则先打开函数属性定义变量。在下拉框中选择对应的变量“i”单击“引用”打开引用窗口。选择“模拟输入”,端口选择“3”,确定退出。单击“增加”完成表达式的添加。6.3.3. 进程模块6.3.3.1. 关于进程所谓的进程就是一个并发执行的子程序,在机器人平台中来讲,开启一个进程意味着

26、系统会给这个进程分配50ms的执行时间.进程的实体就是某个函数.如下面这段程序:() void main() start_process(music(); while (1) tone(1000.0,1.0); void music() while(1) beep(); 再看这个:(由于music里面是个死循环,程序将不会再往下,我们只能听到连续不断的beep声,tone(1000.0,1.0)将不会发生.)void main() music(); while (1) tone(1000.0,1.0); void music() while(1) beep(); 进程函数的定义和普通函数的定义

27、没有任何区别(函数管理)。一个程序可以包含多个进程,这些进程将同时被执行。进程的操作依靠进程标志进行。进程标志实际是一个int型变量,同建立普通变量没有区别。下面用具体的例子说明进程的开启与关闭。准备工作:声明进程标志 变量名为ret,数据类型为int。 增加函数func。6.3.3.2. 开启进程模块选择一个函数,单击“增加”,将此函数增加为进程。如果误操作,可以“删除”。如果该函数有参数,则自动在“参数”一栏中列出,用户可单击“修改”进行函数参数的设置。如果以后不对该进程进行操作,可以忽略进程标志的设置。如果以后需要关闭该进程,则必须给该线程设置一个进程标志返回值,这里我们选择ret。确定

28、退出。6.3.3.3. 关闭进程模块选择当前关闭目标进程,单击“ ”按钮,完成退出。注意:一个开启线程模块可以拥有多个线程的开启,一个关闭线程模块也可以拥有多个线程的关闭。6.3.4. 调用子程序子程序的调用操作类似与线程开启。下面以实际例子进行说明。准备工作:增加函数migong。选择migong函数,增加为“子程序条用模块”拥有的函数,如果该函数有参数,通过“修改”按钮可以修改参数的值。如果该函数有返回值,而且需要使用这个返回值,则可以通过“选择返回值变量”下拉框给该函数设定。6.3.5. 子程序返回该模块主要用于子程序的返回值定义。如:定义fire函数,fire函数的返回值定义为int类

29、型。1表示灭火成功,0表示灭火失败。7. 常见问题及解决办法7.1. 程序启动失败如果您的系统是win98,请安装随机光盘里的win98数据库驱动升级文件. 如果您的系统是win98并且已经安装了数据库驱动升级文件、win2000,winXP,重新启动后还是出现此类问题,请与softR联系。7.2. 流程图显示不完全在视图菜单中选择“自动适应窗口”点击“程序选择”下拉框即可!7.3. 无法将程序下载到机器人中(1)、检查当前选择的串口是否为机器人实际连接的串口。请“取消”下载,然后“刷新串口”,选择串口,重新下载。(2)、检查是否已经打开机器人的电源。下载操作系统,将电源开关拨往左边的“系统”

30、档位;下载用户程序,将电源开关拨往右边的“下载程序“档位。(3)、如果提示框中出现编译错误的提示,则请依据提示,修改源程序的错误。8. LOGO子系统8.1. 系统特点l 支持单个电机速度的设置及停止l 支持4个电机l 支持模拟及数字传感器l 用户通过自定义,可支持传感器的无限扩展l 支持多进程l 真正的遵循LOGO语言规范.l 支持函数格式、使用方法的动态提示,方便编程.l 生成相应的C代码,无C经验的LOGO用户可提高C的入门速度.l 支持有限的换行,提高代码可读性.l 支持代码注释8.2. LOGO子系统语言编程规范l 所有关键字要求大写l 同一个语句须在同一行,中间不得换行;不同的语句

31、可以在同一行.FOR,REPEAT,WHILE的循环体(“”“”)内支持换行.l 被调用的函数必须位于调用者之前.例:TO ABCENDTO MAINABCENDl 变量在声明时前面需加引号(“),使用时,前面需加”:”(不包括双引号).如:MAKE “VAR 1IF :VAR=1 THEN MAKE “VAR :VAR+1l 本系统的主函数名必须为MAIN.l 注释符号为“/”, /注释内容8.3. LOGO的关键字目前,图形化编程系统的Logo子系统支持的关键字如下:(附其格式)关键字意义格式TO声明一个函数/过程 TO 函数名END函数/过程结束MAKE变量进行赋值,如果变量还未声明,则

32、首先声明变量MAKE “变量名 表达式IF条件语句IF ( 条件表达式) THEN ELSETHENELSEWHILE条件循环WHILE 条件表达式 循环体FOR多次循环FOR “变量名 初始值 结束值 循环体REPEAT多次循环REPEAT 次数 循环体BREAK中断循环8.4. LOGO子系统的自定义符号为了补充Logo语言的先天不足,增加了一些自定义符号,l A*系列 用于模拟传感器 “*”为对应的传感器端口l D*系列 用于数字传感器 “*”为对应的传感器端口例子:IF :D3=0100 THEN RT 90上述语句的指的是:如果7号数字端口的传感器值为0 则向右转90度.8.5. L

33、OGO子系统的函数(包括自定义函数)目前,图形化编程系统的Logo子系统支持的函数如下:(附其格式)函数自定义意义格式FD 前进若干个单位FD int1BK后退若干个单位BK int1LT左传若干角度LT int1RT右转若干角度RT int1TONE以某种频率发音若干时间TONE频率(float) 时间(float)WAIT延时若干秒WAIT float1LAUNCH开启进程LANUCH 函数名HALT中止进程(目前不支持)HALT 函数名M0电机0以一定的功率运行MO int1(功率)M1电机1以一定的功率运行M1 int1M2电机2以一定的功率运行M2 int1M3电机3以一定的功率运行

34、M3 int1STOP停止所有电机STOPOFF停止某个电机OFF int1PR显示信息PR :变量名9. IC编程基础知识从本章开始,我们要逐步迈进C语言的世界,在编写功能更强大的程序之前,需要了解下面的知识。它们不是每个程序必需的,但对于编写程序是非常有帮助的。9.1. 基本数据类型在C语言中变量和常量是基本的数据对象。编写程序总是要与各种数据打交道,如马达的速度、等待的时间等,理解C语言是如何来处理各种数据,对编程和理解程序是非常有宜的。9.1.1. 变量在程序中用来代表数据的字符。如:可以在程序中用v代表马达的速度,看下面的例子:void main() int v; v = 80; m

35、otor(0, v); motor(1, v);试试看,将这段程序在IC中编写好,下载到机器人里,观看其动作如何?机器人走了直线。程序中没有使用“motor(0, 80);”这样的语句,它怎么会直线呢?这就是变量起的作用。试着将程序中的80,改成其它数值(马达功率适用的数值),看看机器人马达的功率是否与修改后的数值吻合。更改变量的值后,后面使用变量时它代表的值也会改变成此数值,除非再次改变它。变量在程序中可以替代一些数值,这段程序中使用变量v代替马达的功率80这个数值。程序中只出现了一次80,而两个马达却都可以转动,说明变量可以重复使用。拼写变量可由字母“A-Z、a-z”、数字“0-9”和下划

36、线“_”组成,但不能以数字开头,且区分大小写。C语言的关键字,如if,while等,不能用于变量名。全局变量名和函数名不能相同。此外,若局部变量名与全局变量名或函数名相同,则在该局部变量作用范围内不能使用同名的全局变量或函数。定义变量 在C语言中,可以在程序的最顶层(在任何一对花括号之外)或块(用“”括起的函数代码)的起始处定义变量。通常,变量以如下形式定义: ;int i;或 =;int j = 0;在机器人操作平台中,可为整型(int),长整型(long),浮点型(float),字符型(char)或结构(struct ),它决定所定义变量的初始类型。这是定义变量的一般形式。在定义指针和数组

37、时,形式会有所改变,这将在后面说明。局部和全局作用范围 如果变量在函数内定义或作为函数的参数,它的作用范围是局部的,即该变量只在函数定义范围内有效。如果一个变量在函数外定义,则它是一全局变量。该定义对所有函数有效,包括没有定义该变量的文件中的其它函数(即其它文件中的函数)。变量初始化 变量可在定义时初始化。若不给出初始值,变量初始化为零。所有的全局变量必须初始化为常量。局部变量可被初始化为任意表达式的值,包括任意的全局变量,函数调用,函数参数,或已初始化的局部变量。此处给出初始化的简单例子:int i = 50;/定义i为整型全局变量,初始值为50long j = 100L; /定义j为长整型

38、全局变量,初始值为100int foo() int x; /定义x为整型局部变量,初始值为0 long y = j;/定义y为整型局部变量,初始值为j 任何时候只要运行函数,该函数中包含的局部变量将被初始化。任何时候只要复位情况出现,全局变量将会被初始化。复位情况包括:n 代码下载n 主程序main()运行n 系统硬件复位持久全局变量IC中已实现了一种特殊的全局变量的持久形式。一个持久的全局变量可像任何其它全局变量一样初始化,但其值只在代码下载的情况下会初始化,而在其它复位情况下保持不变。如不给出初始值,在代码下载时持久全局变量的值将会初始化为零。为定义持久全局变量,需在类型说明前加上关键字“

39、persistent”。例如: persistent int i = 500;创建了一个持久全局变量i,其初始值为500。当打开主板电源时,或运行主函数时,或系统复位时,持久全局变量保持其状态。只有当装入或卸载文件而导致代码下载时,持久全局变量才失去其状态。而且在IC中,如果下载代码仍然处于运行状态, 持久全局变量的值可以被读取。例如,通过该方式可读取最终的测定值,或修改赋给该持久全局变量的初始值。注意:创建的持久全局变量主要用于两种应用场合:n 每次复位后,原来的校正值和配置值均不需重新计算n 关掉机器人电源后,其学习算法可以保持下来9.1.2. 常量常量就是在程序中使用的各种显示为其数值的

40、量,如:motor(0,80);其中的0和80就是常量;常量与变量一样,也有许多类型,根据不同的需要使用不同类型的常量。整型常量 在IC中整型常量可定义为十进制形式(如:4503或-1),可定义为使用“0x”为前缀的十六进制形式(如:0x1fff),还可定义为一种非标准但常用的使用“0b”为前缀的二进制形式(如:0b1001001),但不支持使用零前缀的八进制常量。长整型常量 通过在十进制整数后加上后缀“L”或“l”(字母L的大小写)可创建长整型常量。例如,0L是长整型的零。虽然“L”的大小写均可使用,但大写形式更具有可读性。浮点数型常量 浮点数可使用小数点或科学计数法 (例:“10e3”或“

41、10E3”)分段。例如,浮点数零可以“0.”,“0.0”或“0E1”的形式给出,而不是仅仅0。字符型与字符串型常量 单引号括起的字符型常量的值是其ASCII码值,例:x。字符串型常量用成对的双引号定义,如:This is a character string.。NULL 特殊常量NULL具有零值,可对指针或数组变量赋值或进行比较(将在后面说明)。通常,其它常量是不能转成指针类型,所以很多情况下要用到NULL。例如,为检查指针是否已初始化,需要将其与NULL进行比较,避免试图对空指针读写。又如,在一个链表结构中,每个元素包含一个数值和指向下一个元素的指针,为了找到链表的结尾就需将指向下一个元素的

42、指针与NULL进行比较。9.2. 各数据类型的取值范围 IC中的任何数据类型都有其相应的取值范围,在使用变量和常量时要注意,不要超出其取值范围,否则会出现错误。IC支持的数据类型的取值范围见下表:数据类型定义变量使用常量取值范围有效位数整型Int i;-2、0、80-32,768 +32,767长整型Long jL;50L、-20L-2,147,483,648 +2,147,483,647浮点型Float f;0.0110-38 10387位字符型Char ch;“A”0 2559.3. 数组数据类型数组用于储存同类型的数据序列(所有的数组元素有相同的数据类型)。定义数组时需指定其长度(如,i

43、nt a10)。数组中的元素可像其它变量一样进行赋值和读取。数组的定义和初始化 数组使用“N”进行定义。如:下面的语句定义了一个有10个整型变量的数组int a10;在数组中,元素(数组中的每个值)计数从0开始,以数给的个数N-1结束。在该数组中,元素计数从0到9。通过在“ ”中括号中加入下标存取数组元素。a4表示数组a中的第5个元素(以零为基数)。数组初始化为全零。数组亦可在定义时初始化,方法为在“”内用逗号隔开各数组元素初始值。若在定义数组时给出初始化信息而未在方括号内指定数组大小,则数组长度由给出的数组元素的个数而定。例如,int a = 0, 4, 5, -8, 17, 301;创建一个有6个整数的数组,a0为0,a1为4,以此类推。如果定

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号