交互式程序设计复习.doc_第1页
交互式程序设计复习.doc_第2页
交互式程序设计复习.doc_第3页
交互式程序设计复习.doc_第4页
交互式程序设计复习.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-最新资料推荐- 交互式程序设计复习 1、JC 的组成,JC 编译方式的特点。 JC 由两部分组成: 编译环境(包含交互式命令行编辑和调试功能)、能力风暴操作系统。 JC 编译方式的特点: 不直接编译生成针对特定处理器的机器代码,而是先编译生成基于堆栈虚拟机的伪代码,然后由能力风暴操作系统解释执行。 2、 任何时候只要复位情况的出现,全局变量将会初始化。 复位情况包括: 代码下载;主程序 main()运行;系统硬件复位。 3、 格式化字符汇总 %d: 输出类型:int 描述:十进制整数 %x: 输出类型:int 描述:十六进制整数 %b: 输出类型:int 描述:低位字节为二进制数 %c: 输出类型:int 描述:低位字节为 ASCII 字符 %f: 输出类型:float 描述:浮点数 %s: 输出类型:char 描述:字符数组 4、LCD 使用注意事项 a) LCD 液晶屏幕上的最右下字符位置被作为系统的状态指示。 当能力风暴操作系统运行正常时,该处的太极字符持续闪烁。 若停止闪烁,则说明能力风暴操作系统运行出错。 这时需更新操作系统。 b) 若显示字符超出 31 个,则被截断,超出部分不显示。 c) 显示字符长度大于 16 时,长出部分折到下一行显示。 d) 目前不支持长整数(32 位)输出。 e) 如果显示格式化字符与显示类型不匹配,会有意外错误。 5、JC 的库函数。 Void motor(int index,int vel):vel 功率是从 100 到100.电机编号 index: 左 1 右 2,扩 3. Void drive(int trans_vel,int rot_vel)trans_vel 是平移速度(100 -100)rot_vel 是旋转速度 Void stop()停止运动 Void beep()产生一段 0.3 秒 1000HZ 的音频信号 Void wait(float sec)让前一状态保持一段时间 Int digitalport(int channnel)读数字口上传感器的值。 channel 的范围是 07.返回值 0 或 1 Int photo(int index)光敏传感器。 左 1 右 2. 返回值 0255,光线越暗数值越大。 Int microphone()声音传感器的值,返回值 0255.,声音越响数值越大。 Int ir_detector()红外测障,0 无 1 左 2 右 4 前 Int bumper()碰撞传感器,0 无 1 左 2 右 4 前 8 后 Int rotation(int index)光电编码器,1 左 2 右 6、 多个进程如果进行通讯怎么办? 多进程之间的通讯及同步问题。 遵循的原则? 进程间的通讯: 通过全局变量进行。 多进程之间的通讯及同步问题。 遵循的原则: 1)一种设备只在一个进程中访问;2)同时只能有一个进程写一个全局变量,但可以有多个进程同时读。 7 、使用 JC 会遇到的错误类型。 使用 JC 会遇到两种类型的错误: 编译错误和运行错误。 编译错误包括: 语法错误和数据类型不匹配。 运行错误发生时,将在液晶屏幕上显示错误号。 错误代码列表(P29) 8、 如果程序不能正常下载,下 可能有以下 6 个方面的原因: 1)能力风暴的主开关未打开。 2)电池电压不足。 3)机器人型号设置不正确。 4)该串口硬件有问题。 5)能力风暴操作系统被破坏。 6)串口线头过松,接触不好 9、 几种常用的操作。 如何更新操作系统 如何为机器人配置型号 如何给机器人充电 如何下载自检程序 如何下载当前程序 如何正确使用复位/ASOS按钮 如何让机器人走的直线更好 10、 构成机器人的三大要素是什么? 请从这三大要素着手分析说明机器人的工作原理。 构成机器人的三大要素是: 传感器、微控制器和执行器。 机器人的工作原理: 机器人通过传感器采集外界环境信息,然后将采集的信息经过转换元件转换成电信号,再经过 A/D转换成数字量,传递给机器人的大脑微控制器,微控制器根据装载的 JC 程序进行思考,发出相应的命令给执行器执行。 11 、机器人的身体结构: 主板: 由很多电子元器件组成,跟人的大脑一样,主要完成接收信息、处理信息、和发出指令等。 控制按键: 机器人的运行控制部件。 包括开关按钮、电源指示灯、充电指示灯、充电口、下载口、复位/ASOS 按钮、运行键、通信指示灯。 传感器部分: 包括五种基本的传感器(P10)。 执行部分: 扬声器、LCD、主动轮及其驱动机构、从动轮。 12、 微控制器 68HC11, 端口 AE 的功能。 在机器人中的使用情况。 PORT A: 数字口。 PA2 输入捕捉通道。 PA3-PA6 输出比较通道。 PA7 通用的 I/O 口。 能力风暴机器人中: 光电编码器利用 PA0、PA1 口捕捉计码盘信号;电机驱动采用 PA5、PA6发出 PWM 信号;喇叭由 PA3 控制。 PORT B: 端口功能受 68HC11E 的工作模式的影响,单独工作模式下,提供普通的 8 条输出信号通道,扩展工作模式下,提供 8 位地址通道。 能力风暴机器人中: PORT B 与 PORT C 提供 16 条地址线, PORT B 做为地址的高 8 位。 PORT C: 单独工作模式下,提供普通的 8 条输入/输出信号通道,扩展工作模式下,提供 8 位地址/数据复合通道。 能力风暴机器人中: PORT B 与 PORT C 提供 16 条地址线,8条数据线(PORT C 做为地址的低 8 位,地址/数据时分多用) PORT D: PD0-PD1 作为串行通信口(SCI),PD2-PD5 串行外设接口(SPI); 能力风暴机器人中: 用 PD0,PD1 与 PC 机进行通信;PD0(RXD)接收数据;PD1(TXD)发送数据。 红外传感器: 利用 PD2,PD3 设置发光二极管的状态;直流电机: 利用 PD4,PD5 给驱动电机芯片提供输入脉冲。 PORT E: 模拟口。 能力风暴机器人中: 光敏传感器利用 PE0,PE1 口采集光敏电阻上的电压值;麦克风利用 PE2 口采集电压值;碰撞传感器利用 PE3 口采集电压值; 红外传感器利用 PE4 口采集红外探测器的当前值。 13 、机器人的驱动方式?机器人的调速系统采用了哪些装置,它是如何进行调速的? 机器人的驱动方式采用差动驱动方式,将两个独立的运动合成为一个运动。 当我们把两个电机的运动合成为一个运动时,这就成了差动运动。 调速系统采用的装置为: 直流电机和齿轮减速器。 机器人上通过主板发 PWM 脉宽调制信号,使电机上得到不同宽度的脉冲方波信号,从而调节输入到电机的平均电压。 而直流电机上的电压大小影响他的转速和转矩,直流电机的转速又经过减速器将转动传递给主动轮。 当转矩一定时,加载在直流电机上的平均电压值越大,转速越高;相反,转速越低。 这样,通过改变电机电压的方式就可以实现调速。 14 、什么是传感器?它的作用和组成。 传感器就是自动测量系统中一个把待测量变换成某种电信号的装置。 传感器是能感觉规定的被测量,并按一定的规律性,转换成可用输出信号的器件或装置。 通常由敏感元件和转换元件组成。 15、能力风暴五种基本传感器,三种基本执行器,所对应的库函数有哪些,如何应用。 基本的结构和执行的过程。 、能力风暴五种基本传感器,三种基本执行器,所对应的库函数有哪些,如何应用。 基本的结构和执行的过程。 : 五种基本的传感器及其对应库函数及应用方法: (1)碰撞传感器: int bumper() 碰撞传感器检测 (2)红外传感器: int ir_detector() 红外传感器检测 (3)光敏传感器: int photo() 光敏传感器检测 (4)麦克风: int microphone() 声音传感器检测 (5)光电编码器: int encoder(int) 读取光电编码器器当前状态; Int rotation(int index) 光电编码器脉冲累计读数 三种基本的执行器及其对应库函数的使用方法: (1)扬声器: void beep() , 使用它可产生一段 0.3 秒 500 赫兹的音频信号,发生结束后返回。 (2)LCD: (3)直流电机: void stop()关闭左右两个电机,停止运动;void motor(int m,int speed)以功率级别 speed 启动电机 m; 16 、简述 基于视频技术的野外探险机器人的硬件组成,以及机器人与电脑之间的控制信号、视频信号的无线通讯实现过程。 的硬件组成,以及机器人与电脑之间的控制信号、视频信号的无线通讯实现过程。 基于视频技术的野外探险机器人的硬件组成: 机器人、AS 无线摄像机、视频捕捉卡、微功率无线通讯模块、电脑。 视频信号的无线通讯的实现: 在机器人上安装有AS无线摄像机和微功率无线通讯模块,在上位机安装视频捕捉卡,视频信号通过机器人上安装的无线摄像头采集视频信息,通过连接在电脑上的 AS 无线摄像机的接收模块接收到视频信息,然后输出到接收模块所连接的视频采集卡的视频输入端,从而完成机器人与电脑的视频信号的传输。 控制信号的无线通讯的实现: 在机器人和上位机上都安装有微功率无线通讯模块,机器人与电脑之间,通过微功率无线通讯模块的接收和发送信号,完成控制信号的传输。 编写程序: int X=50; int *Xptr; Xptr=X; printf(*Xptr = %dn,*Xptr); _50_ X=100; printf(%dn,*Xptr); _100_ *Xptr=200; printf(X=%dn,X); _200_ P13P14 检测光线亮度和累计左右碰撞次数的程序。 把几个机器人放在一起,编写程序并下载运行,试一试机器人你叫我应的场面是不是很有趣。 一部分机器人先发音,一部分机器人先侦听。 发音的机器人发音完毕后转入侦听,听到声音的机器人回应(发音)。 把几个机器人放在一起,编写程序并下载运行,试一试机器人你叫我应的场面是不是很有趣。 一部分机器人先发音,一部分机器人先侦听。 发音的机器人发音完毕后转入侦听,听到声音的机器人回应(发音)。 /*初始化 b=1 时,设置该机器人先侦听;初始化 b= -1 时,设置该机器人先发出声音。 */ n void main() n int b=1; n int mic; n while(1) n mic=microphone(); n printf(mic=%dn,mic); n wait (0.5); n if(b=1mic140) n b=b*(-1); n beep ( ); n wait (2.0); n if(b=-1) n n beep(); n wait (1.0); n b=b*(-1); n 请用光敏传感器让机器人追光。 机器人放在离光源有一段距离的地方,但光敏传感器能探测到光源的位置,此时,让机器人向光源靠近,足够接近光源时停下来。 请用光敏传感器让机器人追光。 机器人放在离光源有一段距离的地方,但光敏传感器能探测到光源的位置,此时,让机器人向光源靠近,足够接近光源时停下来。 n Void main() n n int right,left,diff,even; n while(1) n n right=photo(2); n left=photo(1); n diff=right-left; n even=(right+left)/2; n if (even100) n stop(); n else if (diff20) n drive(60,10); n else if (diff-20) n drive(60,-10); n else drive(60,0) n wait(0.1); n n 驶 请让机器人以最大速度行驶 5 秒,然后用液晶显示屏显示机器人左轮旋转的圈数(机器人的主动轮每旋转一圈,产生秒,然后用液晶显示屏显示机器人左轮旋转的圈数(机器人的主动轮每旋转一圈,产生 33 个脉冲)。 n void main () n n rotation(1); n drive(100,0); n wait(5.0); n printf(left=%fn,(float)rotation(1)/33.0); n stop( ); n 请用麦克风检测声音,让机器人第一次听到声音时,全速前进;第二次听到声音时,停下来;如此循环。 (有效声音标志请用麦克风检测声音,让机器人第一次听到声音时,全速前进;第二次听到声音时,停下来;如此循环。 (有效声音标志 microphone() 返回值大于 180) n Void main() n n int I=0; n int mic; n while(1) n n mic=microphone(); n if (mic180) I+=1; n if (I=1) drive(100,0); n else n stop(); I=0; n n 红外避障库函数: /* 红外测障,返回值: 无 0,左 左 1,右 右 2,前 前 4 。 左发射 PD2, 右发射 PD3, 接收 PE4*/ n int ir_detector() n int val1, val2, val3, result; n val1 = read(0x100A) 0b10000; /* 检测接收到的背景红外信号 */ n bit_set(0x1008,0b0100); /* 打开左红外发射传感器, PD2 口 */ n msleep(2L); /* 等待 2 毫秒 */ n val3 = read(0x100A) 0b10000; /* 检测接收到的红外信号 */ n bit_clear(0x1008,0b0100); /* 关闭左红外发射传感器 */ n bit_set(0x1008,0b1000); /* 打开右红外发射传感器, PD3 口 */ n msleep(2L); /* 等待 2 毫秒 */ n val2 = read(0x100A) 0b10000; /* 检测接收到的红外信号 */ n bit_clear(0x1008,0b1100); /* 关闭所有红外发射传感器 */ n result = (val1 val2) 3) | (val1 val3) 4); n msleep(2L); /* 等待 2 毫秒 */ n if(result=3) result=4; n return result; n 请用能力风暴机器人做一个简易电子琴,碰撞碰撞环,发出 8 个不同方位的声音,并且在液晶显示器上,分别将个不同方位的声音,并且在液晶显示器上,分别将 8 个不同方位的碰撞信息显示出来。 n void main() n n int bump; n while(1) n n bump=bumper(); n if (bump=0b0011)printf(fontn);tone(262.0,0.5); n else if (bump=0b0001)printf(right and fontn);tone(294.0,0.5); n else if (bump=0b0101)printf(rightn);tone(330.0,0.5); n else if (bump=0b0100)printf(right and backn);tone(350.0,0.5); n else if (bump=0b1100)printf(backn); tone(393.0,0.5); n else if (bump=0b1000)printf(left and backn);tone(441.0,0.5); n else if (bump=0b1010)printf(leftn);tone(495.0,0.5); n else if (bump=0b0010)printf(left and fontn); tone(247.0,0.5); n wait(0.5); n n n n 读取系统时间,此时的系统时间单位是 秒 ,然后通过程序处理后,变为分: 秒: 毫秒分: 秒: 毫秒 的显示方式,也就是将系统读出的时间变为具体的分、秒、毫秒值来显示。 n void main( ) /*主函数,作为程序入口 */ n float fsec; /*定义浮点数型变量 */ n int sec,msec,min; /*定义整型变量 */ n while(bumper( )=0) /*当没有碰撞时 */ n fsec = seconds(); /*读取时间值,单位为秒 */ n sec = (int)fsec; /*得到所有时间的整数秒值*/ n msec = (int)(fsec-(float)sec)*100.0);/*得到毫秒的整数值*/ n min = sec/60; /*得到分的值*/ n sec = sec - min*60; /*得到秒的值 */ n if(min10) printf(0%d,min); /*如果分小于 10,前面加 0 显示 */ n else printf(%d,min); /*否则,直接显示分 */ n if(sec10) printf(:0%d,sec); /*如果秒小于 10,前面加 0 显示 */ n else printf(:%d,sec); /*否则,直接显示秒 */ n if(msec10) printf(:0%dn,msec); /*如果毫秒小于 10,前面加 0 显示 */ n else printf(:%dn,msec); /*否则,直接显示毫秒 */ n wait(0.1); /*等待 0.1 秒 */ n n 机器人直走校准程序及调试方法。 n int drive_bias = 0; n void driveb(int trans, int rot) n int rot_bias = (drive_bias * trans) / 100; n motor(0,trans - (rot + rot_bias); n motor(1,trans + (rot + rot_bias); n 声与光在不同明暗环境中发不同的声音 n /* 依据光敏传感器检测值的差值计算发声的频率 */ n float freq(int left, int right) n int delta; n float frq = 100.0; n delta = left - right; n frq = 2500.0 * (1.0 + (float) delta) / (float) max(left, right); n return frq; n n /* 依据左右光敏检测值的和通过算式计算出发声的间隔时间 */ n float period(int left, int right) n return (0.0008 * (float) (512-(left + right); n n void dark() n n int left = 0; n int right = 0; n while (1) n n left = photo(1); n right = photo(2); n tone(freq(left, right),0.1); /* 用算出的频率发声 */ n wait(period(left, right); /* 用算出的间隔作为发声的间隔 */ n n 飞蛾扑火程序: n void main() n n int r,l; /*定义变量 r 左光敏 l 右光敏*/ n int a1,a2,a3; /*定义标志位 a1 找光源方向 a2 靠近光源 a3 围绕光源转*/ n int d1,d2; /*定义参数 d1 靠近光源左右方向参数 d2 旋转参数*/ n a1=1;a2=0;a3=0; /*标志位设初值,a1 设 1 则先执行找光源方向*/ n while(1) n n while(a1) /*执行 a1 找光源*/ n n r=photo(2); n l=photo(1); n printf(a1:r=%d,l=%dn,r,l); n if(r240|l240) /*发现光源方向的条件*/ n a1=0;a2=1; /*转到 a2 执行,靠近光源*/ n drive(0,20); /*原地转,寻找光源方向*/ n wait(0.1); n n while(a2) /*执行靠近光源*/ n n r=photo(2); n l=photo(1); n d1=(l-r)*2; /*设置 d1 参数*/ n printf(a2:r=%d,l=%d,d=%dn,r,l,d1); n if(r150|l150) /*到达光源附近的条件*/ n a2=0;a3=1; /*转到 a3 执行,围绕光源转圈*/ n else if (r240l240) /*远离光源的条件*/ n a1=1;a2=0; /*转到 a1 执行,寻找光源方向*/ n drive(80,d1); /*靠近光源移动*/ n wait(0.1); n n while(a3) /*执行围绕光源转圈*/ n n r=photo(2); n d2=(r-150)*2; /*设置 d2 参数*/ n printf(a3:r=%d,d=%dn,r,d2); n drive(80,d2); /*围绕光源转动,先调整轨道,停留在 r=150 的圆圈轨道上运动*/ n wait(0.01); n n n 跟人走 n void main() n int ir = 0; /* 红外检测变量 */ n int bmp = 0; /* 碰撞检测变量 */ n int old_bmp = 0; /* 前一次的碰撞检测结果 */ n int fol_trans_def =80; /* 预设的前进速度 */ n int fol_rot_def = 40; /* 预设的转弯速度 */ n printf(Follown); /* 显示在 LCD 屏幕上 */ n while(1) n ir = ir_detector(); /* 取红外系统检测结果 */ n bmp = bumper() 0b0011; /* 检测前左、前右方向上的碰撞 */ n if (old_bmp (! bmp) /* 连续两次碰撞 */ n wait(0.5); n else if (bmp) /* 如果前方有碰撞 */ n stop(); /* 停止运动 */ n else if (ir = 0) /* 前方没有物体 */ n stop(); /* 停止运动 */ n else if (ir = 4) /* 前方有物体 */ n drive(fol_trans_def,0); /* 往前追 */ n else if (ir = 1) /* 物体在左侧 */ n drive(fol_trans_def,(-fol_rot_def); /* 转向左 */ n else if (ir = 2) /* 物体在右侧 */ n drive(fol_trans_def,fol_rot_def); /* 转向右 */ n wait(0.1); /* 让运动持续一会 */ n old_bmp = bmp; n n 鸡宝宝、鸡妈妈。 灭火程序示例。 多进程同步: int bill_trans=0; int bill_rot=0; int bmpr=0; int forward=0; int running=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论