电脑鼠连续转弯程序

合集下载

电脑鼠算法

电脑鼠算法
迷宫的规范
1) 迷宫由16×16个﹑18cm×18cm大小的正方形单 元所组成。
2)迷宫的起始单元可选设在迷宫四个角落之中的任 何一个。起始单元必须三面有隔墙,只留一个出口。 5
竞赛主要规则
电脑鼠的基本功能是从起点开始走到终点,这个 过程称为一次“运行”,所花费的时间称为“运行时间 ”。从终点回到起点所花费的时间不计算在运行时间内 。从电脑鼠的第一次激活到每次运行开始,这段期间所 花费的时间称为“迷宫时间”。如果电脑鼠在比赛时需 要手动辅助,这个动作称为“碰触”。竞赛使用这三个 参数,从速度﹑求解迷宫的效率和电脑鼠的可靠性三个 方面来进行评分。
货车类,上渡船有如下规定:
• 客车先于货车上渡船,且每上4辆客车,才允许放一辆货车; • 若等待客车不足4辆,则以货车代替; • 若无货车等待,允许客车都上船。
• 试设计一个算法模拟渡口管理。
16
各阶段所用的算法
17
3) 回溯
• 算法思想:深度优先遍历
• 步骤一:先将根结点作为活结点; • 步骤二:向活结点的子结点扩展,若其存在,子结点作
迷宫电脑鼠算法
重庆理工大学 计算机科学与技术系
1
五大内容:
2
一、电脑鼠简介
电脑鼠是一种具有人工智能的轮式机器人
它是多个学科交叉结合的结晶
3
电脑鼠走迷宫的关键技术
4
二、电脑鼠迷宫竞赛
目的
电脑鼠走迷宫竞赛的目的是制作一个微型机器人, 它能在最短的时间内穿越迷宫到达终点。参赛的机器人 称为“电脑鼠”,将电脑鼠放入迷宫并启动操作的人称 为“操作员”。
6
三、电脑鼠走迷宫演示
7
四、电脑鼠迷宫的设计与算法
电脑鼠走迷宫三个阶段

Scratch第二课

Scratch第二课
好玩的Scratch
猫鼠大战
Scratch 满足你的控制欲望
情境:
老鼠看见猫就没命地逃跑,猫当然不会轻易放过老鼠, 在老鼠后面穷追不舍,边追边向老鼠喊话……
1、请出老鼠
调整角色大小
1、键盘控制小猫移动 (上、下、左、右四个方向)
想法
模块
用上移键控制对象 向上移动
面向上方移动
等待0.1秒
切换到下一个造型
4、巩固和提高
试着修改当前的指令,让小猫抓到老鼠后游戏自动结束。
移动10步

重复执行2次
想一想,上面的脚本在重复执行时为何不用 果用了会怎样呢?
脚本
?如
1、键盘控制小猫移动 (通过x轴、y轴得到移动效果)
想法
模块
指令描述
用按键控制对象移 动
上、下使用y轴 控制,左、右使 用x轴控制。
2、老鼠跟随鼠标移动 (通过x轴、y轴得到移动效果)
方法
指令
1
2
3
3、让小猫开口说话

滑鼠操作

滑鼠操作

Ctrl+S 保存Ctrl+W 关闭程序Ctrl+N 新建Ctrl+O 打开Ctrl+Z 撤销Ctrl+F 查找Ctrl+X 剪切Ctrl+C 复制Ctrl+V 粘贴Ctrl+A 全选Ctrl+[ 缩小文字Ctrl+] 放大文字Ctrl+B 粗体Ctrl+I 斜体Ctrl+U 下划线Ctrl+Shift 输入法切换Ctrl+空格中英文切换Ctrl+回车QQ号中发送信息Ctrl+Home 光标快速移到文件头Ctrl+End 光标快速移到文件尾Ctrl+Esc 显示开始菜单Ctrl+Shift+<快速缩小文字Ctrl+Shift+>快速放大文字Ctrl+F5 在IE中强行刷新Ctrl+拖动文件复制文件Ctrl+Backspace 启动\关闭输入法拖动文件时按住Ctrl+Shift 创建快捷方式Alt+空格+C 关闭窗口Alt+空格+N 最小化当前窗口Alt+空格+R 恢复最小化窗口Alt+空格+X 最大化当前窗口Alt+空格+M 移动窗口Alt+空格+S 改变窗口大小Alt+Tab 两个程序交换Alt+255 QQ号中输入无名人Alt+F 打开文件菜单Alt+V 打开视图菜单Alt+E 打开编辑菜单Alt+I 打开插入菜单Alt+O 打开格式菜单Alt+T 打开工具菜单Alt+A 打开表格菜单Alt+W 打开窗口菜单Alt+H 打开帮助菜单Alt+回车查看文件属性Alt+双击文件查看文件属性Alt+X 关闭C语言Shift快捷键Shift+空格半\全角切换Shift + Delete 永久删除所选项,而不将它放到“回收站”中。

拖动某一项时按CTRL 复制所选项。

拖动某一项时按CTRL + SHIFT 创建所选项目的快捷键。

WORD全套快捷键小技巧CTRL+O 打开CTRL+P 打印CTRL+A 全选CTRL+[/] 对文字进行大小设置(在选中目标情况下)CTRL+D 字体设置(在选中目标情况下)CTRL+G/H 查找/替换;CTRL+N 全文删除;CTRL+M 左边距(在选中目标情况下);CTRL+U 绘制下划线(在选中目标情况下);CTRL+B 加粗文字(在选中目标情况下);CTRL+I 倾斜文字(在选中目标情况下);CTRL+Q 两边对齐(无首行缩进),(在选中目标情况下)或将光标放置目标文字的段尾,亦可操作CTRL+J 两端对齐(操作同上)CTRL+E 居中(操作同上)CTRL+R 右对齐(操作同上)CTRL+K 插入超链接CTRL+T/Y 可进行首行缩进(将光标移到需做此操作的段尾,或将此段选中进行操作Ctrl+A(或Ctrl+小键盘上数字5):选中全文。

电脑鼠走迷宫转弯算法的改进与实现

电脑鼠走迷宫转弯算法的改进与实现

源、传感 器 、电机 、微控 制 单元 等功 能模 块 组成 ,电脑 鼠走 迷 宫的过程 主要 是通 过对迷 宫搜
索 算 法 的 研 究 以及 电 机 控 制 、传 感 器 的相 互 配 合 来 实现 。 关 键 词 :A M; 电 脑 鼠 ;迷 宫 搜 索 算 法 ; 中心 法 则 ; 运 动 控 制 R
图 1 1 x 6 准 迷 宫 示 意 图 6 1标
◇ 预 留有 6 G I 个 PO口 、 一 个 串 口 和 一 个 S I P
接 口:
收 稿 日期 :0 0 0 — 7 2 1 — 7 2
◇ 带有矩 阵键 盘和七段 数码 管显示 。
5 电 子 元 器 件 焘 用 2 1 . W Wed c 4 0 1 W . c n 1 c ̄
第 1卷 3
第1 期
电子元 器 件 焘用
El cr n cCo e to i mpo n ne t& De i vceApp iai n lc to s
Vo . 3 1 1 NO 1 .
2 1年 1 01 月
Jn 0 1 a .2 1
d i O3 6  ̄i n16 - 7 52 1 .1 1 o: .9 9 .s . 3 4 9 . 1 . 8 l s 5 0 O 0
行 出 栈 入 栈 , 以 找 到 目标 最 短 的 路 径 ,从 而 实 现
制 以及转 弯算 法等 。
21 底 层 驱 动 中 步 进 电 机 的 加 减 速 控 制 .
智 能 老 鼠快 速 高效 的 到达 迷宫 的终 点 。文 中的 电 脑 鼠采 用 的迷 宫搜 索算 法 为 中心法 则 。中心 法则 是 指在 遇 到有 交叉 路 口且 没有 走过 时 ,智 能 老 鼠 优 先选 择 向迷 宫 中心 的方 向为前 进 方 向 。如 果 电 脑 鼠可 供选 择 前进 的方 向包 含 了两 个都 有 可 能是 离迷 宫 中心 最 近 的方 向时 ,它将 优 先选 择 可 以直

电脑鼠算法

电脑鼠算法
电脑老鼠走迷宫竞赛
算法简介
08计算机(1)班 龚若皓
软件算法所需要实现的功能
最基本的功能: 最基本的功能: 1.正确记录迷宫的信息 1.正确记录迷宫的信息 2.正录小车的状态(当前的方向,四周的挡板情况等) 正确记录小车的状态 3.确保小车的移动, 3.确保小车的移动,停止和转弯的可控性 确保小车的移动
需要实现的核心功能 1.实现基本的从起点到终点的寻路过程。 1.实现基本的从起点到终点的寻路过程。 实现基本的从起点到终点的寻路过程 2.实现等高表的生成算法。 2.实现等高表的生成算法。 实现等高表的生成算法 3.实现从当前的位置通过最有效的路径移动到指定的任意位置。 3.实现从当前的位置通过最有效的路径移动到指定的任意位置。 实现从当前的位置通过最有效的路径移动到指定的任意位置 (通过建立等高表来实现) 通过建立等高表来实现) 4.根据已经得到的迷宫地图信息实现起点到终点的最短路径分析。 4.根据已经得到的迷宫地图信息实现起点到终点的最短路径分析。 根据已经得到的迷宫地图信息实现起点到终点的最短路径分析 (通过建立等高表来实现) 通过建立等高表来实现)
寻路算法简介
正确使用堆栈, 2. 正确使用堆栈,整个选路算法的运行过程中会大量地使用堆栈 的入栈和出栈操作,如果对入栈和出栈的条件判断不正确, 的入栈和出栈操作,如果对入栈和出栈的条件判断不正确,有 可能造成数据紊乱,整个算法就崩溃了, 可能造成数据紊乱,整个算法就崩溃了,最好使用调试版上的 数码管实时显示堆栈栈顶的数据,发现有错误就在程序中寻找 数码管实时显示堆栈栈顶的数据, 错误,直到整个寻路算法稳定为止。 错误,直到整个寻路算法稳定为止。
数据的存储方式
绝对方向和相对方向的变换: 绝对方向和相对方向的变换: 假设数值0 假设数值0,1,2,3分别表示绝对方向的上,右,下,左,那 分别表示绝对方向的上, 么就用0 么就用0,1,2,3中的其中一个数值来表示当前小车车头朝向的方 向,当然这个数值是动态变化的,每转弯一次该数值应当变化一 当然这个数值是动态变化的, 次,例如当前方向的数值为3(左方),那么经过一次右转操作后 例如当前方向的数值为3 左方),那么经过一次右转操作后 ), 该数值就应该变化为0 该数值就应该变化为0了(上方)。其实转化的规则相当简单,只 上方)。其实转化的规则相当简单, )。其实转化的规则相当简单 要右转方向数值就加1 只要左转方向数值就加3 要右转方向数值就加1,只要左转方向数值就加3,只要后转方向数 值就加2 当然可能有越界的情况, 值就加2,当然可能有越界的情况,所以得出的方向数值再进行模 运算对4 运算对4取余数得出的结果就是转弯后小车的车头所面向的方向的 数值了。 数值了。

电脑鼠

电脑鼠

电脑鼠百科名片本词条主要介绍电脑鼠所谓“电脑鼠”,英文名叫做MicroMouse,是使用嵌入式微控制器、传感器和机电运动部件构成的一种智能行走装置的俗称,它可以在“迷宫”中自动记忆和选择路径,寻找出口,最终达到所设定的目的地。

国际电工和电子工程学会(IEEE)每年都要举办一次国际性的电脑鼠走迷宫竞赛,自举办以来参加国踊跃,为此许多大学还开设了“电脑鼠原理和制作”选修课程。

电脑鼠可谓是一种具有人工智能的小型机器人,依照新制的比赛规则,当电脑鼠放入起点,按下启动键之后,它就必须自行决定搜寻法则并且在迷宫中前进、转弯、记忆迷宫墙壁资料、计算最短路径、搜寻终点等功能。

电脑鼠更结合了机械、电机、电子、控制、光学、程序设计和人工智能等多方面的科技知识。

人类在科技的发展史上,一直在尝试着想要创造出一个具有肢体、感官、脑力等综合一体的智能机器人,而电脑鼠就是一个很能够用来诠释肢体、感官及脑力综合工作的基本实例,这也是当初电脑鼠被发明的理由,希望能够借助电脑鼠的创作来进而研究与发明更加复杂的机械。

电脑鼠走迷宫一只电脑鼠是具有机电知识整合的基本架构,本身就像是一个智能的机器人。

要在指定的迷宫中比赛,就像是一个人置身于竞赛中,必须要靠本身的判断力、敏捷动作及正确探查周边环境,来赢得胜利。

一般来说,一只电脑鼠需具备有下列三件基本能力:(1) 拥有稳定且快速的行走能力;(2) 能正确判断能力;(3) 记忆路径的能力。

行走能力指的就是电机,当电机收到讯号时,系统必须判断是否能同步行走,遇到转角时,转弯的角度是否得当,一个好的电机驱动程序,可以减少行走时所需要做的校正时间。

判断能力的关键就在于传感器,它的地位如同人类的双眼,一个好的传感器驱动程序,可避免一些不必要的错误动作,如撞壁、行走路线的偏移等等。

而记忆能力就像是大脑,它的功能并没有因为看不见而遭到忽视,相反地,它的地位在整场比赛中是最重要的,他必须把所走过的路都能一一记下来,并将其资料送给系统,让系统整理出最佳路径以避开不必要的路段。

电脑鼠

电脑鼠

一、应用相关环境下完整源代码二、软件程序流程图三、基于周立功源代码创新点1、搜索时算法进行了优化,提高迷宫搜索效率;2、搜索时速度加快并且实现了连续转弯;3、搜索到终点后返回起点时进行搜索,进一步填充迷宫信息;4、冲刺时速度加快并实现连续转弯,可以快速冲到终点。

四、底层驱动创新点底层驱动的创新点主要分为两个部分,一部分是针对搜索阶段的,另一部分针对冲刺阶段。

搜索阶段:电脑鼠搜索驱动的部分采用了分时分段分弯的三段即时驱动实现,由于随电脑鼠购买时附赠的标准程序(以下简称标准程序)的搜索驱动在直线上是以73的最大加速实现,而在入弯和出弯时都会进入每一格的中心以便实现转弯的准确,这样就导致搜索的整体速度无法提高,且对一些比较复杂的弯道无法准确通过。

本程序在对标准程序作了较大的改动后很好的解决了上述问题,且在整体搜索的速度、准确度和可靠度上有了很大的提高。

以下是对一些改动和创新的的分析:一、搜索驱动方法上的改进和创新。

1、搜索驱动更有针对性。

标准程序的搜索只有一套驱动mazeserch,由于本电脑鼠算法的改进创新,标准程序中的一套搜索驱动已经不能完成当前的搜索任务。

本驱动部分给出了两种搜索方式,第一种用于冲刺前的第一次搜索,采用最大速度为90的快速搜索,由于速度的提升,以及配合算法的调用,搜索驱动是重新编写的三段即时驱动,即在较快速度下直线、单弯、连弯连贯即时完成的较为节省时间的一种驱动方式。

而在第一次冲刺完成后搜索算法有所变化要搜索全迷宫,所以第二次搜索利用的是在标准程序中搜索驱动基础上改进的常速快速转弯的搜索驱动,通过对弯道、后转的改进能更好的完成最后的搜索。

两种算法更好的针对电脑鼠算法的变化,在性能上得到了很大的提升。

2、整体搜索更快、更准。

标准程序中的程序整体搜索速度最大是73,比较慢。

本驱动最大搜索速度能达到90,在保证搜索准确可靠的前提下,速度得到了很大的提升。

此外,由于在直线、弯道、后转处的改进使得整体驱动对坐标以及车身位置的检测调整,更可靠更稳定。

电脑鼠走迷宫

电脑鼠走迷宫

电脑⿏⾛迷宫电脑⿏⾛迷宫算法改进及仿真测试(部分)2.3.5 迷宫算法改进迷宫最优路径是指从迷宫的⼊⼝到达迷宫出⼝的最短通路。

传统求解迷宫路径问题的算法⼤多采⽤⼴度优先搜索(BFS)或深度优先搜索(DFS)。

由于需要全迷宫搜索,随着迷宫规模的增⼤和复杂性的增加,上述两种算法的空间和时间复杂性将呈指数增加。

针对以上问题,本论⽂对传统算法进⾏优化改进讨论,核⼼思想是利⽤已经探索得知的迷宫信息排除不包含最短路径信息的迷宫格,不予探索。

1、单⾏、单列死点的死胡同排除算法该算法核⼼内容是进⾏数据补全,减少电脑⿏进⼊“死胡同”的次数。

其实迷宫单元的信息并不是只有访问过才能够得到,通过推断的⽅法也是可以得到的。

利⽤某个单元四周的⽅格的信息,就可以推断出此单元的信息,⽽并不需要每⼀个单元都进⾏访问。

如果⼀个迷宫单元三个⽅向有挡板,并且当该迷宫格不是终点时,那么电脑⿏进⼊该迷宫格后必然返回,这对于寻找最短路径信息⽆⽤,此时将该迷宫格第四个⽅向⼀同标记,亦即将迷宫格封闭,不让电脑⿏进⼊该迷宫格,以达到缩短探索时间的⽬的。

如图2.10中圆圈区域,当其四周搜索过时,电脑⿏不应对此区域进⾏访问。

图2.10 死胡同实例根据电脑⿏迷宫特性,迷宫四周的挡板是肯定存在的,可先进⾏预先处理。

⽽且终点四个单元的周围的⼋块挡板有且仅有⼀个是不存在的。

当电脑⿏到达终点,在明确哪个挡板不存在的同时,⽆论其它挡板是否进⾏探测过,都可将它视为挡板存在。

2、多⾏、多列死点的死区域排除算法传统搜索算法中电脑⿏从当前单元移动到下⼀单元的依据是有⽆挡板的存在及是否访问过,⽽未考虑从下⼀单元是否可以在不经过当前单元的情况下到达终点。

形象的说,此种搜索只着眼于当前电脑⿏的移动,⽽不考虑实际效果。

当电脑⿏不能从下⼀单元在不经过当前单元到达终点时,电脑⿏的运⾏就做了“⽆⽤功”,这对于迷宫搜索的执⾏效率产⽣很⼤的副作⽤。

如图2.11所⽰,⽅形区域内即是这种情况,也就是死区域。

电脑鼠走迷宫实验报告附程序

电脑鼠走迷宫实验报告附程序

东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用机电动力试验平台第二届IEEE标准电脑鼠走迷宫竞赛论文东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用机电动力试验平台目录一.软件程序框图 (3)二.参赛软件研发过程 (4)三.软硬件调试过程 (4)四.各组员分工 (4)五.体会心得 (5)附录 (6)参考书目 (9)软件程序框图东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用机电动力试验平台参赛软件研发过程在void main()函数中,采用压栈的方式进行电脑鼠搜索,数组uint8 GmcCrossway[MAZETYPE*MAZETYPE]用于暂存未走过支路坐标。

数组uint8 GucMapBlock[MAZETYPE][MAZETYPE]记录每个点的地图信息,初始化为0x00。

函数void mouseGoahead(int8 cNBlock)、void mazeSearch(void)、void mouseTurnleft(void)、东南大学第二届IEEE标准电脑鼠走迷宫竞赛电脑鼠原理及其应用机电动力试验平台void mouseTurnright(void)、void mouseTurnback(void)和void objectGoTo(int8 cXdst, int8 cYdst)控制电脑鼠的运动状态。

void mapStepEdit(int8 cX, int8 cY)为制作等高图函数,它把记录等高值的数组uint8 GucMapStep[MAZETYPE][MAZETYPE](初始化为0xff)赋值。

当电脑鼠搜索时无方向可走时就按照这个等高图的信息退回上个点,冲刺时也是一样的道理。

另外,为了缩短转弯时间,并且保证电脑鼠的稳定性,采取转弯时整步,直走时半步。

我们在Mouse_Drive.c文件中,加入全局变量int8 maincheck,初始化为0(其中0为不转弯,1为转弯)。

打地鼠编程实现的小游戏挑战

打地鼠编程实现的小游戏挑战

打地鼠编程实现的小游戏挑战随着计算机技术的不断发展,编程已经成为现代社会不可或缺的一环。

在日常生活中,我们可以利用编程知识开发各种小游戏,来增加趣味性和挑战性。

其中,打地鼠游戏是一个经典的小游戏之一。

在这篇文章中,我将介绍打地鼠游戏的编程实现以及其中的一些挑战。

打地鼠游戏是一款简单而有趣的游戏,玩家需要通过点击屏幕来“打击”冒出洞口的地鼠。

游戏中地鼠的移动速度会逐渐加快,需要玩家保持敏捷的反应能力才能获胜。

以下是一个使用Python编程语言实现的简化版本的打地鼠游戏:```import pygameimport random# 游戏初始化pygame.init()screen = pygame.display.set_mode((800, 600))pygame.display.set_caption("打地鼠游戏")# 颜色定义WHITE = (255, 255, 255)# 地鼠类定义class Mole(pygame.sprite.Sprite):def __init__(self):super().__init__()self.image = pygame.image.load("mole.png") self.rect = self.image.get_rect()self.rect.x = random.randint(50, 750)self.rect.y = random.randint(50, 550)def update(self):self.rect.x = random.randint(50, 750)self.rect.y = random.randint(50, 550)# 地鼠精灵组定义moles = pygame.sprite.Group()# 创建地鼠实例,并加入精灵组for i in range(10):mole = Mole()moles.add(mole)# 游戏主循环running = Trueclock = pygame.time.Clock()score = 0while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falseelif event.type == pygame.MOUSEBUTTONDOWN: pos = pygame.mouse.get_pos()for mole in moles:if mole.rect.collidepoint(pos):score += 1mole.update()# 游戏逻辑处理moles.update()# 游戏绘制screen.fill(WHITE)moles.draw(screen)pygame.display.flip()# 控制游戏帧率clock.tick(30)pygame.quit()```在以上代码中,我们使用了Pygame库来实现游戏窗口的创建、画面的绘制以及事件的处理。

电脑鼠 程序修改说明

电脑鼠  程序修改说明

Mouse_Config.h●速度的修改程序:/***************************************************************************************************常量宏定义--电机运行速度***************************************************************************************************/#define MAXSPEED 250 //【此处修改】/* 电机加速运行时的最大速度*/#define SEARCHSPEED 90 //【此处修改】/* 电机搜索迷宫时的最大速度*/说明:这里是确定电机搜索和冲刺的速度。

maze.c●搜索法则的修改程序:/********************************************************************************************************* ** unction name: crosswayChoice // 【此处修改】** Descriptions: 选择一条支路作为前进方向// 【此处修改】** input parameters: 无// 【此处修改】** output parameters: 无// 【此处修改】** Returned value: 无// 【此处修改】*********************************************************************************************************/ void crosswayChoice (void) // 【此处修改】{ int wang=0; // 【此处修改】if(GucXStart==0){ // 【此处修改】if(GmcMouse.cX<=7){ // 【此处修改】if(GucMouseDir==UP) wang=3; // 【此处修改】if(GucMouseDir==DOWN) wa ng=1; // 【此处修改】if(GucMouseDir==RIGHT) wang=4; // 【此处修改】if(GucMouseDir==LE T) wang=0; // 【此处修改】}else{ // 【此处修改】if(GucMouseDir==UP) wang=4; // 【此处修改】if(GucMouseDir==DOWN) wa ng=0; // 【此处修改】if(GucMouseDir==RIGHT) wang=1; // 【此处修改】if(GucMouseDir==LE T) wang=3; // 【此处修改】} // 【此处修改】} // 【此处修改】if(GucXStart==15){ // 【此处修改】if(GmcMouse.cX<=7){ // 【此处修改】if(GucMouseDir==UP) wang=3; // 【此处修改】if(GucMouseDir==DOWN) wa ng=1; // 【此处修改】if(GucMouseDir==RIGHT) wang=4; // 【此处修改】if(GucMouseDir==LE T) wang=0; // 【此处修改】}else{ // 【此处修改】if(GucMouseDir==UP) wang=4; // 【此处修改】if(GucMouseDir==DOWN) wa ng=0; // 【此处修改】if(GucMouseDir==RIGHT) wang=1; // 【此处修改】if(GucMouseDir==LE T) wang=3; // 【此处修改】} // 【此处修改】} // 【此处修改】switch (wang) { // 【此处修改】case 0: // 【此处修改】rightMethod(); // 【此处修改】break; // 【此处修改】case 1: // 【此处修改】leftMethod(); // 【此处修改】break; // 【此处修改】case 2: // 【此处修改】centralMethod(); // 【此处修改】break; // 【此处修改】case 3: // 【此处修改】frontRightMethod(); // 【此处修改】break; // 【此处修改】case 4: // 【此处修改】frontLeftMethod(); // 【此处修改】break; // 【此处修改】default: // 【此处修改】 break; // 【此处修改】 } // 【此处修改】 } // 【此处修改】说明:我们这里的法则其实是把整个迷宫分为了A 、B 两个区域进行的。

西门子 sinumerik SINUMERIK 840D 810D FM-NC 操作指南 2002

西门子 sinumerik SINUMERIK 840D 810D FM-NC 操作指南 2002

操作元件.................................................................................................................................................. 2-1 2.1 2.1.1 2.1.2 2.1.3 2.1.4 2.2 2.3 2.4 2.4.1 操作面板 ...................................................................................................................................... 2-1 OP 031 操作面板 ......................................................................................................................... 2-1 OP 032 操作面板 ......................................................................................................................... 2-1 SLIMLINE OP032S 操作面板....................................................................................................... 2-2 标准键盘 ...................................................................................................................................... 2-3 操作面板键................................................................................................................................... 2-4 机床控制面板 ............................................................................................................................... 2-8 机床控制面板键............................................................................................................................ 2-9 急停.............................................................................................................................................. 2-9

让鼠标滚轮自动旋转的方法

让鼠标滚轮自动旋转的方法

让鼠标滚轮自动旋转的方法
使用脚本或编程:如果你熟悉编程,你可以使用脚本或编程语言来实现鼠标滚轮的自动旋转。

例如,在Python中,你可以使用pyautogui库来模拟鼠标滚动。

这样的脚本可以在你需要自动滚动页面的情况下非常有用,比如自动阅读长网页或自动滚动到网页底部。

使用硬件或外部设备:有些硬件设备或外部设备可能提供了自动滚动鼠标滚轮的功能。

你可以查找并购买这样的设备,以满足你的需求。

使用宏或自动化工具:一些自动化工具或宏软件允许你创建自定义的宏,这些宏可以模拟鼠标滚动。

例如,一些游戏玩家使用这样的工具来自动执行重复的任务,如滚动鼠标滚轮以查看更大的游戏世界。

使用第三方软件:还有一些第三方软件可以模拟鼠标滚轮滚动。

这些软件可能提供了更多的自定义选项,如滚动速度、滚动方向等。

然而,需要注意的是,自动滚动鼠标滚轮可能会违反某些应用或网站的使用条款或政策,特别是当它被用于自动化任务或绕过某些限制时。

因此,在使用这些方法时,请确保你了解并遵守所有相关的规定和政策。

此外,虽然这些方法可以帮助你自动滚动鼠标滚轮,但它们并不能完全模拟人类的手动操作。

在某些情况下,可能需要更高级的技术或工具来实现更复杂的自动化任务。

python编程老鼠21猫40移动步数

python编程老鼠21猫40移动步数

python编程老鼠21猫40移动步数编程老鼠和猫的移动步数是一个经典的问题。

这个问题中,我们有一只老鼠和一只猫,它们同时在一个有限的直线上移动。

老鼠每次可以移动1步或者2步,而猫每次可以移动1步、2步或者4步。

老鼠首先开始移动,然后轮到猫移动,它们交替移动直到有一只达到了或者超过了指定的步数。

在这个问题中,我们需要编写一个Python程序来模拟老鼠和猫的移动步数。

首先,我们可以定义两个变量来表示老鼠和猫的当前位置。

初始时,老鼠和猫都位于0位置。

然后,我们可以使用一个while循环来模拟它们交替移动的过程。

在每一次循环中,我们通过随机数来决定老鼠和猫移动的步数。

在Python中,可以使用random模块来生成随机数。

我们可以使用random.randint(函数来生成一个指定范围内的随机整数。

在这个问题中,老鼠每次可以移动1步或者2步,所以可以使用random.randint(1, 2)来生成一个1或者2的随机整数。

猫每次可以移动1步、2步或者4步,所以可以使用random.randint(1, 4)来生成一个1、2或者4的随机整数。

在每一次循环中,我们可以使用一个if语句来判断老鼠和猫是否已经到达或者超过了指定的步数。

如果是,则打印出老鼠和猫的位置并退出循环。

否则,我们可以根据生成的随机数来更新老鼠和猫的位置。

老鼠的位置可以通过累加老鼠当前位置和随机数得到,而猫的位置可以通过累加猫当前位置和随机数得到。

最后,我们可以打印出老鼠和猫的最终位置,并输出移动的总步数。

下面是一个简单的示例代码:```pythonimport randommouse_position = 0cat_position = 0steps = 0while True:# Mouse movesmouse_move = random.randint(1, 2)mouse_position += mouse_move# Cat movescat_move = random.randint(1, 4)cat_position += cat_movesteps += 1if mouse_position >= 21 or cat_position >= 40: print("Mouse position:", mouse_position)print("Cat position:", cat_position)breakprint("Total steps:", steps)```这个程序会不断生成随机数来模拟老鼠和猫的移动,直到有一只达到了或者超过了指定的步数。

老鼠四处跑的声音特效

老鼠四处跑的声音特效

老鼠四处跑的声音特效
老鼠四处跑的声音特效可以通过以下方式实现:
1. 使用鼠标:在一个硬质表面上,例如木质桌子或地板上滑动一个鼠标,可以模拟老鼠在四处跑动的声音。

尽量模拟老鼠的步幅和速度来增加真实感。

2. 使用对象撞击声:获取一个小塑料或布制的老鼠玩具,将其用力丢在地板上,从不同的角度和距离来模拟老鼠不同方向的奔跑声。

通过调整强度和角度,可以创造出不同的跑步声效。

3. 使用录音设备:在一个相对安静的环境中,使用录音设备录下老鼠在一个封闭空间内四处奔跑的声音。

可以通过模拟脚步的速度和频率来调整录音器材的分辨率和接收范围,以获得逼真的效果。

4. 使用声音编辑软件:将不同录制或收集到的老鼠奔跑声音进行混音、剪辑和处理,以增加真实感。

可以调整音调、音量、回声、混响等参数来达到更逼真的效果。

5. 随机播放声音:可以将上述不同的老鼠奔跑音效制作成一个声音库,然后使用程序或音频播放软件,在不同的位置和时间随机播放这些音效,以模拟老鼠在不同地方四处奔跑的效果。

以上是几种常见的制作老鼠四处跑的声音特效的方法,可以根据具体需求和条件选择适合的方式实现。

电脑鼠连续转弯程序

电脑鼠连续转弯程序

/****************************************Copyright(c)****************************************************** Guangzhou ZHIYUAN electronics Co.,LTD.**** ****--------------File Info---------------------------------------------------------------------------------** File Name: main.c** Last modified Date: 2008/02/14** Last Version: V1.00** Description: MicroMouse615上的无记忆功能的走迷宫实验****--------------------------------------------------------------------------------------------------------** Created By: 廖茂刚** Created date:** Version:** Descriptions:****--------------------------------------------------------------------------------------------------------** Modified by:** Modified date:** Version:** Description:********************************************************************************* **************************//****************************************************************************** ***************************包含头文件******************************************************************************* **************************/#include "hw_memmap.h"#include "hw_ints.h"#include "hw_types.h"#include "interrupt.h"#include "gpio.h"#include "sysctl.h"#include "Systick.h"#include "Timer.h"#include "Pwm.h"#include "Type.h"#include "Zlg7289.h"/****************************************************************************** ***************************PB端口定义******************************************************************************* **************************/#define IRSEND_BEVEL GPIO_PIN_0 /* 驱动斜角红外的调制信号*/#define LEFTSIDE GPIO_PIN_1 /* 左方传感器输出的信号*/#define FRONTSIDE_L GPIO_PIN_2 /* 左前方传感器输出的信号*/#define FRONTSIDE GPIO_PIN_3 /* 前方传感器输出的信号*/#define FRONTSIDE_R GPIO_PIN_4 /* 右前方传感器输出的信号*/#define RIGHTSIDE GPIO_PIN_5 /* 右方传感器输出的信号*//****************************************************************************** ***************************PC端口定义******************************************************************************* **************************/#define KEY GPIO_PIN_4 /* 按键连接的端口*//****************************************************************************** ***************************PD端口定义******************************************************************************* **************************/#define PHRA1 GPIO_PIN_0 /* 右侧步进电机的A1相*/#define PHRA2 GPIO_PIN_1 /* 右侧步进电机的A2相*/#define PHRB1 GPIO_PIN_2 /* 右侧步进电机的B1相*/#define PHRB2 GPIO_PIN_3 /* 右侧步进电机的B2相*/#define PHLA1 GPIO_PIN_4 /* 左侧步进电机的A1相*/#define PHLA2 GPIO_PIN_5 /* 左侧步进电机的A2相*/#define PHLB1 GPIO_PIN_6 /* 左侧步进电机的B1相*/#define PHLB2 GPIO_PIN_7 /* 左侧步进电机的B2相*//****************************************************************************** ***************************PE端口定义******************************************************************************* **************************/#define IRSEND_SIDE GPIO_PIN_0 /* 驱动左前右正向红外发射*//****************************************************************************** ***************************常量宏定义-- 迷宫类型******************************************************************************* **************************/#define MAZETYPE 8 /* 8: 四分之一迷宫;16: 全迷宫*//****************************************************************************** ***************************常量宏定义--前进一个迷宫格步进电机需要走的步数******************************************************************************* **************************/#define ONEBLOCK 125/****************************************************************************** ***************************常量宏定义--电脑鼠状态******************************************************************************* **************************/#define STOP 0 /* 电脑鼠停止*/#define GOAHEAD 1 /* 电脑鼠前进*/#define TURNLEFT 3 /* 电脑鼠向左转*/#define TURNRIGHT 4 /* 电脑鼠向右转*/#define TURNBACK 5 /* 电脑鼠向后转*//****************************************************************************** ***************************常量宏定义--传感器******************************************************************************* **************************/#define LEFT 0 /* 左方传感器*/#define FRONTL 1 /* 左前方传感器*/#define FRONT 2 /* 前方传感器*/#define FRONTR 3 /* 右前方传感器*/#define RIGHT 4 /* 右方传感器*//****************************************************************************** ***************************常量宏定义--电机状态******************************************************************************* **************************/#define MOTORSTOP 0 /* 电机停止*/#define W AITONESTEP 1 /* 电机暂停一步*/#define MOTORRUN 2 /* 电机运行*//****************************************************************************** ***************************常量宏定义--电机运行方向******************************************************************************* **************************/#define MOTORGOAHEAD 0 /* 电机前进*/#define MOTORGOBACK 1 /* 电机后退*//****************************************************************************** ***************************结构体定义******************************************************************************* **************************/struct motor {int8 cState; /* 电机运行状态*/int8 cDir; /* 电机运行方向*/uint32 uiPulse; /* 电机需要转动的步数*/uint32 uiPulseCtr; /* 电机已转动的步数*/int32 iSpeed; /* 电机转动速度*/};typedef struct motor MOTOR;/****************************************************************************** ***************************定义全局变量******************************************************************************* **************************/static MOTOR GmRight = {MOTORSTOP, MOTORGOAHEAD, 0, 0, 0}; /* 定义并初始化右电机状态*/static MOTOR GmLeft = {MOTORSTOP, MOTORGOAHEAD, 0, 0, 0}; /* 定义并初始化左电机状态*/static uint8 GucMouseState = STOP; /* 保存电脑鼠当前运行状态*/static uint32 GuiAccelTable[300] = {0}; /* 电机加减速各阶段定时器值*/static int32 GiMaxSpeed = 70; /* 保存允许运行的最大速度*/static uint8 GucDistance[5] = {0}; /* 记录传感器状态*///static uint32 GuiAccTurn = 16792; /* 拐弯加速1/2定时器的值*///static uint32 GuiDowTurn = 51145; /* 拐弯减速定时器的值*///static uint32 GuiIniSpeed = 200000;/****************************************************************************** **************************定义转弯的标志0:为不转弯1:为转弯******************************************************************************* **************************/static uint8 GucTurn = 0;/****************************************************************************** ***************************** Function name: delay** Descriptions: 延时函数** input parameters: uiD :延时参数,值越大,延时越久** output parameters: 无** Returned value: 无******************************************************************************* **************************/void delay (uint32 uiD){for (; uiD; uiD--);}/****************************************************************************** ***************************** Function name: rightMotorContr** Descriptions: 右步进电机驱动时序** input parameters: 无** output parameters: 无** Returned value: 无******************************************************************************* **************************/void rightMotorContr (void){static int8 cStep = 0; /* 保存电机当前位置*/switch (GmRight.cDir) {case MOTORGOAHEAD: /* 向前步进*/cStep = (cStep + 1) % 8;break;case MOTORGOBACK: /* 向后步进*/cStep = (cStep + 7) % 8;break;default:break;}switch (cStep) {case 0: /* A2B2 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRA1 | PHRA2 | PHRB1 | PHRB2);break;case 1: /* A2 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRA1 | PHRA2);break;case 2: /* A2B1 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRA1 | PHRA2 | PHRB2);break;case 3: /* B1 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRB2);break;case 4: /* A1B1 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRA2 | PHRB2);break;case 5: /* A1 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRA2);break;case 6: /* A1B2 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRA2 | PHRB1 | PHRB2);break;case 7: /* B2 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRB1 | PHRB2);break;default:break;}}/****************************************************************************** ***************************** Function name: leftMotorContr** Descriptions: 左步进电机驱动时序** input parameters: GmLeft.cDir :电机运行方向** output parameters: 无** Returned value: 无******************************************************************************* **************************/void leftMotorContr (void){static int8 cStep = 0; /* 保存电机当前位置*/switch (GmLeft.cDir) {case MOTORGOAHEAD: /* 向前步进*/cStep = (cStep + 1) % 8;break;case MOTORGOBACK: /* 向后步进*/cStep = (cStep + 7) % 8;break;default:break;}switch (cStep) {case 0: /* A2B2 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLA1 | PHLA2 | PHLB1 | PHLB2);break;case 1: /* B2 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLB1 | PHLB2);break;case 2: /* A1B2 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLA2 | PHLB1 | PHLB2);break;case 3: /* A1 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLA2);break;case 4: /* A1B1 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLA2 | PHLB2);break;case 5: /* B1 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLB2);break;case 6: /* A2B1 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLA1 | PHLA2 | PHLB2);break;case 7: /* A2 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLA1 | PHLA2);break;default:break;}}/*********************************************************************************************************** Function name: speedContrR** Descriptions: 右电机速度调节** input parameters: 无** output parameters: 无** Returned value: 无******************************************************************************* **************************/void speedContrR (void){int32 iDPusle;iDPusle = GmRight.uiPulse - GmRight.uiPulseCtr; /* 统计电机还剩余的步数*/if (iDPusle <= GmRight.iSpeed) {GmRight.iSpeed--;} else { /* 非减速区间,则加速到最大值*/if (GmRight.iSpeed < GiMaxSpeed) {GmRight.iSpeed++;} else {GmRight.iSpeed--;}}if (GmRight.iSpeed < 0) { /* 设置速度下限*/GmRight.iSpeed = 0;}TimerLoadSet(TIMER0_BASE, TIMER_A, GuiAccelTable[GmRight.iSpeed]); /* 设置定时时间*/}/****************************************************************************** ***************************** Function name: speedContrL** Descriptions: 左电机速度调节** input parameters: 无** output parameters: 无** Returned value: 无******************************************************************************* **************************/void speedContrL (void){int32 iDPusle;iDPusle = GmLeft.uiPulse - GmLeft.uiPulseCtr; /* 统计电机还剩余的步数*/if (iDPusle <= GmLeft.iSpeed) {GmLeft.iSpeed--;} else { /* 非减速区间,则加速到最大值*/if (GmLeft.iSpeed < GiMaxSpeed) {GmLeft.iSpeed++;}}if (GmLeft.iSpeed < 0) { /* 设置速度下限*/GmLeft.iSpeed = 0;}TimerLoadSet(TIMER1_BASE,TIMER_A,GuiAccelTable[GmLeft.iSpeed]); /* 设置定时时间*/}/****************************************************************************** ***************************** Function name: Timer0A_ISR** Descriptions: Timer0中断服务函数** input parameters: 无** output parameters: 无** Returned value: 无******************************************************************************* **************************/void Timer0A_ISR(void){static int8 n = 0,m = 0;TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT); /* 清除定时器0中断。

电脑鼠实验报告

电脑鼠实验报告

《视觉机器人》实验报告学院:姓名:专业:二零一六年一月目录第1章背景和意义 .................................................第2章系统方案设计.................................................第3章硬件设计......................................................3.1电脑鼠基本硬件组成.............................................3.2电脑鼠基本动作.................................................第4章软件设计.....................................................4.1电脑鼠软件设计概要说明.........................................4.2等高图制作模块...............................................4.3冲刺模块.....................................................4.4转弯模块.....................................................4.5搜索模块.....................................................4.6迷宫地图相对方向与绝对方向的建立.............................4.7墙壁资料存储.................................................4.8电脑鼠搜索策略...............................................参考文献............................................................附件: ............................................................第1章背景和意义电脑鼠可看作是一种具有人工智能的小型机器人,依照比赛规则,当电脑鼠放入“迷宫”起点,按下启动键之后,它就必须自行决定搜寻法则并且在迷中前进、转弯、记忆迷宫墙壁资料、计算最短路径、搜寻终点等功能。

关于电脑鼠的论文(有框图)

关于电脑鼠的论文(有框图)

电脑鼠学习心得和遇到的问题及解决方法彭旺 16012126学习心得:在大一的时候就经常看见学长们整天在宿舍弄一个小车,后来才知道那就是视觉知道机器人。

于是到了大二选择选修课的时候就果断选了这个课。

本来我选的是机器人那个,上了才知道又要做实验还要参加比赛还要交押金甚是麻烦,顿时欲哭无泪,硬着头皮去上,因为分组问题被弄到了电脑鼠这边来,觉得比机器人那边要好玩得多。

第一次去上课就要交押金,并且那个电脑鼠还好贵的,整整两千多啊。

那是最开始就给我们讲了电脑鼠处理器运行的相关函数,后面几节课分别讲了电脑鼠在迷宫中搜索以及最后冲刺的相关程序。

好吧,我承认当时确实有点无聊。

直到后来,老师终于给了我们完整的程序,于是兴奋的我们毫不犹豫的把程序“捎”了进去,然后把电脑鼠放到迷宫中,结果发现它除了撞墙就是转圈。

探索调试:我们小组分工合作,一起研发。

电脑鼠走迷宫可以采用全迷宫探索策略,即将迷宫的所有单元均搜索一次,从中找出最佳的行走路径。

或者可以采用部分迷宫探索策略,即在有限的时间或探测次数下,只探测迷宫的一部分,从中找出次最佳的路径。

我们的电脑鼠要实现的功能有如下几个方面:路口检测:由安装在前、右、左的三个红外线发射对管SIR563ST3F 和IRM8601S实现, 发射信号为38KHz, 实现远红外测距功能, 探测前、右、左有无障碍。

行走控制:由左、右两个红外线发射对管SIR563ST3F和IRM8601S为实现, 发射信号为30.5KHz, 实现近红外测距功能, 保持电脑鼠在中轴线上行走, 避免撞墙。

路程控制:安装在左右轮内侧的红外收发对管IR204和PD204一6B, 对黑白码盘计数, 按照迷宫单元的长度为单位进行路程计数, 以记录老鼠在迷宫中的位置同时还可以准确地实现转弯。

微控制器和其它子系统共同构成一个闭环的反馈控制系统, 通过对三种传感器信号的检测行走信号、路口信号和黑白码盘计数信号, 由微控制器进行运算, 运算结果交给电机执行, 由此实现电脑鼠的智能穿越迷宫。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/****************************************Copyright(c)****************************************************** Guangzhou ZHIYUAN electronics Co.,LTD.**** ****--------------File Info---------------------------------------------------------------------------------** File Name: main.c** Last modified Date: 2008/02/14** Last Version: V1.00** Description: MicroMouse615上的无记忆功能的走迷宫实验****--------------------------------------------------------------------------------------------------------** Created By: 廖茂刚** Created date:** Version:** Descriptions:****--------------------------------------------------------------------------------------------------------** Modified by:** Modified date:** Version:** Description:********************************************************************************* **************************//****************************************************************************** ***************************包含头文件******************************************************************************* **************************/#include "hw_memmap.h"#include "hw_ints.h"#include "hw_types.h"#include "interrupt.h"#include "gpio.h"#include "sysctl.h"#include "Systick.h"#include "Timer.h"#include "Pwm.h"#include "Type.h"#include "Zlg7289.h"/****************************************************************************** ***************************PB端口定义******************************************************************************* **************************/#define IRSEND_BEVEL GPIO_PIN_0 /* 驱动斜角红外的调制信号*/#define LEFTSIDE GPIO_PIN_1 /* 左方传感器输出的信号*/#define FRONTSIDE_L GPIO_PIN_2 /* 左前方传感器输出的信号*/#define FRONTSIDE GPIO_PIN_3 /* 前方传感器输出的信号*/#define FRONTSIDE_R GPIO_PIN_4 /* 右前方传感器输出的信号*/#define RIGHTSIDE GPIO_PIN_5 /* 右方传感器输出的信号*//****************************************************************************** ***************************PC端口定义******************************************************************************* **************************/#define KEY GPIO_PIN_4 /* 按键连接的端口*//****************************************************************************** ***************************PD端口定义******************************************************************************* **************************/#define PHRA1 GPIO_PIN_0 /* 右侧步进电机的A1相*/#define PHRA2 GPIO_PIN_1 /* 右侧步进电机的A2相*/#define PHRB1 GPIO_PIN_2 /* 右侧步进电机的B1相*/#define PHRB2 GPIO_PIN_3 /* 右侧步进电机的B2相*/#define PHLA1 GPIO_PIN_4 /* 左侧步进电机的A1相*/#define PHLA2 GPIO_PIN_5 /* 左侧步进电机的A2相*/#define PHLB1 GPIO_PIN_6 /* 左侧步进电机的B1相*/#define PHLB2 GPIO_PIN_7 /* 左侧步进电机的B2相*//****************************************************************************** ***************************PE端口定义******************************************************************************* **************************/#define IRSEND_SIDE GPIO_PIN_0 /* 驱动左前右正向红外发射*//****************************************************************************** ***************************常量宏定义-- 迷宫类型******************************************************************************* **************************/#define MAZETYPE 8 /* 8: 四分之一迷宫;16: 全迷宫*//****************************************************************************** ***************************常量宏定义--前进一个迷宫格步进电机需要走的步数******************************************************************************* **************************/#define ONEBLOCK 125/****************************************************************************** ***************************常量宏定义--电脑鼠状态******************************************************************************* **************************/#define STOP 0 /* 电脑鼠停止*/#define GOAHEAD 1 /* 电脑鼠前进*/#define TURNLEFT 3 /* 电脑鼠向左转*/#define TURNRIGHT 4 /* 电脑鼠向右转*/#define TURNBACK 5 /* 电脑鼠向后转*//****************************************************************************** ***************************常量宏定义--传感器******************************************************************************* **************************/#define LEFT 0 /* 左方传感器*/#define FRONTL 1 /* 左前方传感器*/#define FRONT 2 /* 前方传感器*/#define FRONTR 3 /* 右前方传感器*/#define RIGHT 4 /* 右方传感器*//****************************************************************************** ***************************常量宏定义--电机状态******************************************************************************* **************************/#define MOTORSTOP 0 /* 电机停止*/#define W AITONESTEP 1 /* 电机暂停一步*/#define MOTORRUN 2 /* 电机运行*//****************************************************************************** ***************************常量宏定义--电机运行方向******************************************************************************* **************************/#define MOTORGOAHEAD 0 /* 电机前进*/#define MOTORGOBACK 1 /* 电机后退*//****************************************************************************** ***************************结构体定义******************************************************************************* **************************/struct motor {int8 cState; /* 电机运行状态*/int8 cDir; /* 电机运行方向*/uint32 uiPulse; /* 电机需要转动的步数*/uint32 uiPulseCtr; /* 电机已转动的步数*/int32 iSpeed; /* 电机转动速度*/};typedef struct motor MOTOR;/****************************************************************************** ***************************定义全局变量******************************************************************************* **************************/static MOTOR GmRight = {MOTORSTOP, MOTORGOAHEAD, 0, 0, 0}; /* 定义并初始化右电机状态*/static MOTOR GmLeft = {MOTORSTOP, MOTORGOAHEAD, 0, 0, 0}; /* 定义并初始化左电机状态*/static uint8 GucMouseState = STOP; /* 保存电脑鼠当前运行状态*/static uint32 GuiAccelTable[300] = {0}; /* 电机加减速各阶段定时器值*/static int32 GiMaxSpeed = 70; /* 保存允许运行的最大速度*/static uint8 GucDistance[5] = {0}; /* 记录传感器状态*///static uint32 GuiAccTurn = 16792; /* 拐弯加速1/2定时器的值*///static uint32 GuiDowTurn = 51145; /* 拐弯减速定时器的值*///static uint32 GuiIniSpeed = 200000;/****************************************************************************** **************************定义转弯的标志0:为不转弯1:为转弯******************************************************************************* **************************/static uint8 GucTurn = 0;/****************************************************************************** ***************************** Function name: delay** Descriptions: 延时函数** input parameters: uiD :延时参数,值越大,延时越久** output parameters: 无** Returned value: 无******************************************************************************* **************************/void delay (uint32 uiD){for (; uiD; uiD--);}/****************************************************************************** ***************************** Function name: rightMotorContr** Descriptions: 右步进电机驱动时序** input parameters: 无** output parameters: 无** Returned value: 无******************************************************************************* **************************/void rightMotorContr (void){static int8 cStep = 0; /* 保存电机当前位置*/switch (GmRight.cDir) {case MOTORGOAHEAD: /* 向前步进*/cStep = (cStep + 1) % 8;break;case MOTORGOBACK: /* 向后步进*/cStep = (cStep + 7) % 8;break;default:break;}switch (cStep) {case 0: /* A2B2 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRA1 | PHRA2 | PHRB1 | PHRB2);break;case 1: /* A2 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRA1 | PHRA2);break;case 2: /* A2B1 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRA1 | PHRA2 | PHRB2);break;case 3: /* B1 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRB2);break;case 4: /* A1B1 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRA2 | PHRB2);break;case 5: /* A1 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRA2);break;case 6: /* A1B2 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRA2 | PHRB1 | PHRB2);break;case 7: /* B2 */GPIOPinWrite(GPIO_PORTD_BASE,PHRA1 | PHRA2 | PHRB1 | PHRB2,PHRB1 | PHRB2);break;default:break;}}/****************************************************************************** ***************************** Function name: leftMotorContr** Descriptions: 左步进电机驱动时序** input parameters: GmLeft.cDir :电机运行方向** output parameters: 无** Returned value: 无******************************************************************************* **************************/void leftMotorContr (void){static int8 cStep = 0; /* 保存电机当前位置*/switch (GmLeft.cDir) {case MOTORGOAHEAD: /* 向前步进*/cStep = (cStep + 1) % 8;break;case MOTORGOBACK: /* 向后步进*/cStep = (cStep + 7) % 8;break;default:break;}switch (cStep) {case 0: /* A2B2 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLA1 | PHLA2 | PHLB1 | PHLB2);break;case 1: /* B2 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLB1 | PHLB2);break;case 2: /* A1B2 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLA2 | PHLB1 | PHLB2);break;case 3: /* A1 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLA2);break;case 4: /* A1B1 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLA2 | PHLB2);break;case 5: /* B1 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLB2);break;case 6: /* A2B1 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLA1 | PHLA2 | PHLB2);break;case 7: /* A2 */GPIOPinWrite(GPIO_PORTD_BASE,PHLA1 | PHLA2 | PHLB1 | PHLB2,PHLA1 | PHLA2);break;default:break;}}/*********************************************************************************************************** Function name: speedContrR** Descriptions: 右电机速度调节** input parameters: 无** output parameters: 无** Returned value: 无******************************************************************************* **************************/void speedContrR (void){int32 iDPusle;iDPusle = GmRight.uiPulse - GmRight.uiPulseCtr; /* 统计电机还剩余的步数*/if (iDPusle <= GmRight.iSpeed) {GmRight.iSpeed--;} else { /* 非减速区间,则加速到最大值*/if (GmRight.iSpeed < GiMaxSpeed) {GmRight.iSpeed++;} else {GmRight.iSpeed--;}}if (GmRight.iSpeed < 0) { /* 设置速度下限*/GmRight.iSpeed = 0;}TimerLoadSet(TIMER0_BASE, TIMER_A, GuiAccelTable[GmRight.iSpeed]); /* 设置定时时间*/}/****************************************************************************** ***************************** Function name: speedContrL** Descriptions: 左电机速度调节** input parameters: 无** output parameters: 无** Returned value: 无******************************************************************************* **************************/void speedContrL (void){int32 iDPusle;iDPusle = GmLeft.uiPulse - GmLeft.uiPulseCtr; /* 统计电机还剩余的步数*/if (iDPusle <= GmLeft.iSpeed) {GmLeft.iSpeed--;} else { /* 非减速区间,则加速到最大值*/if (GmLeft.iSpeed < GiMaxSpeed) {GmLeft.iSpeed++;}}if (GmLeft.iSpeed < 0) { /* 设置速度下限*/GmLeft.iSpeed = 0;}TimerLoadSet(TIMER1_BASE,TIMER_A,GuiAccelTable[GmLeft.iSpeed]); /* 设置定时时间*/}/****************************************************************************** ***************************** Function name: Timer0A_ISR** Descriptions: Timer0中断服务函数** input parameters: 无** output parameters: 无** Returned value: 无******************************************************************************* **************************/void Timer0A_ISR(void){static int8 n = 0,m = 0;TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT); /* 清除定时器0中断。

相关文档
最新文档