找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2749|回复: 3
收起左侧

擂台比武机器人控制程序源代码,附电路仿真设计说明书,图文并茂

[复制链接]
ID:582476 发表于 2019-7-11 17:57 | 显示全部楼层 |阅读模式
控制程序源代码
void DodgeEdge(void)
{
FindEdge();                // 开始检测边缘
while(g_edge_find_flag)      // 如果到达边缘  
{
MoveBack(15);          // 机器人后退
FindEdge();             // 再次检测边缘                  
}
}
检测敌人:
temp16 = read_gpio();                    // 红外传感器触发时输出为低
io_in = (uint8)(temp16>>8);
io_in &= (FIND_ENEMY_SENSOR);      // #define FIND_ENEMY_SENSOR  0x80
if((io_in & FIND_ENEMY_SENSOR) == 0)          // 检测传感器如检测到输入则再检测4次防止误判断
{  
temp8++;
or(i = 0 ; i < 3 ; i++)  // 120ms内检测再3次传感器累加值大于2即说明传感器输入有效

  {delay(2);                            // 延时2*20=40ms
temp16 = read_gpio();
io_in = (uint8)(temp16>>8);
io_in &= (FIND_ENEMY_SENSOR);   // 默认传感器触发时输出为低
if((io_in & FIND_ENEMY_SENSOR) == 0)  
{
temp8++;
}
}
}
碰撞检测:
FindEnemy();                   // 开始检测敌人      
if(g_enemy_find_flag == 1)        //前超声传感器检测到敌人      
{
g_enemy_find_times = 0;    //前超声传感器检测敌人次数初始为0
DodgeEdge();           // 开始检测边缘
MoveOn(20);        // 前进驱赶敌人  
FindEnemy();  
}
else                            //即前后超声传感器都没检测到敌人

   {  
DodgeEdge();                // 开始检测边缘
TurnRight(3);                // 转动一个角度
delay(10);  
FindEnemy();
}
武术擂台赛机器人程序主函数说明如下  int main(void)
{
Sys_Init();      // 系统初始化
gpio_mode_set(IO_MODE);        // 设置io口模式IO0-IO7全为输入IO8-IO15全为输出(1为输出0为输入)
write_gpio(g_io_value);   // 设置io输出值及输入状态IO0-IO7输入使能由于电路原因。
// 输出为低时led才会亮IO8-IO15输出信号为低0。
g_find_redblock_mode = 1;     //进入寻心模式
delay(10);                        //延时10x0.1s=1s
武术擂台攻击型机器人控制系统设计
30  FindRedBlockFirstTime();
while(TRUE)                    // TRUE,FALSE
{
while(g_find_redblock_mode)  //进入寻心模式
{
FindblackBlock();      //寻找擂台黑色圆心
}
while(g_anti_enemy_mode)  //进入寻找敌人攻击敌人模式
{
AntiEnemyAction();  //寻找并攻击敌人
}
}
while(FALSE)                       // 单模式调试用  
{
AntiEnemyAction();      //寻找并攻击敌人
}
while(FALSE)                        // 单模式调试用  
{
FindblackBlock();     //寻找擂台黑色圆心
}
}
机器人前行与后退;
void MoveOn(uint8 move_time)     / /机器人前行
{
uint8 array_dc[8] = {0};          //定义机器人运动数组
array_dc[0] = 0;
array_dc[1] = 1 * move_time;       //电机运动函数的分辨率为0.1s注意控制延时的长短
array_dc[2] = 0xFE;           //左右前轮为12电机左右后轮为三四电机两两速度相反 rray_dc[3] = 1 * move_time;
array_dc[4] = 0;
array_dc[5] = 1 * move_time;
rray_dc[6] = 0xFE;
array_dc[7] = 1 * move_time;
dc_moto_control(array_dc);
delay(5 * move_time);
}
void MoveBack(uint8 move_time)                          //机器人后退
{
uint8 array_dc[8]={0};
array_dc[0]=0xFE;
array_dc[1]=1*move_time;
array_dc[2]=0;
array_dc[3]=1*move_time;
array_dc[4]=0xFE;
array_dc[5]=1*move_time;
array_dc[6]=0;
array_dc[7]=1*move_time;
dc_moto_control(array_dc);
delay(5*move_time);
}
机器人左右转转:
void TurnRight(uint8 move_time)         //机器人右转
{
uint8 array_dc[8]={0};
array_dc[0]=0;
array_dc[1]=1*move_time;
array_dc[2]=0;
array_dc[3]=1*move_time;
array_dc[4]=0;
array_dc[5]=1*move_time;
array_dc[6]=0;
array_dc[7]=1*move_time;
dc_moto_control(array_dc);
delay(5*move_time);
}
void TurnLeft(uint8 move_time)        //机器人3转
{
uint8 array_dc[8]={0};
array_dc[0]=0xFE;
array_dc[1]=1*move_time;
array_dc[2]=0xFE;
array_dc[3]=1*move_time;
array_dc[4]=0xFE;
array_dc[5]=1*move_time;
array_dc[6]=0xFE;
array_dc[7]=1*move_time;
dc_moto_control(array_dc);
delay(5*move_time);
}
123.png

武术擂台机器人(1).docx

2.1 MB, 下载次数: 16, 下载积分: 黑币 -5

小车程序,仿真,电路图.rar

128.98 KB, 下载次数: 16, 下载积分: 黑币 -5

回复

使用道具 举报

ID:1 发表于 2019-7-11 18:22 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

ID:523982 发表于 2019-7-11 20:23 | 显示全部楼层
希望增加更多资料
回复

使用道具 举报

ID:282095 发表于 2019-7-12 14:16 | 显示全部楼层
不算太完整哦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表